首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在Ruby 1.8.7中Symbol#to_proc较慢?

在Ruby 1.8.7中,Symbol#to_proc方法较慢的原因是由于该版本的Ruby实现中对于Symbol#to_proc的实现方式较为低效。

Symbol#to_proc是一种将符号转换为Proc对象的方法,它允许我们以更简洁的方式来调用方法。在Ruby 1.8.7中,该方法的实现方式是通过定义一个新的Proc对象,然后将该符号作为该Proc对象的方法名。这种实现方式导致在每次调用Symbol#to_proc时都会创建一个新的Proc对象,从而引入了额外的开销。

由于创建对象和方法调用都是相对较慢的操作,因此在大量使用Symbol#to_proc的情况下,这种低效的实现方式会导致性能下降。

然而,在后续的Ruby版本中,如Ruby 1.9及更高版本,对Symbol#to_proc进行了优化,采用了更高效的实现方式。在这些版本中,Ruby引入了符号到块的自动转换机制,使得Symbol#to_proc的调用更加高效。

总结起来,Ruby 1.8.7中Symbol#to_proc较慢的原因是由于其低效的实现方式,每次调用都会创建一个新的Proc对象。而在后续的Ruby版本中,这个问题得到了优化,使得Symbol#to_proc的性能得到了提升。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

画说 Ruby 与 Python 垃圾回收

既然是"Ruby Python"大会,我觉得对比一下Ruby和Python的垃圾回收机制应该会很有趣。在此之前,到底为什么要计较垃圾回收呢?毕竟,这不是什么光鲜亮丽激动人心的主题,对吧。...例如,MRI(Matz’s Ruby Interpreter ) Ruby解释器使用的Mark Sweep算法已经超过了50年的历史,与此同时,Rubinius解释器中使用的一种垃圾回收算法,是Ruby...看起来够简单吧,我们创建对象的时候,Python会花些时间为我们找到并分配内存。 Ruby开发者住在凌乱的房间里 ? 回过来看Ruby。...引用计数算法 乍一看,Python的GC算法貌似远胜于Ruby的:宁舍洁宇而居秽室乎?为什么Ruby宁愿定期强制程序停止运行,也不使用Python的算法呢? 然而,引用计数并不像第一眼看上去那样简单。...第二点,它相对较慢。虽然Python随着程序执行GC很稳健(一把脏碟子放在洗碗盆里就开始洗啦),但这并不一定更快。Python不停地更新着众多引用数值。

67710

【python进阶】Garbage collection垃圾回收1

引⽤计数 乍⼀看,Python的GC算法貌似远胜于Ruby的:宁舍洁宇⽽居秽室乎?为什么Ruby宁愿定期强制程序停⽌运⾏,也不使⽤Python的算法呢? 然⽽,引⽤计数并不像第⼀眼看上去那样简单。...第⼆点,它相对较慢。虽然Python随着程序执⾏GC很稳健(⼀把脏碟⼦放在 洗碗盆⾥就开始洗啦),但这并不⼀定更快。Python不停地更新着众多引⽤ 数值。...现在,让我们节点中定义两个附加的属性,next以及prev: ? 跟Ruby不同的是,Python中你可以代码运⾏的时候动态定义实例变量或对象属性。这看起来似乎有点像Ruby缺失了某些有趣的魔法。...这就是为什么Python要引⼊ Generational GC 算法的原因!...为什么要这么做?这种算法的根源来⾃于弱代假说(weak generational hypothesis)。这个假说由两个观点构成:⾸先是年亲的对象通常死得也快, ⽽⽼对象则很有可能存活更⻓的时间。

97170

慢的不是 Ruby,而是你的数据库

所有的基准测试代码都可以 GitHub repo 中找到。 这并不是一项严谨的科学实验,但它揭示了一个显而易见的事实:Ruby 的确较慢 [1]。...因此,可以说 Ruby 的确较慢,并且使用较多的资源。它做出了权衡,因此可能包括开发在内的整体成本更低。这取决于具体情况,没有绝对的定论。...与 Ruby 语言类似,它更侧重于人机工程学(对开发者友好度)而非性能。这是好事!然而,这也导致 Rails 中性能成为一个问题,甚至比 Ruby 中更加突出。...为了深入分析这个问题,我将会比较一些非 Rails、非 HTTP、纯 Ruby 的脚本。 Ruby 处理大量数据方面并不擅长,但从本质上讲,这正是 Web 服务所需要的。...其次,典型的 HTTP 循环中,数据需要经过所有这些层和所有这些复杂性,直到请求响应完成。 由于 Ruby 处理数据相对较慢(参见下文),数据传递的代码越多,结果就越慢。

10730

解决Cocoapods贼慢问题

/ 】 *** CURRENT SOURCES *** http://ruby.taobao.org/ 但是现在淘宝源已经不再维护了,所以需要换为目前国内还在维护的【ruby-china】,如果之前没换过则默认为...【https://rubygems.org/ 】,这个是国外的,对于我们来说也是比较慢的,所以也得将其更换掉 // 移除 gem sources --remove http://ruby.taobao.org.../ // 添加 ruby-china 的源 gem sources --add https://gems.ruby-china.org/ 二、更换pod repo源 我相信目前大部分友友的这个repo...repo update ** 注意点:** 每一个项目中创建的podfile文件的第一行都要填写下面这行source命令。...当然也可以自己Coding上面新建一个工程将CocoaPods/Specs同步到你自己的仓库然后来使用~ source 'https://git.coding.net/CocoaPods/Specs.git

