为什么这么多人喜欢写编译器

栏目: 服务器 · 编程工具 · 发布时间: 7年前

内容简介:首先为什么有那么多编程语言?为什么你们都不去用 C 语言?面对服务端开发,我们有了 Py,Ruby,Java,Go,Rust;面对科学计算我们有 Julia,R;面对网页应用我们有 JS,TS;面对 Gnome 的 GUI 开发我们有了 Vala;面向字符串拼接我们有了 AWK,Perl,SNOBOL4;面向拯救人类我们有 Coq,Agda,Idris,F*,面向游戏我们有 Lua,C#,F#,面向毁灭宇宙我们有 NatsuLang。不同的领域需求不一样,之前你很熟悉,觉得很好用的 XX 领域语言在 YY

原文

首先为什么有那么多编程语言?为什么你们都不去用 C 语言?

面对服务端开发,我们有了 Py,Ruby,Java,Go,Rust;面对科学计算我们有 Julia,R;面对网页应用我们有 JS,TS;面对 Gnome 的 GUI 开发我们有了 Vala;面向字符串拼接我们有了 AWK,Perl,SNOBOL4;面向拯救人类我们有 Coq,Agda,Idris,F*,面向游戏我们有 Lua,C#,F#,面向毁灭宇宙我们有 NatsuLang。

不同的领域需求不一样,之前你很熟悉,觉得很好用的 XX 领域语言在 YY 领域不一定很好用。

比如 Java 写 GUI 就很难受(因为没有多继承),Perl 拿来写游戏速度又不够。没有 F*、Agda 怎么拯救人类?没有 NatsuLang 怎么毁灭宇宙?没有 Coq 的女装是没有灵魂的,对不对。

比如我要描述一些专门拿来拼字符串的逻辑,就有很多复杂的正则之类的逻辑,我相信会正则表达式的 程序员 很多都只会使用『匹配』这一功能,会把值 group 出来的就少很多,知道实现的又少很多,知道正则可以编译的又少很多,知道正则还能 JIT 的就更少了,你怎么又能保证没有希望使用正则代替 bnf 的愿望呢?这些需求,编程复杂度层层叠加,有时使用通用语言不得不写出大而繁琐的库。这时你可以就希望把这些复杂的需求写成一些 DSL ,然后发现,为什么不再弄一个单独的语言,去掉其他你觉得不必要的特性,把你想做的 DSL 直接弄进去呢?有些语言的部分功能会阻止优化(比如某缩进带语义的语言的JIT),如果你希望你的DSL跑的像射命丸文一样快,你可以把这些特性去掉,然后你就能在你自己的编译器里做优化(inline,JIT,fusion,tco,lazy,unwrap lambda)了。

然后你又会发现,这些其实很简单的东西知乎上的程序员似乎觉得这很高大上诶!那些脑子转不过来的程序员连 Parser Combinator 都搞不懂,用 JS 写出 JS 的 Parser、写出 C 语言的 Tokenizer 和 Grammar Analyzer 就能称霸一方,你一去他们岂不是集体跪拜?然后你在社区获得了正反馈,积累来的编程语言优化经验给了你大厂的工作机会,公司的网站又快了几倍,被无所事事的同事抢了三分之二的功劳剩下的钱也够你过上学生时代希望的平淡生活了。

编译技术就是这样的,好玩。

一些解释

这部分内容是知乎上没有的。

Pattern.compile

From https://www.zhihu.com/question/39304476/answer/484974255


以上所述就是小编给大家介绍的《为什么这么多人喜欢写编译器》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

支付战争

支付战争

埃里克•杰克逊 / 徐彬、王晓、清华大学五道口金融学院未央研究 审译 / 中信出版社 / 2015-5-19 / 49.00

这是一个野心勃勃的创业计划,在线支付鼻祖PayPal试图创造一个“统治世界”的金融操作系统,并在全球成功推广一款颠覆式的互联网产品。 《支付战争》的作者是“PayPal黑帮”成员之一,他真实还原了这个伟大产品是如何诞生的,以及在后来的发展壮大之路上,如何应对融资紧张、突破增长瓶颈,在竞争者凶猛围剿与平台商霸王条款的夹击下,逆境求生,改变业务模式,最终完成IPO,并成功出售给竞争对手eBay的......一起来看看 《支付战争》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码