在我当前所在项目里,编程其中的语言语某一个子系统是用 Groovy 中的 Gradle 插件。Groovy 作为一个运行在 JVM 上的淘汰脚本语言,天生具有胶水的选错特性。加之,毁终它支持 DSL 与其程式的编程简洁语法。嗯,语言语如果不考虑性能问题,淘汰这真的选错是不一个不错的语言。 可真的毁终是如此吗? 开始之前,我再次 FBI warning 一下: 引子 1 :编程语言的读与写 我们都知道,编程语言是写给人看的代码,写机器运行的机器码。源码库所以呢,对于编程语言而言,我们会有一个简单的判别标准,即它的读与写。从使用体验上呢,我们可以分为:易读易写,易读难写,易写难读,难写难读,这么四类的语言。 为了贴合文章的主题,我大概对我在项目上用过的 JVM 语言做了一个分类。(PS:真实情况下,差异没有这么大。)与此同时,由于每个语言的使用场景不一样,我们并不考虑诸如于性能等问题。 简单说明一下 (笑,我们并不讨论他们的优点。例子中的 Kotlin 不太适合,只是我暂时没有在项目上用过其它 JVM 语言,也许 JRuby 就不好读了): Java 语言嘛,大家都懂,又好读又好写,网站模板所以 Java 程序员便宜。 Groovy (Gradle 所采用的 DSL 语言)难写的地方在于,文档少、语法糖导致IDE 支持差(相对而言)。事实上,它也不是那么好懂,在 IDE 支持的情况下,要用碳基脑做个类型推断。 Kotlin,如果已经熟悉 Java 或者其它语言的话,写 Kotlin 并不是一件难事。这件事情难就难在阅读别人的 Kotlin 代码,可能会有点费劲,除非你有良好的 IDE 支持——它的亲爸爸可能是 Jetbrains。离开了 IDEA,找个扩展(extension)都得找半天。所以难度总体上还是不难的,只是相对难读一点——因为语法糖。 Scala,早期的某个项目,我几个月后看不懂几个月前写的代码。 而如上所说,对于语言每个人是有偏好的。所以,这里依旧是我的一些个人观点。我也并非这方面的专家,只是从个人阅读开源代码和编写相关代码的感受来说的。 引子 2:适用领域与流行应用 谈及编程语言,我们要讨论的是另外的另一特质:适用领域。如我们熟悉的: 而诸如 Rust 这样的小类语言,还没有正式有一个能发扬光大的场景。 引子 3 :编程的快乐,先写得爽 有一些语言能让你拾起编程的快乐,比如 Ruby,但是也能让你不想去维护代码——让人又爱又恨的 Method Missing,可以让你搞起元编程。也能分分钟让你看不懂别人写的代码。如果没有文档的话,那么我觉得你不会再看了。 又比如说,操作符重载也是一个让人写的代码更加直观。嗯,再重载一下赋值操作符,是不是非常爽。 对于快乐来说,维护性那是以后要考虑的问题。 编程语言的被淘汰 在项目上经历了惨痛的 Groovy 开发大型项目的经验后,我和我的同事们一致觉得这是一门可能被淘汰的语言。主要原因有这么几个: 如果你还想把编程语言的一些缺点考虑一下,那也是可以的。 可维护性丢失 这也并非是语言本身的问题,而是语言应对大型项目时,将会遇到的一个挑战。对于大型项目而言,自由灵活的语法糖会带来大量的问题。而随着项目的进一步扩大,保持同一套代码风格容易,而要使用同一套语法越来越困难。如同样是声明类型,有的用具体的类型,有的则是用 def 或者是 var。 缺失更好的 IDE 支持 嗯,如果你习惯了用 IDEA 对 Java 代码进行快速的重构之后。而与此同时,你并不能使用相似的方式来对你的 Groovy 代码进行重构。你们就会慢慢陷入了一个循环,既然有一个更好的语言,为什么我们不去使用它们呢。 退而求其次的,为了使用 IDEA 的高级功能,如重构。我们开始将代码中的 def 转换为具体的类型。 可迁移的语言出现 而其实上面两个问题,并不是这个语言的主要问题。毕竟,对于小的项目来说,IDE 和可维护性支持都不是问题。 过去,我们根据 Gradle 官方文档,使用 Groovy 来编写 Gradle 插件。而有一天,Gradle 官方文档同时提供了 Kotlin Script 的支持。 这就相当于是,上帝真的抛了个橄榄枝给你。你可以同时拥有更好的 IDE 支持,更好的可维护性。同时,还可以快速地迁移过去。为什么不呢? 其它 与之相似的一个例子便是 JavaScript 和 TypeScript,但是浏览器运行的是 JavaScript。所以,JavaScript 并不能这么容易被取代。 结论 有没有可能出现一个兼容所有语言的语言? 本文转载自微信公众号「Phodal」,可以通过以下二维码关注。转载本文请联系Phodal公众号。