此為歷史版本和 IPFS 入口查閱區,回到作品頁
!zxygentoo
IPFS 指紋 這是什麼

作品指紋

如果科幻电影是编程语言

!zxygentoo
·
·
JavaScript 必须死!JavaScript 必将永生!

本文于 2017 年 3 月 12 日发表于微信公众号“冷写科幻”,转载已证得作者同意,略有修改。有趣的是,这篇文章发表的几乎同时,WebAssembly 的 MVP 设计结束预览阶段,正式进入人们的视野,而如今短视频和网络直播也早已侵蚀一切,眼下再看此文最后一段,可能也有别样的趣味。


其实这篇文章是《如果编程语言是科幻电影》(明目张当的标题党!可耻!)。

我发展了一个新爱好:去看编程语言的源代码(编译器、解释器)。对非程序员读者:这不是学习新的编程语言,学新语言有点像学开车,第一次难,后面换其他车其实大同小异。我最近干的事有点像把车拆开看看它们是怎么造的。

于是乱七八糟的涉猎了一堆编程语言之后,这两天蛋疼突发奇想,如果硬拿科幻电影去对,会怎么样?选了几种语言几部电影,居然不算离谱。下面就是开脑洞的结果。

虽说就是一篇玩笑之作,但是里面选的编程语言(包括对应的科幻电影)都是我喜欢的,或者起码心怀崇敬的,语带调侃也绝无恶意。如果你最喜欢的编程语言不在其中,那么只有两种可能:

我不了解那种语言,或者想不到对应的科幻电影。

我讨厌那种语言。

你一定要认为是第一种。也就是说,你不能和胡说八道较真儿。不然的话,我就把你拉到胡说八道的水平,然后用胡说八道打败你。

走起。


1. Python

Python 只关心一件事:让编程的人开心。

从从未接触编程的初学者,到以编码为生多年的资深程序员,Python 都足以信赖。简单明了,灵活强大,除了性能差点基本没什么大毛病(咱们就不说版本分裂这事儿了啊,总会过去的……)

如果选电影的话,我会选《火星救援》

套路就套路了,但套路的扎扎实实;俗就俗了,但俗的童叟无欺。你们还不是都在电影院看得开心的不行。

Mark Watney 简直就是 Python 精气神儿的完美化身:懂得随机应变多快好省的解决问题,也坚韧不拔不忘初心。永远乐观,永远积极,还带着一点点逗逼气质。不方便拿来做证明又怎么了,咱们只是个宇航员啊,那些高级的数学就留给 NASA 的人好啦。

我会想跟他做朋友。

(既然选了 Python 我就不选 Ruby 了哈,气死你们 Rails 党 :)

火星救援 The Martian 2015


2. C++

必须是《坏太平洋》

铁甲刚拳,三头六臂,尖牙长尾,自带生化武器,趁你不注意还变一对翅膀出来。

虽然好似有个正经的科幻内核(C 语言),但是如果冷静来看,没有任何脑子正常的人会设计出 C++ 这种怪物。。我懂,我懂,还不都是被你们这些人给逼的,你们以为 Bjarne(C++ 作者)的日子好过么。。C++ 完全是被它的巨大成功给绑架了的一种语言,这不,《坏太平洋》第二部换导演了,胖子哥不拍了。

不过那又怎样呢?只要小心一点,它是如此的强大,如此的解决问题。

放音乐!再播一遍小铁甲抡轮船打小怪兽!!

哦~~~也~~~

环太平洋 Pacific Rim 2013

3. Rust

《攻壳机动队》

Rust 十年打磨,一朝成名。《攻壳》也是电视版多年积累,电影版技惊天下。

Rust 是运行在 Bare Metal 上的系统语言,《攻壳》探讨的也是时间、现实这些本体论的问题,其中对系统安全的关注也很契合 Rust 的核心设计原则之一,也难怪现在很多人吵着说我们应该用 Rust 全部重写操作系统、网络协议栈和加密协议栈这些底层系统。而 Rust 那个承袭自 ML(后面说) 的漂亮的类型系统,也常常让我想到《攻壳》中漂亮的哲学思辨。

如果刨掉我们一衣带水的邻居们对庞然巨物的恐惧与热爱,也就是 Kaiju Film(怪兽电影)这部分,剩下探讨科技对人体和人性的异化,其实《环太平洋》和《攻壳》在内核和形式上也有几分相像,或者说《环太》是个普适版的《攻壳》也未尝不可。

正像我总觉的 Rust 就是 C++ 应该是的样子……

攻壳机动队 攻殻機動隊 1995

4. Lisp

人类可能永远无法摆脱这个上世纪七十年代出现的邪门玩意儿了。

和它同时出现的编程语言已经一个个逝去,唯有 Lisp 屹立不倒,直到今天还在不断的教导我们到底什么是编程,什么是编程语言。

已退休的创业天师 Paul Graham 曾说过,几十年来,他每次翻开《计算机程序的构造和解释》,都会从中获得新的启示。另一个更极端的说法是:任何一个足够复杂的 C 或 Fortran 项目里都有半个乱来的 Common Lisp 实现。(Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.)

Lisp 用两只手可以数过来的几条规则,涵盖了所有的计算构造。对应的科幻电影绝对是《堤》

这片子只有 28 分钟,几乎没有运动镜头,基本就是个“幻灯片电影”。可正像 Lisp,它把“少就是多”发挥到了极致,一个有着无限阐释可能的隐喻,一个无限递归的结构,内涵随着每次的重温,不断增长。

堤 La jetée 1962

5. ML

