数日前からRubyを触るようになって、「ほげ言語のパラドックス」ってあるんだなと実感。
自分はPHPとEmacs LispとJavaScriptを触っていて、かつ好きなんだけれども、RubyにはあってPHP、Emacs Lisp、JavaScriptのどれにもないものとしてThreadがある。
例えば逆引きRubyのThreadの説明のこのコード
puts "Test start" puts "Create thread" t = Thread.new do puts "Start thread" sleep 3 puts "End thread" end puts "Waiting for the thread to complete" t.join puts "Test compleated"
Rubyistには普通のThreadの処理に見えるのだと思うし、Javaな人にも同じだと思う。
PHPerな自分にだってThreadが何を意味するかはわかる。
けれども、Threadの部分のソースコードの挙動が"ソースコードの見た目的に"どのように見えるかというと、なんと自分にはWhile文的挙動に見えてしまっていた。なんかループしているようなイメージ。
当然自分だけなのだろうけれど、自分のなかで「ほげ言語のパラドックス」を実感した瞬間だった。
なんというかイメージがつかみにくいんだよね、慣れ親しんだ言語にないものって。
あげくのはてに今日は複数Threadで同じ共有リソースをいじりまくって競合を発生させてた。
んでもってMutexの機能に感動。