5.5K60

内网转发及隐蔽隧道 | 使用DNS进行命令控制(dnscat2)

dnscat2的客户端是有Windows版和Linux版,服务端是用Ruby语言编写的。严格的说,dnscat2是一个命令与控制工具。 使用dnscat2隧道的模式有两种,分别是直连模式和中继模式。...与直连模式相比,中继模式的速度较慢 如果目标内网放行所有的DNS请求,dnscat2会使用直连模式,通过UDP的53端口进行通信(不需要域名,速度快,而且看上去仍然像普通的DNS查询)。...第二条NS解析是告诉域名系统,想要知道 test.hack.com 的IP地址,就去问www. hacker.com 。 为什么要设置NS类型的记录呢?...ruby ....修改远程响应延时 exec :执行远程机器上的指定程序,例如PowerShell或VBS shell:得到一个反弹的shell download、upload:上传、下载文件,速度较慢

3.5K10

【程序猿硬核科普】推荐几个在线运行Java代码的网站

本篇文章主要分享几个常用的可以在线运行Java的网站,网站功能相对来说比较简单,而且速度较慢,不能运行复杂项目,但可以收藏起来以备不时之需。...java.jsrun.pro这个网站代码运行速度较快,报错信息也很准确,还可以托管代码,也能运行其他主流的编程语言,如:Python、C、PHP、Node.js、C#、Ruby、Go等。...菜鸟在线Java运行,也是不错的,速度一般,也能运行其他主流的编程语言,如:Python、C、PHP、Node.js、C#、Ruby、Go等。 ?...这个网站对于运行多个Java类的支持就不太好了,它是使用一个文本域里放多个public class类,相对于前面几个网站来说就很一般了,不过它支持下载代码,更改背景样式等等功能。

11.2K21

Mac全栈开发-Homebrew

安装HomeBrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"...确保HomeBrew是否安装正常 安装好HomeBrew之后,Terminal执行下面命令确保正常安装: brew doctor 若上面命令执行过程出现 hombrew libevent not link...,建议先搜索一下,执行下面命令: brew search mongod 安装包,搜索到想要安装的包之后,执行下面命令即可安装: brew install mongod 更新HomeBrew服务端的包结构...: brew update 查看安装过的包列表: brew list HomeBrew Cask 回顾一下我们windows下面安装一个软件的过程: 打开浏览器 搜索应用名字 打开应用网站 找到对应下载路径...如果上面的理由还不能说服你,另外由于国内墙的问题,AppStore下载应用速度总是比较慢,而且应用更新速度也是比较慢,而HomeBrew Cask可以第一时间获取到官方最新的应用,并且下载速度杠杠的。

63110

macOS下vagrant搭建本地web开发环境(CentOS)

找到需要的系统,会有介绍和安装方式 centos $ mkdir centos $ cd centos $ vagrant init centos/7 $ vagrant up 下载比较慢...,需访问外国网站,也可以下载到本地后再add,方式如下: 依然终端运行$ vagrant init centos/7命令,但是在运行过程中会发现终端将box文件原地址打印了出来,见下图, 一出现该地址.../ --remove https://rubygems.org/ # 删除默认源,添加国内源,注意使用ruby-china.com新域名,原ruby-china.org源也需要删除重新设置 $ gem...多余需要删除 $ vagrant plugin install vagrant-vbguest --plugin-clean-sources --plugin-source [https://gems.ruby-china.com.../](https://gems.ruby-china.com/) # 安装插件 $ vagrant reload # 重启虚机 重新登录虚机,$ vagrant ssh ,提权到root,$ su,

1.3K30

明厨亮灶监控实施方案 opencv

它轻量级而且高效——明厨亮灶监控实施方案算法由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。...与C / C++等语言相比,Python速度较慢。...也就是说,Python可以使用C / C++轻松扩展,这使明厨亮灶监控实施方案算法可以C / C++中编写计算密集型代码,并创建可用作Python模块的Python包装器。...这给明厨亮灶监控实施方案算法带来了两个好处:首先,代码与原始C / C++代码一样快(因为它是在后台工作的实际C++代码),其次,Python中编写代码比使用C / C++更容易。...Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby

24050

使用github+jekyll搭建个人博客

本人是windows上进行操作,至于其他平台上的操作,请小伙伴们自行搜索。...一、使用jekyll服务搭建 1.1 安装ruby以及ruby相关工具(DevKit) 由于jekyll是基于ruby语言开发的,因此我们需要安装ruby以及ruby相关的工具(DevKit)。...具体的ruby可以到官网上去下载,不过毕竟是国外网站,如果没有好的访问外国网站工具还是比较慢的。这里我已经准备好了,点ruby和DevKit下载。点击exe文件进行自定义目录安装。...然后浏览器中输入Rynxiao.github.io,就可以看到我们本地中搭建的博客样子了 二、复制别人现有的博客模板 进入http://jekyllthemes.org/,挑选一个自己喜欢的模板...详细的更改配置可以模板的主页中读取,一般都会有介绍 浏览器中输入你的账户名.github.io,就可以看到你喜欢的博客模样了 参考链接 https://bigballon.github.io/posts

86660
领券