• 好好好,我怕了,这回我真的怕了。

    不讨论人,姜叔叔你把你对 JIT 的理解说一下,可以吧。

    反正我没写过 JIT,我只写过一个简单的 LL 左递归的推断方式的解释器。

    虚拟机的话,大致从书上看过源码了解基本实现,当初学生时代想去实践,但力与时间不足。

    根据补充,新的回复已经在楼下更新

  • 为啥我每次都被你们抓着不放呢,我只是发表个人看法,我没说过我的想法必须是正确的,我也没要求所有人都按照我的想法作为标准。

    这种情况很多,比如有时候我翻翻以前很多人对 macOS 网络、IO 支持很差的说法,其实是很多人对 CFNetwork、IOKit、kqueue、GCD 没有深入了解。

    知乎上面还有很多 13 年前的老帖子,比如一些人对 Python 的理解是不够完整,仅仅说一些很肤浅的答案,但是那个人、那个时候还没有了解到其它更多的资源。这时候你是不是要在下面回复一大串把别人说得全错,自己全对为止?

    包括我以前读书时的一些老师,课堂上也会提一些学生不以为然的一些说法,其实有些同学是从别的领域了解过了。

    另外,我又不是给大家上课,我只是谈谈我的看法,仅此而已。

    我总是发现一个规律:

    姜叔叔每次都把我说得不足的地方挑出来去证明你的威严。

  • 嗯,可能我没了解到那种程度,但是如果抛砖引玉的大家说出自己知道的,也是不错的。我说的不一定对,只是站在目前所了解的程度,发表个人想法。

    如果有更好、更深入的了解,吾辈愿意学习。

  • For bytecode which is executed only a few times, this saves the compilation time and reduces the initial latency; for frequently executed bytecode, JIT compilation is used to run at high speed, after an initial phase of slow interpretation. Additionally, since a program spends most time executing a minority of its code, the reduced compilation time is significant. Finally, during the initial code interpretation, execution statistics can be collected before compilation, which helps to perform better optimization

  • 我知道 标准 Lua 是没有 JIT 的,我说的是 Lua JIT 的 Lua JIT

  • 差不多这个意思,所以 Ruby 才会被 Lua 甩 N 条街,还有 JavaScript 各大引擎。。。一个简单的斐波那契 40,Lua 是秒完成,Ruby 。。。

    要是什么时候 Ruby JIT 完成了,就追上来了

  • 按照现代的解释器来讲,其实没什么区别,Hotspot 主要是引入 JIT。

    以前有区别,是因为那时候 Ruby 没有编译器。

  • 吾辈认为,Ruby 的语言设计是不错的,要不然不会进入前 20。

    从实现上,Ruby 2、PHP 5、Perl 5 都是预编译 中间代码,后解释执行的。PHP 7 有 JIT,暂时领先了。

    除了 JavaScript 以外,排名靠前的都是符合【企业生产要素】的。

    接下来我要说重点: TIOBE 的排行成员变多了,Kotlin Swift Rust 这些东西都加进来了,其实这个排行已经差距不大,Perl - Ruby - ObjC 都是 1.4%,也就是说,你是在要看排名做比较的话,建议看百分比的差距。

    例如:PHP 和 Ruby 差距 实际上只有 11%,是 “多一点”,如果达到 20% 左右差距,才是 “多一些”。

    大家再去看看后 20 名(20 名以后的语言),像 Kotlin 还是不错的,Erlang 也有人用,VBScript 很久以前曾经也出现在前 20 内吧。

    这个这说明的现象是,语言太多了,越来越多的领域也正在拓展。

    如果不是拿语言工具混饭吃的,那么你想学习什么就学什么,所有的语言发展到今天,很多语言的功能、语言周边框架抄来抄去的,基本都均衡了。

    正如你可以拿 Python 写网站也可以用 Ruby 写网站也可以用 PHP 写网站也可以用 JavaScript 写网站。

    如果想要赚钱,那么就尽可能选择靠前、符合你身边市场需求的。

    补充: 上文【企业生产要素】,吾辈认为 Java 有很成熟的 VM,你不用考虑 空间 随便你抽象,反正内存效率、编译也会优化你不用担心。如果你需要手动管理内存的高效 IO 开发(涉及系统调用比较多的),C / C++ 是不错的选择。Python 是啥都不用考虑,快速敏捷同时保证范式基本一致(以便尽可能实现企业统一代码思想好维护)的。

  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    嗯,好啦好啦,每次都被叔叔搞得很尴尬,吾辈知错了

  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    我说的是 module Comparable 本身的实现,比如:

    obj < other → true or false click to toggle source
    Compares two objects based on the receiver’s <=> method, returning true if it returns -1.
    
    
    static VALUE
    cmp_lt(VALUE x, VALUE y)
    {
        VALUE c = rb_funcall(x, cmp, 1, y);
    
        if (rb_cmpint(c, x, y) < 0) return Qtrue;
        return Qfalse;
    }
    
  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    我说的是 module Comparable

  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    我知道文档里面有,疏忽了~ 不过文档里面的是 C 实现的 Comparable

  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    嗯,好的,谢谢,我会用心的

  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    嗯,我知道了,我把那部分结论的去掉了。

  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    已经更新了,突然反应过来,缓存吧。

    不过谢谢指正

  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    反应过来了。。。

  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    嗯嗯嗯,谢谢姜叔叔👏 ,嗯嗯,我正乖巧地坐着听呢~

  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    我知道,我在公司写 PHP 就在用 SublimeLinter-php,php -l 就可以了,要讨论 ruby 的 linter 其实 Visual studio code 还有一个 Reek,自带的 -wc 就简单好了。

    看姜叔叔又开始跟我挑刺了,好怕怕

  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    抱歉,原谅我这位有个性的开发者。👃

  • 谈谈我对 Ruby 的看法 at 2017年12月28日

    谢谢纠正,改了一下代码

  • 对的,因为 Java 充满了无穷的复杂性,有很多工具需要很长的时间使用和积累你才得知它适合的应用场景。那时候你才算合格的 Java Developer,讨论 Intermediate Java 还远着呢!

    Cpp 更不用说了,简单写一个网络程序,基本上从对象的继承风格、template 复用模式、算法复杂度(谈不上数学的算法,而是你对内存 copy 操作啦 IO 之类的)效率,如果稍微不注意你就已经在面试被淘汰掉了。

  • 个人观点,Ruby 在国内基本是排挤到边边去的,都得感谢 PHP,PHP 从语言本身就是一个 Rails,不需要写框架,自己本身就是个 SAPI 程序,Rails 是为 HTTP/1.1 而生的,而 PHP 本身就把协议完美地吞并了,开发者不需要了解 REST,不需要了解路由,甚至文件还可以从服务器 a 目录放到 b 目录不需要通过 bind route,学习成本更低。

    然后,如果实在需要性能、团队、large code base,很多公司都会采用 Cpp / Java。

    这样一来,谁来选 Ruby?

    其实 Ruby 是站在 PHP 、 Java 之间的,没有复杂的 Interface、Generic(泛型)等等从抽象上的难度,继承或 mixin 即可,也不至于弱类型、无法静态分析、无法测试、低智商开发。

    市场有一个规则,很多人都是有钱了就买苹果,没钱就买魅族青春版、华为荣耀。比较中规中矩的中端的努比亚没什么人买。

    而且,作为中层用户,他们会有一种心理:

    第一种情况是他们买了发现不够划算,心想,我买的这个手机,还不如买个 三丧旗舰曲屏,多花点钱买个 iPhone x。

    第二种情况就是他们卖了发现亏了,并不比红米、荣耀好到哪里去,而且他们只不过是为了买个备用机而已,并不打算真正用的。

    同理:

    显得要专业不够专业,我学了 Ruby,哎我还不如多努力一下学 Java 去了,自己显得更专业行内一些,不然都不敢跟别人说我是学计算机的,Java 语言严格很多,而且包多很多,方方面面都成熟,大规模项目也更加好维护,静态编译,所有声明清清楚楚。

    不需要专业但是又太专业费时了点,我学了 Ruby,哎我又不是专门搞 IT 的,我只是想做个网站啦,哎,早知道用 PHP 得了。

  • 看了一下,原来是 LZ 对 UCloud 大肆宣扬他的 DB 不满

  • Ruby 2.5.0 已发布 at 2017年12月26日

    Thread.report_on_exception 改成 true 了,那我得改下我的线程实现了

  • 你去看看 食戟 第三季,连日本人都知道某朝就喜欢那种【量大】、【通用】、【快速】、【逼格】

    【通用】比较恶心,每个人都得按照一个公模来做,你抄袭我抄袭你 Android 开发者很少有自己思考,大家觉得好的他也觉得好,他还跟着大家一起叫好,不管对还是错,反正信仰,其实这个在朴灵阮某某事件就是这个,一批无脑去跪拜阮大大的文章并信以为真、广为言传。

    然后一部分稍微思考了的人就喜欢【逼格】,他们喜欢做一些自己认为很了不起但是别人不以之为然的东西。然后万一这群人去培养了自己的信徒形成上面【通用】的场面,跟信安利做传销没啥区别。

    【快速】就是很多开发者总想走捷径,因为国内开发者基本上都不想努力,想快速达到别人的水平,想象一下 黑色四叶草 咆哮帝天天声称自己要成为马猴帝啥的。勇气可嘉,但是至少人家咆哮帝说的是 “我要成为”,但是国内很多开发者说的不是这个,而是:我就是天才,我就是上帝,我就是造物主,我的方案一定是对的,一定是完美的。

    方方面面都得把自己描述得有多么的全知全能,显得自己【量大】。

    我有一个在上海工作的朋友就是这样的,他刚毕业一年不到,没有去过培训班,都是自己学点破玩意,在上海在一个很垃圾的软件外包公司,天天献勤奋摆模样,很多知识不过就是入门级 programmer level,然后口气大大说 “这个我懂那个我懂,要是我回武汉,分分钟能面试上项目经理”。

    Apple 为什么好,因为 Apple 纠正了开发者自以为是去用一些另类的方式去解决。

    而且,很多国外的 Github Repository 都是自己做了一个项目,虽然他们会推荐自己的东西,但是他们平均起来不会去搞传销一样的推广自己的东西。

    国外有很多坑爹应用,华尔街还有一堆骗子空壳上市公司,人家国情比我们自由多了,人家事件冒出来比较多,资源多,所以人家环境自我觉悟、自我保护会认识清晰一些。

    我们不去认知这些,资源也少,然后出问题的概率有但是不明显,所以很多问题都是虚掩着,事情没解决搁置着让它一直存在。说白了就是没被洗牌自己不知错,国内自由度不高,而且很多东西有保护主义,所以同时也保护了这样的一群人,保留了这些错误。

    只说胡思乱想的想法,奇文共赏,非恶意,不喜勿喷。