2020.09.21
这一切不是幻觉。其实不是他们彼此很像,而是他们有一个共同的爹 Lisp。感谢 @dsh0416 点醒。突然想起来以前读了一些相关的。Lisp 有一种语言之母的感觉。
1.Ruby 继承了 Lisp
2.JavaScript 与 Lisp
之前原文:
我昨天在看 react 源码的时候,看到一些方法,比如 Object.freeze
, weakmap
。突然就想搜索一下,Python,Ruby 里有没有。
一个很震惊的是,Ruby 里都有。你要知道,即使是 lodash,这种库独立实现的,名字都不可呢能那么一致。尝试搜索了一下别的接口。
假设 Ruby 参考了 JS 的话,会如何?
再回想一下经验,JS 的原型链继承——Ruby 的单继承,其实不是就是一回事么。Ruby 的单继承,制造的效果和 JS 的原型链差不多。
还有两个语言都把闭包放在了极其重要的位置,都是前置考虑过的。(Python 后来加入过闭包,但是语法打架,加入了新关键字,没有 Ruby,JS 好)
3.我也是通过阅读 Ruby 的原理资料(JS 没有什么介绍虚拟机实现的资料)更加深入理解的 JS
我觉得这个假设可能成立。《代码的未来》我还没读完,Martz 分析了各种语言利弊。我觉得他肯定会做这个工作。
JS 的设计很粗糙,语法、接口比较混乱。但是任何问题都可以外部打补丁实现——说明核心没问题(Vue 作者尤雨溪评价过)。
Ruby 的就专门是设计过。好一点。但是他们本质上是一样的。(无非是语法糖)
我突然明白为啥我对 Ruby 的亲和度很高,JS 和 Ruby,他们是一样的东西啊!!!只是语法糖不一样。
Ruby 的 method_missing(xxx_missing) 大法,在 JS 里面 ES6 新增了 Proxy 对象,也可以实现。本质上是一种代理。
Ruby 里面,元编程的能力,本质上是代理拦截(代理)+ 求值(eval)。JS 里也有替代(Meta_programming)
可以说,10 天设计的 JS,作者可能加入了所有重要 feature,为了未来做准备。只是时间太短,语法糖没有设计。再加上,没想到 JS 今天的地位会如此重要。兼容性的问题,JS 的 BUG 无法修,只能存在。
对了!学习 Ruby 的时候,总有一种有求必应(什么方法都有)的感觉。这并不是错觉。
https://devdocs.io 截图(推荐,一个网页版的 Dash)
看这个文档大小就知道,Ruby 文档体积是别人两倍,难怪有求必应。Ruby 确实是非常棒。
Ruby 的思路是保姆式服务。
这些推论是一种一厢情愿的 YY。可能都是巧合。但是可以相信一下,23333。
我只是觉得,站在我自己的角度,学习 Ruby 的时间没有白花,现在仿佛打通。当时一切当时觉得莫名其妙的巧合,原来都是被种种选择的和设计的宿命 啊(就认为是这样吧!)
建议所有的前端同学,学习下 Ruby 拓展下自己的思路。