蔡学镛:我心目中理想的编程语言

jopen 10年前

蔡学镛:我心目中理想的编程语言

        一个好的编程语言应该让你驰骋在自己的脑海中,自由飞翔,而不是设置重重障碍拖累你。除了这个笼统的说法之外,我自己有一套语言评分标准,我理 想中的语言必须符合这篇文章所描述的各点(依重要次序排列)。你也可以拿这些条件来检视目前你正在使用的语言(例如 Java、C#、Ruby),看看你 的语言表现如何。

        【支持 Unicode】 

        所有不支持 Unicode 的语言,都应该被埋在上个世纪的历史灰烬中。虽然 Unicode 早就已经是主流,但是还有一些语言不支持 Unicode,这是致命的缺点。即使号称支持 Unicode,也有程度的差异,例如有的语言对 Unicode 的支持是后来添加的,有点格格不入,且有些语言对 Unicode 的支持相当有限。

        【写一次,到处都可执行】

        最好支持 Windows、MacOS、Linux、BSD 等主流 OS,甚至 iOS、Android 等手机 OS。

        【支持各种软件开发】

        我希望能用一个语言做系统开发、驱动开发、DLL 开发、应用开发、服务器开发、脚本开发。

        【超小的执行环境】

        现在的软件都大得可怕。几乎所有现代的语言,都需要 10MB 以上的执行环境,而 50MB 以上的也不少见。执行环境太大有什么不好: (1) 下载、安装时耗费时间与资源; (2) 执行时速度「可能」会比较差;(3) 潜藏其中的 bug「可能」比较多。因此,我极度抗拒痴肥的语言与框架。

        【包含 GUI】

        大多数 Open Source 的语言,都不包含 GUI,而是使用外部的 Tk、wxWidget 等库,这些外部库往往:(1) 相当庞大;(2) 效率「可能」不是很好; (3) 不见得和语言本身的范式(paradigm)吻合,使用起来可能会导致精神错乱。除了 GUI 库,我也希望具有比较好的 2D / 3D 绘图引擎。

        【用更少,做更多】

        程序写得越长,不代表越有价值。能够用精简的代码,做出许多重要的事,才是我们追求的目标。写出来的代码短,会比较好维护。

        【支持 Meta-Programming】

        我希望能够不需要再通过 ANTLR 等工具,而是可以直接用语言本身,轻易地写程序处理另一种(我自己发明的)小语言,并让两种语言之间可以 互相融合,达到最佳的 DSL(Domain Specific Language)境界。如此一来,开发的效率会相当高,且需要的代码会相当少。

        我希望重要的 DSL 都已经有人先建立好了,我可以直接采用,特别是 Web、数据库、GUI 这些部分。

        【好用的剖析器】

        现在程序需要剖析文字档的机会很高,我不喜欢 Regular Expression,也不想用外部的 ANTLR,我希望能有更方便使用的剖析器,让我可以利用 BNF(Backus- Naur Form)的写法。

        【能够调用 C 的库】

        许多时候,光靠语言本身还是做不到的事,必须呼叫 OS 或其他厂商的 C 程序库。如果语言和 C 之间能有良好的调用规范,那么调用外部程序库就会很容易。我希望不只能调用 C,也可以做成 call-back 函数,让 C 回调。

        【具有良好的 Web 与数据库方案】

        现在做软件开发,十之八九都是 Web 加上数据库。如果该语言可以轻易地做出这样的方案,会相当具有吸引力。

        【能嵌入汇编语言】

        写 C 程式时,我们可以嵌入 x86 汇编语言,以提升速度。我希望现在一般的语言也能够有类似的作法,让我可以嵌入比较低阶的语言,舍弃一些检查(例如型态检查,数组边界检查),换取速度的提升。

        【丰富的数据类型 Literal】

        我希望语言能有丰富的数据类型,且能够用 literial 的方式写出这些类型的值,如此一来,写起来非常简短方便,表达力更好,并可能有其他的好处(例如让 DSL 的设计更容易)。

        可惜目前主流的语言,Literial 的写法都只有不到 10 种,不外乎是整数、小数、字符串、数组,距离我所谓的「丰富」,还有好几倍的差距。

        【轻量级的 RPC / SOA】

        我希望语言能支持 RPC / SOA,且使用轻量级的方式,不要搞得像 IBM 的 SOA 那么复杂。复杂的东西又贵又难上手,失败告终的机会很高。

        【有交互操作模式】

        对于初学者来说,交互模式是相当好的学习方式,而且也可以当作 Shell,进行日常一些基本的操作(例如文件系统管理)。

        【免费与开放源码】

        软件开发的钱很难赚,能省则省。另外,开放源码的语言比较有保障,比较不会因为厂商关门而使得该语言产品的用户变成孤儿。

        【有很强的社群】

        社群可以帮我们解决技术问题,告诉我们到哪里取用资源。社群的存在,可以帮助语言健康地发展。

        【支持浏览器】

        代码可以编译成 JavaScript/HTML5,让程序可在浏览器内执行。

        我到现在还没有找到完全符合这些条件的语言。或者,你已经发现了这样的语言?