ruby安装
根据编译安装时的c编译环境,ruby被编译成对应的平台版本,如默认无标识的unix(cc、gcc)、freebsd、mingw32、cygwin、mswin32-60(vc6.0)、mswin32-100(vc10.0)、darwin-11(Mac)、java
一些用到c的rubygem,有的被做成多个平台版本,有的只有默认版本,安装和用要注意平台版本匹配
mingw gcc可以编译一些含POSIX FUNCTION的c代码,可在mingw下编译安装ruby
./configure --enable-rubygems --disable-install-doc --disable-install-rdoc --disable-install-capimake && make install
也可以用rubyinstaller.org做好的安装版。
http://rubyforge.org/frs/download.php/75465/rubyinstaller-1.9.3-p125.exe
win32版的ruby要靠vc++编译出来,要注意:用vc10.0编译出来的ruby,和vc6.0不兼容!rubygems.org上有提供win32版的gem,标记的都是mswin32-60(比如enventmachine、nokogiri),mswin32-100的ruby装了它们也用不了。为了能用就须用vc6.0编译。
用vc6.0编译ruby mswin32
http://www.downbank.cn/soft/10/104/2006/20060928974.htm
进到光盘里面把其中4个目录拷到C盘:
VC6EN\COMMON\MSDEV98\BINVC6EN\VC98\BINVC6EN\VC98\INCLUDEVC6EN\VC98\LIB
加环境变量
# PathC:\VC6EN\COMMON\MSDEV98\BIN;C:\VC6EN\VC98\BIN;%path%;# includeC:\VC6EN\VC98\INCLUDE# libC:\VC6EN\VC98\LIB
下载ruby源码 http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p125.tar.bz2
编译
C:cd \rubywin32\configurenmake & nmake test & nmake install
一切顺利ruby默认安装在c:\usr
%path%;C:\usr\bin;
安装扩展
psych gem命令要求
http://pyyaml.org/wiki/LibYAML
vitualstudio打开C:\yaml-0.1.4\win32\vs2008\libyaml.sln生成yaml和yamldll项目
C:\yaml-0.1.4\win32\vs2008\Output\Debug\lib\DLL;%path%C:\yaml-0.1.4\win32\vs2008\Output\Debug\lib\DLL;%lib%C:\yaml-0.1.4\include;%include%cd %src%\ext\psych && ruby extconf.rb && nmake && nmake install
zlib gem install命令要求
http://zlib.net/zlib125-dll.zip
C:\zlib125-dll;%path%cd %src%\ext\zlib && ruby extconf.rb --with-zlib-dir="C:\zlib125-dll" && nmake && nmake install
openssl rack(web server)和debug要求
下载安装Win32OpenSSL http://www.slproweb.com/download/Win32OpenSSL-0_9_8r.exe
cd ext/openssl && ruby extconf.rb --with-openssl-dir="C:\openssl" && nmake && nmake install
在cmd里安装gem
gem i -l rubygems-update-x.x.xx.gemupdate_rubygems
# sublime 比 rubymine 好用多了70414-12042010 00002VG0BeoZbwmNAMNCx5E882rBEM Ysn1P!e"s830EDlHcWg8gmqYVkvZMo Injf4yqlO1yy"82NiwNzyYInoT7AiX
非windows平台
不推荐rvm,复杂设计,一堆bug
benchmark
ruby benchmark suite
https://github.com/acangiano/ruby-benchmark-suite
ruby版本都是1.9.3
把一个n长的字符串,存入一个数组x遍,遍历数组正则匹配。
require 'benchmark'puts RUBY_PLATFORMsum = 010.times do bm = Benchmark.realtime do arr = [] 20000.times do arr << "ruby platform vs " * 1000 end arr.each do |a| puts 'true' if a =~ /unknown/ end end puts "#{"%0.3f" % bm}s" sum += bmendputs "Average:#{"%0.3f" % (sum / 10)}"
家里电脑windows系统,mingw32 vs i686-linux(in virtualbox) vs i386-freebsd9.0(in virtualbox)
i386-mingw32Average:0.927i686-linuxAverage:0.804i386-freebsd9.0Average:3.872
linux总是最快的,字符串短的情况下freebsd和linux差不多,字符串一长freebsd就慢了,不知道是不是虚拟机的关系。
公司电脑windows系统,mswin32 vs mingw32 vs cygwin
i386-mswin32Average:0.671i386-mingw32Average:0.633i386-cygwinAverage:0.339
cygwin是较完整的unix环境,原则上比mingw慢,执行这个脚本竟然比mingw快。
对象存取
require 'benchmark'class Foo def bar true endendputs RUBY_PLATFORMn = 1_000_000Benchmark.bm(30) do | b | b.report "instance_variable_set" do n.times do instance = Foo.new instance.instance_variable_set(:@baz, Hash.new) end end b.report "instance_eval" do n.times do instance = Foo.new instance.instance_eval do @baz = Hash.new end end endend
i386-mingw32 user system total realinstance_variable_set 1.295000 0.000000 1.295000 ( 1.290073)instance_eval 2.637000 0.000000 2.637000 ( 2.629151)i386-cygwin user system total realinstance_variable_set 1.622000 0.000000 1.622000 ( 1.622093)instance_eval 3.994000 0.000000 3.994000 ( 4.002229)
mingw32 比 cygwin 快
2 楼 hudou1986 2012-01-28 希望出一个mingw32编译ruby的教程