所以,我有一些问题要问我,我确实浏览了互联网,但没有太多可靠的答案.大多数博客帖子会相互取消,因为他们都赞扬了不同的东西,并有基准来"证明他们的观点"(在我的生活中,我从未见过如此多的矛盾基准).
无论如何,我的问题是:
一些"奖金"问题:
我为你发动的这场文字风暴道歉!♥
Ruby有“的普遍想法感实性 ”和“ falsiness ”。
Ruby 确实有两个特定的布尔对象类,TrueClass
和FalseClass
,其中单例实例分别由特殊变量true
和表示false
。
但是,真实性和虚假性不仅限于这两个类的实例,该概念是通用的,适用于Ruby中的每个对象。每个对象都是真实的或虚假的。规则很简单。特别是,只有两个对象是虚假的:
nil
,的一个实例,NilClass
以及false
,的单例实例 FalseClass
每个其他对象都是真实的。这甚至包括在其他编程语言中被认为是虚假的对象,例如
这些规则是语言内置的,并且不是用户定义的。没有to_bool
隐式转换或类似的东西。
这是ISO Ruby语言规范的引文:
6.6布尔值
一个对象可以分为真对象或假对象。
只有false和nil是伪造的对象。false是该类的唯一实例
FalseClass
(请参见15.2.6),false表达式 …
我一直在阅读有关新的ruby 2.0功能,并发现它将支持字节码导入/导出:
Ruby 2.0有望简化将预编译的Ruby脚本保存到字节码表示中,然后直接运行它们.
我已经安装了ruby-2.0.0-p0,但是我没有找到任何关于如何导出字节码的信息(或者通常是关于这个问题的文档).此功能是否已实施,如果已实施,我该如何使用它?
我也想知道一些细节.YARV字节码是否应该与平台无关?所有宝石都自动包含在字节码中吗?
在Ruby中 -有人说,优雅地比较两个枚举器
zip的问题在于它在内部创建数组,无论你通过什么Enumerable.输入参数的长度还有另一个问题
我看了一下YARV中Enumerable#zip的实现,并看到了
static VALUE
enum_zip(int argc, VALUE *argv, VALUE obj)
{
int i;
ID conv;
NODE *memo;
VALUE result = Qnil;
VALUE args = rb_ary_new4(argc, argv);
int allary = TRUE;
argv = RARRAY_PTR(args);
for (i=0; i<argc; i++) {
VALUE ary = rb_check_array_type(argv[i]);
if (NIL_P(ary)) {
allary = FALSE;
break;
}
argv[i] = ary;
}
if (!allary) {
CONST_ID(conv, "to_enum");
for (i=0; i<argc; i++) {
argv[i] = rb_funcall(argv[i], conv, 1, ID2SYM(id_each));
}
}
if (!rb_block_given_p()) { …
Run Code Online (Sandbox Code Playgroud) 目前正在开发多种Ruby实现.您对此感到满意,为什么?您是否在生产中积极使用非MRI实施?
一些选项包括:
无法在rvm ruby 1.9.1下安装nokogiri gem.
gem install nokogiri
Run Code Online (Sandbox Code Playgroud)
我越来越 ...
/usr/include/libxml2... no
libxml2 is missing. try 'port install libxml2' or 'yum install libxml2-devel'
*** extconf.rb failed ***
Run Code Online (Sandbox Code Playgroud)
但我查了一下:
sudo apt-get install libxml2
Run Code Online (Sandbox Code Playgroud)
我得到了:
Reading state information... Done
libxml2 is already the newest version.
Run Code Online (Sandbox Code Playgroud)
这可能是根本的事吗?RVM在用户空间中运行所有内容.
这引发了我在1.9.2 Ruby中的SystemStackError(但在Rubinius中工作):
class Fixnum
def +(other)
self + other * 2
end
end
Run Code Online (Sandbox Code Playgroud)
但没有super
了+
(基于其他错误).
我如何访问原始+
功能?
是否有任何GC.disable
可能降低性能的情况?只要我使用真正的RAM而不是交换内存,它可以吗?
我正在使用MRI Ruby 2.0,据我所知,它是64位,使用64位Ubuntu:
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]
Linux [redacted] 3.2.0-43-generic #68-Ubuntu SMP Wed May 15 03:33:33 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud) 我正在尝试在非Rails应用程序中分析GC,最好使用YARV Ruby.
perftools.rb告诉我,我的大部分CPU时间都花在了garbage_collector(6061(61.4%))上.
我还能够通过perftools.rb获取通过哪些方法创建的对象数量.有些方法比其他方法创建更多的对象,但它并没有极端偏斜.
我从哪里开始?是否有可能获得更详细的信息,说明为什么花费这么多时间做GC?是否可以查看是否花费时间去除对象,或者是否花费在检查对象是否应该被垃圾收集?
我可以访问OS X Lion,Windows 7和Ubuntu 12.04.
有没有办法将RubyVM :: InstructionSequence存储到文件中并在以后读取?
我尝试Marshal.dump
没有成功.我收到以下错误:
`dump': no _dump_data is defined for class RubyVM::InstructionSequence (TypeError)
Run Code Online (Sandbox Code Playgroud) 据我了解,在 Ruby 1.9 之前,MRI 和 YARV 是 Ruby 编程语言的两个独立实现。
Ruby 1.9 版到底发生了什么变化?是否放弃了 MRI 以支持 YARV?或者这两个代码库以某种方式合并了?
我见过 1.9 之后的 Ruby 版本被称为“MRI”和“YARV”——这些名称中哪个是正确的(或者它们都是正确的)?
从命令行运行我的规范与ruby 1.9.x与1.8.7之间的应用程序启动时间有非常明显的差异.我的应用程序使用ruby 1.8.7比使用ruby 1.9.1或1.9.2更快地启动.应用程序启动差异大约为18秒.我的应用程序用1.8.7和1.9.2初始化需要大约5秒钟.
应用程序初始化时间对于生产来说不是什么大问题,但对于BDD开发来说这是一个非常大的问题.每次我更改代码并运行我的规范时,每次迭代我都要再等待18秒.
我假设这个应用程序初始化时间归因于我的应用程序初始化时YARV编译字节码.
我对YARV减慢应用程序初始化速度是否正确,是否有办法在命令行上禁用YARV.能够在我运行我的规格时禁用YARV会非常好.