新学一门语言没什么坏处,学学 go 挺好的。 至于学了有没有什么用,我的感受是学了越多越发觉用处不大,如果你想设计一门语言,也许会拓宽思路,但是做应用级别的开发,用处不大。
go 明显是用来做系统语言的,语法就像一个 c 的方言。从我角度来看,无法取代 c,也许可以玩一玩。 和 ruby 就没什么交集了,一个是看重开发效率,一个是看重执行效率,完全是两条路上的东西。
昨天看了一点 go 的东西,感觉不应该拿来和 ruby 比较,完全不是一种类型的语言。 go 更像是简化了的,外加一些额外的语法糖的 c,做为系统级别的语言更合适。
go 比 c 慢 10 倍的场景并不少见,比如二叉树测试:
而 self 只是提供了个不同于 class 的访问层次结构而已,你可以看作是 class 内部的一个隔离区。
没什么奇怪的,对于 module 来说,include 本身和继承没任何关系,所谓 include 一个 module,最相似的用法就是 c++ 里面的 inline,c 里面的#define。简单说,就是在现场展开,相当于把代码在 include 的地方又当作字符串拷贝了一遍。
学好算法数据结构,离散数学,os,编译,网络,这些是基础。不要过多纠结各种语言,也不要纠结设计模式这种没门槛的东西。然后可以选个方向,比如图形图像,数据处理,高性能计算,分布式等等。
#21 楼 @goinaction Value 本身只不过是个 4byte 的值,所以可能会出现不适 4 的倍数的情况,这些情况只有这几种可能: 小整形,符号,true,false,nil,undef。
#14 楼 @goinaction 地址不会出现不是 4 的倍数,所以 Fixnum 才能与通常的 object 区分开来啊。
#8 楼 @yakczh 不是。 简单说,所有 ruby 程序里面的变量,常量,符号等,都会在虚拟机里面被一个叫做 VALUE 的类型所表示,大多数情况下,普通的对象所对应的 VALUE 就是简单的 Void*,但是并不是所有的 VALUE 都是 Void*,比如 Symbol,在 ruby 内部就是一个 unsigned long(ID)。 那么 Symbol 倒地是什么,其实就是一个唯一的不变的量,用在 ruby vm 内部,用 hash 存储,key 就是刚才说的 ID,在 vm 内部他们类型都是 VALUE。 另外 vm 怎么区别一个 VALUE 倒地是 symbol 还是其他常规 Object 呢?ruby 内部是这样做的: 先把一个 VALUE 的值左移 8 个 bit,然后在右端空出来的一个 byte 里面,填充 0x0e,然后这个新造出来的值,因为不能被 4 整除,所以 ruby 就知道它不是一个 void*类型的普通 VALUE 从而判断出它是个 symbol。(ruby 分配内存都是以 4 个 byte 为一个单位来分配)
#2 楼 @michael_roshen 不用翻墙。
其实我一直想做一个 ruby 版的解析器生成器,这样以后用 ruby 做外部 dsl 就会很方便。不知道有没有现成的可以用?
#16 楼 @lewisgrady 小米不算山寨吧,不比 ip 差。
其实我蛮搞不懂的,如果有人愿意用 nodejs 这种 bt 的语法去写 web 相关的东西,为什么不直接用 c?
在上海就好了。。
#34 楼 @Rei 有些 gem 也有不能加载的现象比如 win32-process,大部分可以用。 这是我的结果: ➜ ~ gem list | grep alipay alipay (0.0.1) ➜ ~ irb 2.0.0p247 :001 > require 'nokogiri' => true 2.0.0p247 :002 > puts $LOAD_PATH /home/rasefon/.rvm/gems/ruby-2.0.0-p247@r2/gems/mini_portile-0.5.1/lib /home/rasefon/.rvm/gems/ruby-2.0.0-p247@r2/gems/nokogiri-1.6.0/lib /home/rasefon/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0 /home/rasefon/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/i686-linux /home/rasefon/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby /home/rasefon/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/vendor_ruby/2.0.0 /home/rasefon/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/vendor_ruby/2.0.0/i686-linux /home/rasefon/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/vendor_ruby /home/rasefon/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0 /home/rasefon/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/i686-linux => nil 2.0.0p247 :003 > ^C
➜ ~ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux]
➜ ~ rvm list
rvm rubies
ruby-1.9.3-p448 [ i686 ]
=* ruby-2.0.0-p247 [ i686 ]
# => - current
# =* - current && default
# * - default
➜ ~ rvm gemset list
gemsets for ruby-2.0.0-p247 (found in /home/rasefon/.rvm/gems/ruby-2.0.0-p247)
(default)
global
=> r2
➜ ~ gem install alipay
Successfully installed alipay-0.0.1
1 gem installed
➜ ~ irb
2.0.0p247 :001 > require 'alipay'
LoadError: cannot load such file -- alipay
from /home/rasefon/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:51:in `require'
from /home/rasefon/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:51:in `require'
from (irb):1
from /home/rasefon/.rvm/rubies/ruby-2.0.0-p247/bin/irb:13:in `<main>'
2.0.0p247 :002 >