`
yawl
  • 浏览: 60785 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Ruby builtin in pure Ruby

阅读更多
[Update 03/12/2007 If you know how to implement Interge#times in pure ruby and make it have the same behavior as Ruby 1.8.5, please let me know. Thank you!]

One of the best things I love about rubinius project is: their developers try to keep the dependency on system language (C in their case) minimal, and they take it seriously. Take a look of http://code.fallingsnow.net/svn/rubinius/trunk/kernel/core/, you will find out lots of buitlin libraries are implemented in pure ruby, even lots of string functions.

Pure ruby builtin has some drawbacks, though. One is performance penalty, the other is potential side effects. For example, basically Integer#times can be implemented as simple as this in pure ruby:


class Integer
def times
i = 0
while i < self
yield i
i += 1;
end
self
end
end


But this version of Integer#times does not work exactly the same as Ruby 1.8.5. If an user want to override Fixnum#+ (this may never happen in real life):


class Fixnum
def + x
return 9999
end
end


Our Integer#times's behavior will change, while Ruby 1.8.5 won't. That is because Ruby 1.8.5's implementation (int_dotimes() in Numeric.c) optimizes for Fixnum: it does not call '+' method dynamically for Fixnum, instead, it just increases the integer directly. If you want to implement this method as same as Ruby 1.8.5 then you have to write code in system language.

This kind of optimization is all over the place in c ruby. I am not clear about its motivation, but I guess performance is one of the reasons. For example, "30000000.times {|x|}" is about twice faster than "i = 0; while i < 30000000; i +=1; end" in Ruby 1.8.5.

Difference people may have different opinions on what the 'right' behavior should be. As for me, I like the behavior of the pure ruby implementation better.
分享到:
评论

相关推荐

    TStarBots Defeating the Cheating Level Builtin AI in StarCraft in the full game

    TStarBots Defeating the Cheating Level Builtin AI in StarCraft in the full game

    unity_builtin_extra

    unity_builtin_extra

    builtin_shaders-2021.1.15f1.zip

    内置着色器(Builtin Shaders)是Unity3D引擎的重要组成部分,它们为开发者提供了预设的图形效果,用于渲染游戏场景中的物体。在"builtin_shaders-2021.1.15f1.zip"这个压缩包中,包含了Unity 2021版本的内置着色器...

    BuiltIn库_Robot framework

    :FOR ${i} IN RANGE 1 10 \ Run Keyword If ${i} &gt; 5 Exit For Loop \ Log To Console ${i} ``` #### 七、WaitUntilKeywordSucceeds关键字 **WaitUntilKeywordSucceeds** 关键字可以用来等待某个关键字成功执行...

    Unity内置着色器源码 builtin_shaders-4.1.5.zip

    `builtin_shaders-4.1.5.zip`这个压缩包包含了Unity 4.1.5版本的内置着色器源码,这对于开发者深入理解Unity渲染管线和优化图形性能具有极大的价值。 Unity的着色器系统基于ShaderLab语言,这是一种简化版的编程...

    Unity内置着色器源码 版本:builtin_shaders-2018.4.22f1.zip

    Unity内置着色器源码 版本:builtin_shaders-2018.4.22f1.zip Unity内置着色器源码 版本:builtin_shaders-2018.4.22f1.zip

    unity builtin_shaders - unity自带shader源码

    本资源包"unity_builtin_shaders"包含了Unity引擎自带的着色器源码,这对于深入理解Unity渲染管道以及优化图形性能具有极大的价值。 首先,我们来谈谈什么是着色器。在图形编程中,着色器是一种程序,它运行在图形...

    builtin_shaders-2021.1.12f1.zip

    Unity引擎是全球广泛使用的3D游戏开发平台,其内置着色器(builtin shaders)是开发者进行视觉效果创作的重要工具。"builtin_shaders-2021.1.12f1.zip" 文件包含了Unity在2021年1月12日版本中的内置着色器资源,这些...

    builtin_shaders-2018.4.1f1.zip

    《Unity Shader深度解析:以“builtin_shaders-2018.4.1f1.zip”为例》 Unity是一款强大的游戏开发引擎,其强大的图形渲染能力离不开Shader的支撑。Shader,简单来说,就是控制计算机图形如何在屏幕上显示的程序。...

    builtin_shaders-4.6.5

    "builtin_shaders-4.6.5"是一个与Unity 4.6.5版本相关的压缩包,其中包含了该版本的官方着色器库。这个资源对于想要深入理解和学习Unity着色器的人来说是非常宝贵的。 Unity的着色器(Shader)是编程实体,用于控制...

    Unity内置着色器源码 版本:builtin_shaders-5.0.4f1.zip

    这个名为"builtin_shaders-5.0.4f1.zip"的压缩包包含了Unity 5.0.4f1版本的内置着色器源码,这对于开发者深入理解Unity渲染机制、定制和优化着色器是非常宝贵的资源。 Unity Shader标签表明这个资源主要与Unity的...

    Unity内置着色器源码 版本:builtin_shaders-2019.1.14f1.zip

    在这个"builtin_shaders-2019.1.14f1.zip"压缩包中,包含了Unity 2019.1.14f1版本的内置着色器源代码,这对于学习和研究Unity的图形系统非常有价值。 "license.txt"文件通常包含软件的许可协议,对于Unity的内置...

    builtin命令 执行bash内建命令

    builtin命令用于执行指定的bash内建命令, builtin命令调用的bash内建命令优先于同名的外部命令及同名的shell函数。 返回该内建命令执行的返回值,除非传递的不是bash内建命令或该内建命令被禁用。 语法格式: ...

    builtin-modules:Node.js内置模块列表

    $ npm install builtin-modules 用法 const builtinModules = require ( 'builtin-modules' ) ; console . log ( builtinModules ) ; //=&gt; ['assert', 'buffer', ...] 原料药 返回从运行的Node.js版本获取的内置...

    Nodejs基础03. require 函数介绍(二), Builtin modules 内部函数库

    [Electron][JS][教學]_Nodejs基礎#03._require_函數介紹(二),_Builtin_modules

    Unity内置着色器源码 builtin_shaders-4.3.4.zip

    这个名为"builtin_shaders-4.3.4.zip"的压缩包包含了Unity 4.3.4版本的默认着色器源代码,这对于开发者来说是一个宝贵的参考资料,可以帮助他们深入学习和定制自己的着色器。 Unity的Shader系统基于Cg/HLSL语言,这...

    Unity__builtin_shaders_源码

    Unity是一款广泛应用于游戏开发、虚拟现实、增强现实等领域的3D引擎,它的内置着色器(builtin shaders)是实现各种视觉效果的关键。源码分析能够帮助开发者深入理解Unity的渲染机制,提高自定义着色器的能力。在...

    builtin_overflow:可以帮助我将__builtin_add_overflow,__builtin_sub_overflow和__builtin_mul_overflow添加到clang的文件

    在C编程语言中,内置(Builtin)函数是编译器提供的一种特殊功能,可以直接在编译时进行优化,提高程序的效率。标题提到的`__builtin_add_overflow`,`__builtin_sub_overflow`和`__builtin_mul_overflow`是Clang...

    builtin_shaders-2019.4.10f1.zip

    Unity引擎是全球广泛使用的跨平台游戏开发工具,其内置着色器(builtin_shaders)是开发者在创建3D图形和视觉效果时不可或缺的一部分。"builtin_shaders-2019.4.10f1.zip" 是Unity的一个版本更新,包含了2019.4.10f1...

Global site tag (gtag.js) - Google Analytics