问题标签 [yarv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - MRI 和 YARV Ruby 实现 - 在 Ruby 1.9 中发生了什么?
据我了解,在 Ruby 1.9 之前,MRI 和 YARV 是 Ruby 编程语言的两个独立实现。
Ruby 1.9 版到底发生了什么变化?MRI 是否被 YARV 所取代?或者这两个代码库是否以某种方式合并?
我见过 1.9 之后的 Ruby 版本被称为“MRI”和“YARV”——这些名称中哪个是正确的(或者它们都是正确的)?
ruby - YARV Arrays 的 push/pop 方法是线程安全的吗?
假设我有一对(生产者、消费者)YARV 线程(Tp
, Tc
)共享一个Array
q
-Tp
推送到q
并Tc
从中弹出。如果 push 和 pop 的执行顺序不重要,那么代码是否可以在没有任何同步机制的情况下工作?
regex - 为什么在 Ruby 中 Regexp 对象被认为是“虚假的”?
Ruby 对“真”和“假”有一个普遍的看法。
Ruby确实有两个用于布尔对象的特定类,TrueClass
和FalseClass
,单例实例分别由特殊变量true
和表示false
。
然而,真假不限于这两个类的实例,这个概念是通用的,适用于 Ruby 中的每一个对象。每个对象要么为真,要么为假。规则非常简单。特别是,只有两个对象是虚假的:
nil
, 的单例实例NilClass
和false
, 的单例实例FalseClass
每一个其他对象都是真实的。这甚至包括在其他编程语言中被认为是虚假的对象,例如
这些规则是内置在语言中的,不是用户可定义的。没有to_bool
隐式转换或类似的东西。
这是来自ISO Ruby 语言规范的引用:
6.6 布尔值
对象被分类为真实对象或虚假对象。
只有false和nil是虚假对象。false是该类的唯一实例
FalseClass
(参见 15.2.6),false 表达式对其进行评估(参见 11.5.4.8.3)。nil是该类的唯一实例NilClass
(参见 15.2.4),nil 表达式对其求值(参见 11.5.4.8.2)。除了false和nil之外的对象被归类为 true 对象。true是类的唯一实例
TrueClass
(见 15.2.5),真表达式求值(见 11.5.4.8.3)。
根据这两个来源,我会假设Regexp
s 也是truthy,但根据我的测试,它们不是:
我在YARV 2.7.0-preview1、TruffleRuby 19.2.0.1和JRuby 9.2.8.0上对此进行了测试。所有三个实现都相互同意,但不同意 ISO Ruby 语言规范和我对 Ruby/Spec 的解释。
更准确地说,Regexp
作为评估Regexp
文字结果的对象是falsy,而Regexp
作为其他表达式结果的对象是truthy:
这是一个错误,还是期望的行为?