问题标签 [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.

0 投票
2 回答
1572 浏览

ruby - MRI 和 YARV Ruby 实现 - 在 Ruby 1.9 中发生了什么?

据我了解,在 Ruby 1.9 之前,MRI 和 YARV 是 Ruby 编程语言的两个独立实现。

Ruby 1.9 版到底发生了什么变化?MRI 是否被 YARV 所取代?或者这两个代码库是否以某种方式合并?

我见过 1.9 之后的 Ruby 版本被称为“MRI”和“YARV”——这些名称中哪个是正确的(或者它们都是正确的)?

0 投票
1 回答
258 浏览

ruby - YARV Arrays 的 push/pop 方法是线程安全的吗?

假设我有一对(生产者、消费者)YARV 线程(Tp, Tc)共享一个Array q-Tp推送到qTc从中弹出。如果 push 和 pop 的执行顺序不重要,那么代码是否可以在没有任何同步机制的情况下工作?

0 投票
2 回答
336 浏览

regex - 为什么在 Ruby 中 Regexp 对象被认为是“虚假的”?

Ruby 对“真”和“”有一个普遍的看法。

Ruby确实有两个用于布尔对象的特定类,TrueClassFalseClass,单例实例分别由特殊变量true和表示false

然而,真假不限这两个类的实例,这个概念是通用的,适用于 Ruby 中的每一个对象。每个对象要么为,要么为。规则非常简单。特别是,只有两个对象是虚假的

每一个其他对象都是真实的。这甚至包括在其他编程语言中被认为是虚假的对象,例如

这些规则是内置在语言中的,不是用户可定义的。没有to_bool隐式转换或类似的东西。

这是来自ISO Ruby 语言规范的引用:

6.6 布尔值

对象被分类为真实对象虚假对象

只有falsenil是虚假对象。false是该类的唯一实例FalseClass(参见 15.2.6),false 表达式对其进行评估(参见 11.5.4.8.3)。nil是该类的唯一实例NilClass(参见 15.2.4),nil 表达式对其求值(参见 11.5.4.8.2)。

除了falsenil之外的对象被归类为 true 对象。true是类的唯一实例TrueClass(见 15.2.5),真表达式求值(见 11.5.4.8.3)。

可执行的 Ruby/Spec 似乎同意

根据这两个来源,我会假设Regexps 也是truthy,但根据我的测试,它们不是:

我在YARV 2.7.0-preview1TruffleRuby 19.2.0.1JRuby 9.2.8.0上对此进行了测试。所有三个实现都相互同意,但不同意 ISO Ruby 语言规范和我对 Ruby/Spec 的解释。

更准确地说,Regexp作为评估Regexp 文字结果的对象是falsy,而Regexp作为其他表达式结果的对象是truthy

这是一个错误,还是期望的行为?