Ruby Ruby 2.1 is out.

ksec · 2013年12月26日 · 最后由 hustjackyan 回复于 2014年05月02日 · 11887 次阅读
本帖已被管理员设置为精华贴

又 out 了。

~ ❯❯❯ ruby -v ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin13.0]

#2 楼 @chaixl 真快。。我还是等明天去公司下吧。。现在网速又慢,电脑电又不多

重温 ko1 在 rubykaigi2013 上的演讲

升级强迫症要犯了……

听说快了很多?

新官网设计更了嘿~

已经用上了。

升级完毕,单元测试以及人肉测试中...

昨天还上 rc 的

GC 改进哦,值得升级

每次都说快了好多......

人肉测试中~

估计这两天会陆续又各种细致的评测,分析放出来。

赶快 benchmark 的搞起!

...额……还得等 arch 更新……

话说 changelog 里面有 * All symbols are now frozen. 原来以前 symbol 都不是 frozen 的……

安装吧!

rvm get stable
sed -i .bak 's!cache.ruby-lang.org/pub/ruby!ruby.taobao.org/mirrors/ruby!' $rvm_path/config/db
rvm install 2.1.0

#16 楼 @Kabie 感觉好像不是这意思...是不是指现在 symbols 和 frozen 是放在同个 Hash 中了

MINOR: increased every christmas 这也太有计划了…………

#18 楼 @jjym 应该是说,现在所有 symbols 都使用同一套机制了。比如以前你要节省内存只能选择 symbol,但是现在你可以直接在字符串上面调用 freeze 就可以了。这个方法现在经过 VM 优化,和以前大不相同,对相同的字面量只会分配一块内存。经过我刚刚测试,确实只有 2.1 才支持的。比如:
a = "hello".freeze b = "hello".freeze
以上只有在 2.1 才会共享内存,object_id 相等。

wa , 坐等专业测评。。

#20 楼 @outman 我说的是另一个……找到来源了:http://bugs.ruby-lang.org/issues/8906

我也升级完啦,有空测试下性能

rbenv

brew upgrade readline openssl
brew upgrade ruby-build --HEAD
rbenv install -k -v 2.1.0
ruby-china.org

  App Environments:
  --------------------------------------------------------
  Ruby:  2.1.0-p0
  Rails: 4.0.2

真够快的……

#24 楼 @luikore 刚刚进 log 文件看了一下,第一次出现错误的是在这个地方:

compiling proc.c
compiling file.c
In file included from /System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:68,
                 from /System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h:8,
                 from file.c:23:
/usr/include/MacTypes.h: In function ‘Debugger’:
/usr/include/MacTypes.h:699: error: expected declaration specifiers before ‘__AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8’
/usr/include/MacTypes.h:711: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8’
/usr/include/MacTypes.h:758: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8’
/usr/include/MacTypes.h:770: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8’
/usr/include/MacTypes.h:782: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__AVAILABILITY_INTERNAL__MAC_10_0_DEP__MAC_10_8’
/usr/include/MacTypes.h:792: error: expected declaration specifiers before ‘#pragma’
In file included from /System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h:8,
                 from file.c:23:
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:335: error: storage class specified for parameter ‘CFTypeID’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:336: error: storage class specified for parameter ‘CFOptionFlags’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:337: error: storage class specified for parameter ‘CFHashCode’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:338: error: storage class specified for parameter ‘CFIndex’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:342: error: storage class specified for parameter ‘CFTypeRef’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:344: error: storage class specified for parameter ‘CFStringRef’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:345: error: storage class specified for parameter ‘CFMutableStringRef’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:352: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘CFPropertyListRef’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:355: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘CFComparisonResult’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:362: error: expected declaration specifiers or ‘...’ before ‘*’ token
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:362: error: storage class specified for parameter ‘CFComparisonResult’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:362: error: ‘CFComparisonResult’ declared as function returning a function
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:373: error: expected specifier-qualifier-list before ‘CFIndex’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:375: error: storage class specified for parameter ‘CFRange’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:378: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘CFRangeMake’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:390: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__CFRangeMake’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:395: error: storage class specified for parameter ‘CFNullRef’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:398: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘CFNullGetTypeID’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:401: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘kCFNull’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:411: error: storage class specified for parameter ‘CFAllocatorRef’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:415: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘kCFAllocatorDefault’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:419: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘kCFAllocatorSystemDefault’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:428: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘kCFAllocatorMalloc’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:435: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘kCFAllocatorMallocZone’
/System/Library/Frameworks/CoreFoundation.framework/Headers/CFBase.h:442: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘kCFAllocatorNull’
...

