为啥 JSON 之父要建议:退役 JavaScript

码农老张 前端 2022-12-15

Douglas Crockford: "The best thing we can do today to JavaScript is to retire it."

道格拉斯:我们今天能对 JavaScript 做的最好的事就是将它退役。

我nm,你谁呀,我大 JS 是你说退役就退役的?!

为啥 JSON 之父要建议:退役 JavaScript

查一下 Douglas Crockford 这老哥是谁?

  • 道格拉斯·克罗克福特(英语:Douglas Crockford)是美国程式设计师和企业家,知名于对网页程式语言JavaScript推进和改良;且为轻量级资料交换格式「JSON」的建立者。 他还是众多JavaScript语言开发工具的创造者,例如JSLint和JSMin。近段时间,他在PayPal担任JavaScript语言进阶顾问,当然 他也是JavaScript、JSON以及web技术的布道者,在这些方面出版发行了很多知名的书籍及演讲。 —— wikipedia

为啥 JSON 之父要建议:退役 JavaScript

WC,牛蛙牛蛙,JSON 之父,JavaScript 推进、改良、布道者,1975 年就在大学学习 Fortran 编程语言了,妥妥的 OOOOOOGGGGGG大佬。

为啥 JSON 之父要建议:退役 JavaScript

那之前一直重仓 JavaScript,为何现在一反常态,唱衰 JavaScript 呢?

看看他具体怎么说的?

Evrone: In your opinion, what expected changes in JavaScript are going to be the most important?

Douglas: The best thing we can do today to JavaScript is to retire it. Twenty years ago, I was one of the few advocates for JavaScript. Its cobbling together of nested functions and dynamic objects was brilliant. I spent a decade trying to correct its flaws. I had a minor success with ES5. But since then, there has been strong interest in further bloating the language instead of making it better. So JavaScript, like the other dinosaur languages, has become a barrier to progress. We should be focused on the next language, which should look more like E than like JavaScript.

主持人:在您看来,JavaScript 的哪些预期变化是您最看重的?

道格拉斯:我们现在最好就是退役 JavaScript。20 年前,我是 JavaScript 为数不多的拥护者,函数嵌套以及动态对象的设计很棒。我花了十年时间试图去修复它的缺陷。后来在 ES5 上取得了小小的成功。但是自从那以后,人们更侧重于扩大使用 JavaScript 的规模,而不是让它变得更好。所以,JavaScript 如今像一个恐龙语言,已经成为了发展的阻碍。我们应该更多关注下一种编程语言,比如 E 语言这种。

本瓜:噢?难道是来推 E 语言的?踩一捧一、经典营销路数?

话说什么是 E 语言?(注意:不是易语言,别混淆了)

  • E 语言是1997年由Mark S. Miller、Dan Bornstein、Electric Communities创建的用于 安全分布式计算的面向对象程序设计语言E语言主要源自于安全分布式编程中Java的并行语言Joule 和Original-E,后者是Java的一组扩展。E将基于消息的计算与类Java语法相结合。基于事件循环和Promise的并发模型确保永远不会发生死锁。

E 的语法与 Java 最为相似,尽管它也与 Python 和 Pascal 有些相似。变量都是动态类型的,并且有词法作用域。然而,与 Java 或 Python 不同的是,E 完全由表达式组成。

举个例子:递归

 def factorial(n :int) :int {
   if (n == 1) {
     return 1
   } else if (n > 0) {
     return n * factorial(n-1)
   } else {
     throw("invalid argument to factorial: "+n)
   }
 }
复制代码

其中第一个:int 确保函数体只需要处理整数参数,第二个 :int 参数确保函数将有返回值。能够事先看到函数的信息泄漏,有利于安全审计。

E 程序的典型例子是挖矿场景,一个简单的电子货币系统,只需几行E代码就能实现。

贴下代码感受一二:

 def makeMint(name) :any {
   def [sealer, unsealer] := makeBrandPair(name)
   def mint {
     to makePurse(var balance :(int >= 0)) :any {
       def decr(amount :(0..balance)) :void {
         balance -= amount
       }
       def purse {
         to getBalance() :int { return balance }
         to sprout() :any { return mint.makePurse(0) }
         to getDecr() :any { return sealer.seal(decr) }
         to deposit(amount :int, src) :void {
           unsealer.unseal(src.getDecr())(amount)
           balance += amount
         }
       }
       return purse
     }
   }
   return mint
 }
复制代码

其中用 def 关键字定义对象,to 关键字开始每个方法,:(int >= 0)) 或 :(0..balance)) 表示对输入的约束。

感官上来说,本瓜觉得它对输入、输出都做了一个界定,这样更利于审查安全性。从这个角度看它的确比 JavaScript 更严格。这里的严格并不代表繁重,轻量的东西也可以是严格的。JavaScript 设计之初就是轻量的脚本语言,但随着 web 繁荣壮大,JavaScript 似乎满足不了了,于是出现了各类框架、或者 TypeScript,但是即使是强如 TypeScript,还是要被编译成 JavaScript。这或许真的是一种困局~

为啥 JSON 之父要建议:退役 JavaScript


好吧~ 也许大佬真的能看的更远更远,以后究竟是 TypeScript 还是 E 语言,还是其它技术的革命,我们可以作为一个观察者,拭目以待吧~

有兴趣的工友可以继续看看 E 语言、或者 Joule 语言 相关内容~

Apipost 私有化火热进行中

评论