JSON 创造者要建议:放弃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 语言是1997年由Mark S. Miller、Dan Bornstein、Electric Communities创建的用于安全分布式计算的面向对象程序设计语言。E语言主要源自于安全分布式编程中Java的并行语言Joule 和Original-E,后者是Java的一组扩展。E将基于消息的计算与类Java语法相结合。基于事件循环和Promise的并发模型确保永远不会发生死锁。
E 的语法与 Java 最为相似,尽管它也与 Python 和 Pascal 有些相似。变量都是动态类型的,并且有词法作用域。然而,与 JavaPython 不同的是,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。这或许真的是一种困局~

作者:年轻有为的显示器原文地址:https://segmentfault.com/a/1190000042528688

%s 个评论

要回复文章请先登录注册