这是一族语言,SML、OCaml、F#、ReasonML、Elm、PureScript、Haskell(Haskell 粉丝可能不满意,觉得自己应该单独列一份。其实也是,我也能想到单独对应 Haskell 的科幻电影,不过那些“装纯”的偏门文艺科幻片儿基本没人看过,所以就委屈一下你们吧)。

《2001太空漫游》彻底改编了怪力乱神的 B 级科幻片,重新发明了这个类型。ML 对类型系统的意义我就不说了,基本上 ML 就是类型系统的代名词,开启了后来几十年的研究。

说到电影和语言本身,它们也都是极致优雅的代表(你还能想出来比 ADT 和模式匹配更和谐漂亮的东西吗),多一份则多,少一份则少。强大的同时又拥有数学的严谨,高山仰止无从置喙。

两者都是,你可以从无数的后来者身上,发现它们的痕迹。

2001太空漫游 2001: A Space Odyssey 1968

6. Erlang

Erlang 必须是《超时空接触》,因为它们都严重被低估。

Erlang 其实可能是 Alan Kay 的“面向对象思想”的最好实现。当程序足够复杂的时候,你不该关心程序作为一个“实体”如何工作,而应该把程序隔离成不同的模块,进而完全放弃关心模块内部到底是什么,转而关心模块之间的关系。每个模块都是一个有限状态机、一个虚拟机、一台计算机。它们之间通过“信息”沟通,并改变自身的状态。

《超时空接触》讲的也是个“沟通”的故事,如果每个文明都是一个模块,一个“黑盒子”,那么文明之间应该如何沟通。故事的编剧是伟大的科学家、科普作家卡尔·萨根,导演是美国曾经的国师赞米吉斯(《阿甘正传》)。

我推荐每个科幻影迷去看《超时空接触》,推荐每个程序员去学习 Erlang,不要因为电影看似晦涩的表达,或者 Erlang 看似古怪的语法而却步。一旦你真的理解了它们,你会发现其中的那份世所罕见的智慧和优雅。

超时空接触 Contact 1997

7. Prolog

如果你的程序就是一堆逻辑限制条件,然后计算机自己就能告诉你答案,那么世界是多么美好。Prolog 代表的逻辑编程就是这么一种范式。

对应的科幻电影我选《初始者》。这个复杂的时间旅行故事就是一层一层的时间线“限制”叠加的结果。编导好像是个程序员,据说剧本其实严格的像论文,所有我们凡夫俗子没看懂的事,其实都有合理的解释。

所以我现在也没怎么看懂《初始者》,也没怎么学会 Prolog.

初始者 Primer 2004

8. Idris

起初,有 term 的世界,还有 type 的世界。似乎有来无回,直到有了 dependent type.

起初,有现实的世界,还有虚拟的世界。似乎只能停在吉布森的小说里,直到有了《黑客帝国》

Idris 也许最终无法获得传统意义上的成功,但是他代表的方向已经让我们看到了一种未来可能的编程语言:统一的 term 和 type 表达,自带证明系统,免费的 property-based test.

今天再看《黑客帝国》,我会觉得特效已经稍稍有些过时,但是无论如何,它曾经告诉了我们未来的科幻电影,到底是什么模样。

黑客帝国 The Matrix 1999

9. Java / C#

终日掐来掐去的 Java 党和 C# 党们啊,你们承认吧,你们爱的东西其实就是同一种语言……

酒馆里有个人一拍桌子大喊一声:谁敢比我牛逼?!另一个人一拍桌子:我!第一个人一胳膊把第二个人揽过来:谁敢比我们俩牛逼?!其他人都不说话了。Java 和 C# 不也是这样么,今时今日,工程上应用最普遍的语言(如果 C/C++ 党不服,我就搬个小板凳看好戏)。

所以对应到科幻电影的话,除了《星球大战》系列,还能是什么。

内容丰富,要飞船有飞船,要外星人有外星人,还有光剑和原力这种高级功能。粉丝最多,影响力最大,生态系统广袤无垠,周边多到破产三代。

可是和《星战》一样,这东西怎么看着都有点像个过时的东西,问题不在语言本身,而在面向对象。一场摩尔定律的大梦初醒,好多人发现 Java 式的面向对象似乎并没有解决那些真正困难而重要的问题。

Alan Kay 说 Java 的面向对象设计从根儿上就跑偏了(嗯,我说过 Erlang 了)。《星球大战》也是啊,这其实就是一出跑偏的家庭伦理剧啊!

星球大战 Star Wars 1977

为什么只有九个,这是要逼死强迫症么?

当然不是。

10. JavaScript

因为第十个 JavaScript,我实在想不到一部对应的电影。因为这个语言实在太“烂”了,烂的眼花缭乱美轮美奂(一个连整数都没有的语言你让我怎么严肃对待它)。

如果非要对的话,我会说是网络视频和视频直播。场景特殊,无可替代。你大可以继续抱着经典电影不放,你大可以骂它烂,但是已经 2017 年了,大部分理智的人都不会否认这才是方向。不是我们要把 JavaScript 改造的更像那些“严肃”的编程语言,而是那些严肃的编程语言要向 JavaScript 靠拢。今天几乎所有标榜自己“先进”的编程语言,都会有一个编译到 JavaScript 的故事,就是明证。

Gary Bernhardt 在他那个著名的搞笑演讲《The Birth & Death of JavaScript》里曾经“预测”:总有一天会有人直接把 JS 的虚拟机嵌到 Linux 内核里面去,那一天,Native Code 就彻底消亡了。虽然是个笑话,但其中的深意并不夸张。

JavaScript 必须死!JavaScript 必将永生!

最后的最后,as always

PHP 是最好的编程语言!


CC BY-NC-ND 2.0 授權