Mark24
一个前端为啥对 Ruby 很亲和,我突然明白了
五、新增总结
2020.09.21
这一切不是幻觉。其实不是他们彼此很像,而是他们有一个共同的爹Lisp。感谢 @dsh0416 点醒。突然想起来以前读了一些相关的。Lisp有一种语言之母的感觉。
1.Ruby继承了Lisp
2.JavaScript与Lisp
- 『 JavaScript 是披着 C 外衣的 Lisp』 —— 《JavaScript : The Good Parts》Douglas Crockford
- 知乎:《为什么说 JavaScript 是披着 C 外衣的 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拓展下自己的思路。