后面就是各种.c文件的编译错误,难道是因为系统版本太高?

#26 楼 @hxtheone cc -vgcc -v 看看有没有 gcc42 的残留,我用最新的 clang 编译没问题

另外你安装时用的确切命令是什么?环境是 homebrew 吗?homebrew 的 readline 装了吗?

#27 楼 @luikore 果然有,我记得我装过osx-gcc-installer,有些时候还是需要使用gcc的。。。请问可以选择强制使用clang编译么?

#28 楼 @hxtheone 可以,转到源代码目录

CC=`which clang` CXX=`which clang++` ./configure --prefix=$HOME/.rbenv/versions/2.1.0 --with-openssl-dir=/usr/local/opt/openssl --with-readline-dir=/usr/local/opt/readline

(如果没有 homebrew 装的 openssl, 就把 --with-openssl-dir 那项去掉)

然后检查下 Makefile 是否把 CC 设对了,然后 make install 搞定


从头安装的话

CC=`which clang` CXX=`which clang++` rbenv install -k -v 2.1.0

在极客头条翻译了一下主要的新特性:http://geek.csdn.net/news/detail/4112

收集了相关的一些资源。最后把本贴也加进去啦。

根据官方新闻,比较显著的包括:

  • 虚拟机方面的改进(方法缓存)(详情可以参考 GitHub Charlie Sommerville 的博客,还有 James Golick 的分析)。
  • 引入分代垃圾收集器 RGenGC(详情可以参考 Heroku 的 ko1/笹田耕一的两次演讲:RubyKaigiRubyConf 2013)。
  • 引入Module#usingModule#include两个 Refinement。
  • 语法方面的变化:

> - 关键字参数的默认值可以忽略了。调用时需要显式给出必需的参数。 > - 整数与浮点数字面值增加了几个前缀,包括有理数'r',虚数'i'和复数'ri'。 > - def-expr 现在的返回值是名字的符号,而不再是 nil。

笹田耕一 9 月曾经对 2.1 版的更新做过演讲,演讲稿有一定参考价值。

GitHub 的 Ruby 程序员Aman Gupta系列博客讲述 2.1 的各个改进,也不错。

其实我想知道用 rvm、rbenv 之类安装了多版本的 ruby 能否共用一份 gem 包,可以的话如何实现

#31 楼 @ywjno 有类似 rvm migrate 这样将 gem 整体迁移的,但是有些 gem 需要重新编译的……所以共享不太现实

#31 楼 @ywjno 大版本相同的话,rbenv 可以直接把 gem 目录链接或者拷过去就可以了

2.1.0 速度确实上去了,没有测试数据,只是个人感觉,难道是错觉?

36 楼 已删除

#14 楼 @lgn21st @googya Hacker News 上有同学的评测似乎提升并不太大。

#37 楼 @turingbook 看了一下,主要性能提升得地方在于 Rails startup 时间,就 Rails 处理请求效率提升有限。记得从 1.8.7 到 1.9.3,Ruby 性能大幅提升,但是 Rails 得性能提升也很有限,归结于 Rails 得性能瓶颈并不完全来自语言效率本身。

输入 irb 后的进入控制台的效率也提升了!简直一下就进去了。以前还会等个毫秒级别。

我把 Mac 的 ruby 从 2.0.0 升级到 2.1.0 了,接着把项目中的 Gemfile 的 ruby 改成 2.1.0,然后 bundle install 就报下面这个错: Your Ruby version is 2.1.0, but your Gemfile specified 2.0.0 请问如何可以把项目的 ruby 也升级至 2.1.0?

#40 楼 @jxs471494539 在 Gemfile 中删除 Ruby 版本相关得配置。

会不会有升级后不兼容的事情发生哇。?看起来大家都很顺利的样子。。

http://www.isrubyfastyet.com/

看起来除了内存占用其它都蛮好

#29 楼 @luikore 昨天装了好久没装好,一气之下把gcc给卸了,今天继续,提示clang版本过低,用clang --version一看竟然是Apple clang version 2.1版本,下载最新版的command-line-tools安装,装完后居然还是 2.1 版本的clang,然后rbenvrvm继续提示clang版本过低。。。已崩溃。。。

#45 楼 @hxtheone #46 楼 @luikore

或者是装了但是没有切换?试试看

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

#46 楼 @luikore 目前是 5.0.1 的 Xcode,马上升级 5.0.2~~ #47 楼 @lgn21st 试了这个指令了,木有效果。。。

