#16 楼 @chenge 1.9.x 下 BasicObject 可做 blank class 用。1.8.x 需要自己处理一下,或使用 gem "blankslate"。
Ruby 的文档已经说的详细了:) http://ruby-doc.org/core-1.9.3/BasicObject.html
是在工作当中使用吗?
#7 楼 @neverlandxy_naix 不客气,能帮上忙就好。其实我上面说的比较笼统,再详细的你可以查阅相关资料即可。
look look book
简单从 Ruby 层面说吧: 第一段代码
klass.instance_eval do
def method_added(name)
puts "#{self} added a method #{name}"
end
end
相当于
def kass.method_added(name)
puts "#{self} added a method #{name}"
end
在这里相当于
def SubClass.method_added(name)
puts "#{self} added a method #{name}"
end
第二段代码
klass.instance_eval do
define_method :method_added do |name|
puts "#{klass} added a method #{name}"
end
end
define_method 的含义是"Defines an instance method in the receiver. "
等价于
klass.instance_eval do
self.send :define_method, :method_added do |name|
puts "#{klass} added a method #{name}"
end
end
相当于
class SubClass
define_method :method_added do |name|
puts "#{klass} added a method #{name}"
end
end
p SubClass.instance_methods
原来是这样:
@luikore == @night_song # => true
这是一次成功的大会,胜利的大会,团结的大会 :>
虎跑总是站在潮流的最前沿~ :)
#8 楼 @lyfi2003 Ruby1.9 的线程和 1.8 差异大,在用户级的行为也不一样。GIL 的主要限制并不是在“在内核阻塞的线程会导致挂死 Ruby.”。比如说,1.9 下,你创建几个线程,让其中几个线程通过 Lock(当然,1.8 和 1.9 的 Mutex 实现也不一样)等手段来堵塞,其他线程依然可以被 OS 调度。1.8 和 1.9 的差异在线程是由 Ruby 来调度,1.9 是由 OS 来调度,而 GIL 影响 OS 对 Ruby 线程的调度。
虽然可被调度,但是由于 GIL 的存在,致使 Ruby 线程真正的不能并发执行(是指真正的并发)。
1.8 下,所有的 Ruby 线程 对应一个 OS 线程,所以任意一个 Ruby 线程被堵塞住,都会把 OS 线程堵塞住。
1.9 下,每个 Ruby 线程 分别对应不同的 OS 线程,一个 Ruby 线程被堵塞住(这里的堵塞不是指被 GIL 堵塞,而是指被其他堵塞,如其他的资源锁,或是同步 IO 等),只堵塞住其对应的 OS 线程。 但是,GIL 可以看作是一个竞争资源的锁,这就使得 Ruby 线程 在获取这个 GIL 上变成了串行化。
不太靠谱的比喻: 就像一队人去上厕所,就一个茅坑,只能排队了。上完厕所之后的人,可以去打球,唱歌,灌酒..., 他们就各自活动了,其中有个人睡着了,其他人还继续玩自己的。然后又排队上厕所...
补充一下:有很多 gem 并没有考虑多线程的问题,尤其是一些 Native Gem。 《Unix 编程艺术》中,并不很提倡多线程编程,多进程 + 管道 是被推荐的。
#5 楼 @ryvius Ruby 的线程是 Native 线程,线程的调度是 OS 来实现的。但是呢,由于 GIL 的存在,同一时间只有获取了这个锁的线程在跑,也限制了有 GIL 的语言利用多核的能力。
有 GIL 的限制并不代表你不能进行一些异步(通常意义上的异步)的操作。因为 GIL 不会被某个线程一直持有,所以其他的线程都有运行的机会。只是利用不上多核的能力。就像以前,我们用单核 CPU 跑多线程程序类似。
再往下说,就和其他多线程编程一样了,Java 虽然没有 GIL,但是如果写的程序中,几个 Java 线程都对某个公共资源进行访问和修改,如果加锁进行保护,那么这几个线程也不能真正达到多核的利用。
#1 楼 @ryvius Ruby 不支持线程?? 你确定? http://ruby-doc.org/core-1.9.3/Thread.html
Ruby 从 1.9 开始就支持 Native 线程了。1.9 以前是绿色线程。
语言 PK 什么的,最没有意思了。
假设真有一门傲立语言之林的语言,也代表不了你(或我,或他)也能傲立于开发者之群 :( 还是看内功啊,咱们看不起的那些个语言,大牛们却在用它们写出 数个经典作品。
能说明一个人实力的,在外人看来,只能是他的作品。
嗯 好文章。 刚看标题时,我还在想为什么不用 mruby, 看完后了解到 你原来需要 Fiber . mruby 现在还没有 fiber, @matz 说过把 fiber 加入到 mruby 是很不错的,只是他现在没时间做这件事。
有一次是为了获取一个 ARM 平台的软件加密后的文件,懒的去分析软件的加解密算法了,最后直接用 Ruby 写了一个简易的 ARM 解释器,在 PC 上来解释执行它的解密算法,也成功获取了其所有的解密后的文件。不过这算不上项目,只是个工具。
@flea 变通的方法是 GAE 可以用 JRuby。
@zw963 Thx!赶紧更新 ;)
#2 楼 @yuwenhuisama 至于具体代码,与写 Native Gem 没啥区别。
因为你已经内嵌了 Ruby VM:
用 C++ 与 Ruby VM 交互,需要注意 析构函数 与 setjmp/longjmp 之间的恩恩怨怨。@night_song 曾有专文论述。
萌妹子!
对了,是用 鼠标 还是 数位板?对线条的控制太牛了!我现在还只能画些最基本的简单图形。
牛人!这是用 PS 还是 AI?