• 这个是因为 lambda 在创建的时候已经编译好了,用 RubyVM::InstructionSequence.disasm 可以看 lambda 编译后的字节码,会发现如果当时有变量字节码是读取 local,否则是调用方法。所以不是作用域的问题,在其他脚本语言里也没有。

    这个问题无法避免,可以使用实例变量等等来绕过。

  • Google Analytics 存在的问题 at 2021年01月12日

    👍

  • dhh 是真的牛逼,有他在,我觉得写一辈子 ruby 并不是梦想

  • 编程语言谜语 at 2020年09月04日

    谜底:

    过程转写的方程式 - fortran
    自解释的树状结构 - lisp
    顺流而下的字母表 - a、b 和 c 语言
    模拟世界的活跃体 - simula 和 actor 系统
    有限空间的问答机 - prolog
    可变形的柔软宝石 - ruby,改了一下,因为要突出可以 redefine 的性质,之前的太直白
    D 大调的协和半音 - c#和f#
    无限延伸的类之类 - agda 以及其他有 dependent type 的语言,因为这类语言里类型是分层无限上升的
    违规借用的拒绝者 - rust

  • 编程语言谜语 at 2020年09月04日

    不如 sicp 里的卷首语“献给活在计算机里的神灵”

  • 问题是 rails 起到了什么作用,如果只是 crud 的话那看不出来为什么 pg 会跪,因为 rails 处理一个请求对 sql 的请求,比起 graphql 不会有减少,如果不只是 crud,这个方案也一样可以扩展多一层用来做 cpu 计算

  • 居然还有这么多同类项目,刚刚看到 graphile 的 migrate https://github.com/graphile/migrate ,解决了 migration 的问题,方不方便就不好说了...

    我之前也想过,不过我想的不是 graphql,是渐进式地生成 restful crud api,有默认的,也可以自己改 controller action,但是魔改 rails 的 routes 很麻烦,有些 autoload 的问题不知道怎么搞

  • 这个确实是他的思路,他喜欢把 postgres 用尽,尽量不加任何额外的东西,我倒是非常喜欢,但是这样也确实有些坏处就是有些东西你不用 plsql 是做不了的,比如 transaction,需要写成 pl 函数。未来大概 plv8 也会发展起来吧,虽然没有很觉得 plsql 很复杂。

    rsl 和 dsl 指的是哪个?metadata 我觉得还是放在数据库里好,我没有深入用过 hasura,但是按他们官网的说法:All the actions performed on the console, like tracking tables/views/functions, creating relationships, configuring permissions, creating event triggers and remote schemas, etc. can be exported as a JSON/yaml metadata file which can be version controlled. 这里面的东西还挺多的,我觉得都放在数据库里反而更好,但是 graphile 看起来还缺少一个类似 migration 的东西,hasura 的 metadata 可以看出实际做了什么,但是 graphile 就分散融入到 db 里了。

  • 我一时也想不到怎么说,就是 stimulus 的话 data -> ui 这个过程是在服务器发生的,但是很多时候我们为了性能/响应更快,希望在前端作出反应,这个时候就需要在前端增减 class 什么的,这个很反现代前端的响应式原则。毕竟 stimulus 只是处理了事件绑定的工作,没有管其他前端库管的 if 和 for 这些 data -> ui 的东西,然后一旦需要用到,就会开始后悔用 stimulus 了。

  • 在 ruby 里造么?我感觉 graphile 就挺好了 lol

  • clone 是指啥?如果是指 clone 一个项目结构啥的,graphile 是没有的,一个命令行启动服务器就够了。

  • 炮哥要不要考虑用https://ruby-china.org/topics/40334 重写一个😁

    stimulus 涉及到列表渲染的时候,还是非常麻烦,但恰恰前端又最需要这个。我觉得现在前端 ssr 框架(next nuxt)的方便程度已经让 erb 没有任何优势了。另外给看到的避个雷,现在的 react 比起 vue3 基本没有值得推荐的地方,vue3 的 hooks 完美解决了 react hooks 需要的心智负担,但是却能做到同样的事情,唯一的缺陷就是 vue3 还没 release 了。

  • 为啥用 ruby 不先把 ruby 的书看一遍

  • 你对你老婆真好

  • 高并发的电商 at 2020年08月13日

    redis 是串行的,redis 里面扣了 100 个库存就肯定是卖出了 100 个,存回数据库也肯定是 100 个

  • 高并发的电商 at 2020年08月13日

    就一个库存数字,每次下单 -1 就好,下完再存回数据库

  • 高并发的电商 at 2020年08月11日

    不锁,用 redis

  • 内存猛增先查是不是泄漏,再查在哪里泄漏,找 rubycore 不会有帮助

  • 可以但没必要,我之前用 opal 做过 ruby 版的 react,模板用的 erb 然后编译成 vdom,然而并不会好用,而且现在前端工具链这么多,用 ruby 每个库还要写 wrapper,更新了还要经常改

  • 看起来是 bug,可以考虑提交 issue 和 pr

  • bar 和 person 是一对一关联?

  • 取决于用的 io 有没有 non-blocking 的实现,理论上是有的,所以可以减少。不过这个减少不是由于等了 2s,如果 io 可以不阻塞,那么等待 io 的线程就会自动 pass,不需要手动 sleep

  • 表单啊,就光是做表单,用 react+api 也比用 rails form 方便,重用方便,样式管理方便,逻辑也看得更清楚。后端渲染唯一的优势就是 seo,但是 next 可以全自动处理 ssr

    后台啊,那就比文章型的更难了,我还以为说文章型的比前后分离方便,后台要是用到 sjr,那也是必然不可能比纯前端写方便的

  • 前端直接部署到 zeit now(现在叫 vercel)就行,只需要管 api 服务器

  • 花一天时间体验一下 next js,就会改观的,erb 的开发体验已经跟不上这个时代了

  • 别转移话题,py js 确实不是面向对象语言,分类叫 multi paradigm,按Vector#magnitude的例子,就是会暴露内部实现

  • def self.log m
      method = method(m)
      define_method(m){|*args|
        p "输入是:#{args}"
        method.call(*args)
      }
    end
    
    log def foo x, y
      x + y
    end
    
    result = foo(2,3)
    print(result)
    

    有啥区别?

  • 另外这个帖子里什么函数是不是第一公民的讨论几乎全部都没有在点子上,一个最简单的例子:

    class Vector
      def magnitude
      end
    end
    
    Vector.new.magnitude
    

    在外部看来 magnitude 必然是方法调用,而在 js 和 py 里面,方法必然是 magnitude(),属性必然是 magnitude,调用方式已经暴露内部结构了。ruby 是纯粹的面向对象语言,师承 smalltalk,不要拿什么 py js 之类的虾兵蟹将来比。

  • 你用 python 写个例子,我们来比比行数?

  • 你的这个回复和“哪里不简洁?”有任何关系吗?在纯 ruby 里做一个类似 sig 的装饰器像喝汤一样简单,我为什么要加什么@语法?