一个前端为啥对 Ruby 很亲和,我突然明白了

五、新增总结

2020.09.21

这一切不是幻觉。其实不是他们彼此很像,而是他们有一个共同的爹Lisp。感谢 @dsh0416 点醒。突然想起来以前读了一些相关的。Lisp有一种语言之母的感觉。

1.Ruby继承了Lisp

2.JavaScript与Lisp


之前原文:

以下纯属脑子里一阵乱想。如有雷同,应该是真有。

一、一个偶然发现

我昨天在看 react源码的时候,看到一些方法,比如 Object.freeze, weakmap。突然就想搜索一下,Python,Ruby 里有没有。 一个很震惊的是 ,Ruby里都有。你要知道,即使是 lodash, 这种库独立实现的,名字都不可呢能那么一致。尝试搜索了一下别的接口。

假设Ruby参考了JS的话,会如何?

  1. 再回想一下经验,JS的原型链继承——Ruby的单继承,其实不是就是一回事么。Ruby的单继承,制造的效果和 JS的原型链差不多。

  2. 还有两个语言都把闭包放在了极其重要的位置,都是前置考虑过的。(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拓展下自己的思路。

Mark24

Everything can Mix.