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

Mark24 · 2020年09月17日 · 最后由 earthbeyonding 回复于 2020年10月12日 · 4338 次阅读
本帖已被设为精华帖!

五、新增总结

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 拓展下自己的思路。

huacnlee 将本帖设为了精华贴 09月17日 18:18

js 很多都是后面加入进去的吧。

rubyKC 回复

个人感觉 JS 没什么风格。什么都塞,让开发者自然淘汰。

4楼 已删除

ruby 就是奇技淫巧太多了,所以流行度远比不上 Javascript.

果然不能深夜思考东西。

我觉得 Ruby 是基于消息传递的 OOP 语言,一开始用来解决和 Perl 解决的相似的问题,和 Javascript 没什么关系。

当然 JS 现在地位这么重要,借鉴其他语言特性也是很正常的事。

8楼 已删除

WeakMap 是围绕 GC 的设计,Object#freeze 是动态类型语言对 final 关键字的补偿设计。 这个要追溯的话,应该还是要追溯到 Lisp。无论是 Ruby 还是 JavaScript 都是深受 Lisp 启发的语言。 而且 Lisp + OOP 的话第一反应就是 CLOS 了。确实 Lisp 衍生语言的特性大同小异的。

dsh0416 回复

有道理,他们参考同一个爸爸

不错的分享 谢谢

大道至简,万物同源。再看看 TS,发现各种语言越来愈像

挺好的文章,长知识

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册