一个好的编程语言应该让你驰骋在自己的脑海中,自由飞翔,而不是设置重重障碍拖累你。除了这个笼统的说法之外,我自己有一套语言评分标准,我理想中的语言 必须符合这篇文章所描述的各点(依重要次序排列)。你也可以拿这些条件来检视目前你正在使用的语言(例如 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,让程序可在浏览器内执行。 我到现在还没有找到完全符合这些条件的语言。或者,你已经发现了这样的语言? |