最終更新: 2012-01-26T13:29+0900
Rubyに来たときは意識しなかったが、最近 Ruby側から C++を眺めたときにあまりの違いに恐れおののいたこと(限りあるスタックの使いすぎに注意しようね)。
# Ruby myobject = MyClass.new();
// C++ MyClass myobject; MyClass *pmyobject = &myobject;
Rubyでは MyClass.new()で MyClassのインスタンスを作り、それを後から参照するために myobjectという名札を貼り付けている。C++では MyClass myobject; だけで既にインスタンスが存在していて、名札を貼り付ける行為は二行目が相当する。Rubyには myobjectのようにオブジェクトそのものを表す変数は存在しない*⁑⁂。
書いてて思った。ポインタ(に近いもの。参照。C++の参照とは違うもの)はスクリプト言語では普通に使われている*4。Rubyでは C++の myobjectに相当するものがなく、全てのオブジェクトが一段遠くにあるから、C++でやるように (*pmyobject).hoge() や pmyobject->hoge() というようにポインタをデリファレンスする手間を省いて myobject.hoge() という書き方でメソッドを呼べるが、Rubyの myobjectは C++の、myobjectよりむしろポインタの pmyobjectに一番近い。
* Fixnumは例外。
⁑ これが Rubyに ++、--が存在しない理由かとも思ったが、C++で単項インクリメント/デクリメントをメンバ関数でオーバーロードできることを考えると Rubyでやっていけない理由がわからない。Rubyでも ++相当のメソッドを定義できるということだし、全てがオブジェクト(内部状態を持てる)であることを謳っている Rubyだからこそ制約なしにやっても構わないんじゃ。http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/5323。
⁂ いやいやいや、仮に ++/--というメッセージが追加されても Numericはイミュータブルだという理由で使えなければ 99%の利用場面が奪われる。これをなんとかすると ++が +=のシンタックスシュガーになったり、Fixnumがオブジェクトでない(=変数がオブジェクトへの参照でない)ことが露呈したり、a=b=1; ++b; で a が 2 になったりする。これは違う。
*4 C++の &のような、明示的にアドレスを取得する方法がないので、ポインタのポインタは存在しない。
Lならホームポジションなのに。Xなんて薬指!小指と中指とセットでしか曲げられない薬指!を曲げなきゃ押さえられないのに。
(書きながら検索した)
Macの入力で拗音を「L」で入力する方法。例えば、小さい「い」を「XI」ではなく「LI」で入力するようにするにはどうしたらいいでしょうか?.. - 人力検索はてな
なるほど。Macでは LIとタイプすると「り」になるのが普通、と。むしろ X方式は ATOKの独自仕様疑惑が浮上。
そういえば、PCをさわり始めた頃なら LIが「り」にならないのはおかしい、とか言っていたかも知れない。TIが「てぃ」にならないのはおかしい、と真剣に考えていたぐらいだから⁑。
http://homepage.mac.com/kosei.yamada/im_romaji.html
実際のところ単体で小さい文字を入力する事なんてまぁないから……といいつつ 、MALA NAIKARAとタイプしていた。こっ、これはたまたまなんだからっ、といいつつ(略
部屋を暗くして、ワイヤレスマウスをリモコンよろしく片手に持って、フルスクリーンで動画を再生しているときに、時刻が知りたくなったら……。明日の朝も起きないといけないし……。でも、
メッセンジャーボタンに割り当てて使用中。ケータイの時計を見ればいいってのは禁句。
win32/configure.batが生成する Makefileを編集して* ruby19.exeを作るようにしていると ruby-dev:34000 と同じところで止まっていたのでした。
MLのスレッドを読んで、RUBY_SUFFIXだけでなく RUBY_INSTALL_NAMEも反映して欲しいと思ったら、そのように変更されてコミットされていた。それは手元の Makefile.subと同じです。
* configure.batの引数として与える方が人手を介さない分、良さそう。1.8のときに prefixオプションが効かなくて Makefileの直編集に切り替えたのだった気がするが、1.9.0-1では効いていたと思う。(最初、いつも通りにしたら C:/Program Files (x86)/ruby/Program Files (x86)/rubyにインストールされたのは、prefix=と PREFIX=が両方有効だったからだと思う。)