#48 楼 @hxtheone xcode5.0.1 已经对应 llvm 3 了吧?隐约记得上个版本就已经是 2.5+ 了。现在一般都是在 xcode 里面装 command line tools 或者装完 xcode 就有了,不用单独下载安装的 (会不会是从奇怪的源下了个旧得不行的版本?).

另外可以 type clang 看看是不是 /usr/bin/clang . 如果不是,可能是 macport 或者什么其他东西装过 LLVM, 改改 $PATH 或者设置下 $CC 到正确的路径应该就好了。

#49 楼 @luikore 我当时不想装Xcode,因为这么大的一个玩意儿对我也没什么用,就从developer.apple.com上单独下的 CLT 安装包,装上之后 clang 就是 2.1 版本,刚刚折腾了半天clang的版本号都是雷打不动,在Xcode里面也看不到 CLT 的升级选项,路径到是/usr/bin/clang没错。

泪目啊,早知道当时就应该装Xcode然后在里面安装 CLT 了.....

#50 楼 @hxtheone 把 xcode 当成系统的一部分看,就淡然了... xcode-select 应该能起效果的啊,是不是你下了 DP 版的 xcode 所以不是 /Applications/Xcode.app ?

#51 楼 @luikore 是正式版的Xcode,我能看到这个目录,但是用了这个指令,clang的版本号并没有变,而且我仔细看了一下,这个目录下面的bin目录下,并没有clang...

#52 楼 @hxtheone /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -v 应该有的

如果 xcrun clang -v 版本对,那么可以试试这个解决方案:

export CC='xcrun clang'
export CXX='xcrun clang++'

#51 楼 @luikore 多谢指教,我先自习去了,晚上回来接着整,我还就不信我整不好了,先去图书馆好好想想哪出错了。( ̄﹏ ̄) 。。。。

#38 楼 @lgn21st 我拿实际项目测试过,1.9.3 相比 1.8.7 有巨大的性能提升,而 2.0 相比 1.9.3 又有 10% 左右的提升,那种 hello world 项目测试结果一般都没有什么参考价值。2.1 相信随着进一步优化,会在 2.0 基础上对服务端重负载应用会有很明显提升的。

#55 楼 @robbin 谢谢分享,我们这边的项目也才刚过度到 2.0,争取早日过度到 2.1。

Ruby 2.1 is out 英文不错

#53 楼 @luikore 感谢指导,我终于装好了(>﹏<)。。。

/usr/bin/clang的版本号始终没变过,最后用Compile and use LLVM 3.3 on OS X这篇文章编译了一个外部的clang,在用CC=''指向这个外部的clang搞定了。

刚刚发现,在我的 Mac 里,CLT 并没有安装到/usr/bin这个目录下,而是安装到了/Library/Developer/CommandLineTools下面,奇了怪了。。。

也就是说,我的 Mac 里目前存在四个clang/usr/bin/Library/Developer/CommandLineTools/usr/bin/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/下面都有一个,还有我自己编译的一个。目前把终端中的clang指向第二个目录下面的clang,在终端中查看时版本号终于正常了,如果一开始就这么干,就不用蛋疼了。

饶了很多弯路,不过这次对 Mac 的系统目录结构有了进一步的了解,也算因祸得福吧(‾▽‾)~~

这标题,开始以为是过时,原来是released

。。LZ 这个英文真是强悍。。。我以为是过时了

http://ruby-china.org/topics/16393 各位谁能帮助我解决这个问题呢?

LZ 英文牛逼啊。。

我的英文也不错。我一看就看出来是释出新版本了

国内的 Ruby2.1 在线 API 镜像: http://doc.rubyfans.com/ruby/v2.1/

之前升级到 2.0,除了不用写 encoding 外,一个新特性都还没用过...

在 Raspberry Pi 上装 Ruby 2.1,都编译一个小时了,还没完啊!

#67 楼 @jimmy2011 树莓派性能不行,换个杨梅派之类自带内存外存而且还是 A20 cpu 的来试试

69 楼 已删除

我是被 LZ 的英文标题逼出来的

對不起,引起這誤會 @@",下次會用回 'released'.

72 楼 已删除

好吧,标题我理解错了。。

匿名 #76 2014年02月15日

#71 楼 @ksec sth. is out 其实是很正常的说法吧,而且也不少见的。

@dorentus 問題是我應為正常的不等於其他人覺得正常的說法麻。在外國當然不會有這個情況出現。

#77 楼 @ksec 用 is out 没有任何问题。今天看到 https://groups.google.com/forum/#!msg/redis-db/cdy_85c1b1U/siu7MCYFBy8J 忽然想起这个帖子了。

看到标题,我也表示理解错了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号