Rubyist Magazine 0008 号
『るびま』は、Ruby に関する技術記事はもちろんのこと、Rubyist へのインタビューやエッセイ、その他をお届けするウェブ雑誌です。
目次
巻頭言
書いた人:るびま編集長 高橋征義
編集長からの 0008 号発行の挨拶です。(難易度:高)
Rubyist Hotlinks 【第 8 回】 田中哲さん
Rubyist へのインタビュー企画。今回は Ruby のコミッタとして精力的に活動をされている、産総研の田中哲さんにお話を伺いました。(難易度:高)
Rubyist のための他言語探訪 【第 1 回】 Python
書いた人:まつもとゆきひろ
普段 Ruby 使ってるけど、他の言語もいろいろ見てみたい、という人のために、なんとまつもとさんが Ruby 以外の言語の紹介をしてくれる新連載です。
最初は Python。まさに隣の芝生ですが、やっぱり青いんですかね。(難易度:低)
RubyOnRails を使ってみる 【第 4 回】 ActionPack
書いた人:moriq
最近流行りのウェブアプリケーションフレームワーク、 RubyOnRails の紹介です。今回は ActionPack のおさらい、次期リリースについて、Ajax など、いろいろです。これで夏休みもばっちり。(難易度:お金のにおい?)
Ruby Library Report 【第 6 回】 正規表現と構文解析
書いた人:立石 孝彰
Ruby を利用する開発者を対象読者とし、ライブラリや開発ツールを紹介していくこの連載。6 回目は、直接テキストデータやバイナリデータの処理コードを書くよりも、もっとわかりやすく書くためのツールやライブラリを紹介します。(難易度:高)
標準添付ライブラリ紹介 【第 2 回】 Logger
書いた人:西山
Ruby をインストールすると、最初からいろいろなライブラリが使えます。この連載では、そのいろんなライブラリを紹介していきます。
第 2 回は少し大きなプログラムにはたいてい必要になるロガーについて解説します。(難易度:低)
Win32OLE 活用法 【第 6 回】 Web 自動巡回
書いた人:cuzic
Win32OLE の利用方法を紹介する連載の第 6 回。今回は IE を操ってウェブの自動巡回をする方法を紹介します。Ajax などを利用したサイトの巡回は、Ruby だけではなかなかうまくいきませんが、IE を自動制御することでそれを可能にしています。(難易度:中)
YARV Maniacs 【第 3 回】 命令ディスパッチの高速化
書いた人:ささだ
YARV: Yet Another RubyVM の解説記事になる予定の記事です。たぶん。今回は命令ディスパッチの高速化手法について解説します。今回の記事は、Ruby の処理系というよりは、インタプリタ一般の話です。(難易度:コンパイラの細かい挙動の違いが難しい)
第 4 回 Ruby 勉強会@関西 レポート
書いた人:けんご
7 月 9 日に行われた「第 4 回 Ruby 勉強会@関西」の報告です。(難易度:関西は遠い)
RubyNews
Ruby 関連、または Rubyist が興味を持ちそうなニュースを集めてみました。(難易度:低)
RubyEventCheck
Ruby 関連、または Rubyist が興味を持ちそうな、近日中に開催予定のイベントの紹介です。(難易度:低)
編集後記
おねがい
記事へのご意見、ご感想や、「こんな記事が読みたい」、「あの人の記事が読みたい」、といったご希望などがありましたら、下記フォームを利用してお気軽にお寄せください。トラックバックも受け付けております (下記参照)。
記事の投稿も随時受け付けております。
- Ruby に関する技術記事・解説記事
- Ruby 活用事例
- Ruby がちょっとでも絡むエッセイ
- Ruby に関するその他
などを募集しております。何かネタがありましたらご連絡ください。 また、編集に参加したいというお申し出も大歓迎です。
連絡先:るびま編集部
ご意見募集 お気軽にどうぞ (頂いたご意見はこのページに公開されます)
今号へのご意見募集は終了しました。
Rubyist Hotlinks 【第 8 回】 - 小迫 (2005-07-20 (水) 22:21:40)
以下の部分が理解できなかったので教えてください。
笹田 いや selector namespace ってやりたいことっていうのは
田中 ああ、たとえばjcode.rbは嫌だよねっていう話があります。 これは、jcode を使いたくないのに、誰かが require した とたんに、問答無用で jcode のメソッドが使われてしまうこと ですよね。 でも、selector namespace があれば、jcode を使ってるところ では jcode のメソッドを使って、使ってないところでは元のが 呼び出せるからとくに問題ない。
この部分の前後の文脈から考えると、これはMixJuiceについての 話だと思います。 でもMixJuiceでは、メソッドの呼出し側がどのmoduleに属して いるかによって、呼び出されるものが変わるということは無いと 理解していたのですが。(original()は別として)
- 2005-07-21 (木) 12:55:20 akr :
MixJuice では呼び出し側のモジュールから見えるものしか呼べません。見えるものというのはモジュールの extends 節で推移的にたどれるモジュールで定義されたものです。
したがって、見えるものが異なるところでは同じ名前でも違うものが呼び出されることがあります。
module str {
define class Str {
define Str() {}
}
}
module byte_str extends str {
class Str {
define int length() {
return 0;
}
}
}
module char_str extends str {
class Str {
define int length() {
return 1;
}
}
}
module lib1 {
define class C {
define C() {}
define abstract void meth();
}
}
module lib1.imp extends lib1, byte_str {
class C {
void meth() { System.out.println((new Str()).length()); }
}
}
module lib2 {
define class D {
define D() {}
define abstract void meth();
}
}
module lib2.imp extends lib2, char_str {
class D {
void meth() { System.out.println((new Str()).length()); }
}
}
module app extends lib1, lib2 {
class SS {
void main(String[] args) {
(new C()).meth();
(new D()).meth();
}
}
}
module main extends app, lib1.imp, lib2.imp {
}
という例では、Str に length がふたつ (byte_str で定義されたものと char_str で定義されたもの) あり、 lib1.imp では byte_str の定義、lib2.imp では char_str の定義を呼び出しています。
- 2005-07-21 (木) 21:28:23 小迫 : わかりました。ありがとうございます。module strの中でdefine abstract int length();を宣言する書き方のときには、動作も変わるわけですね。
- 2005-07-22 (金) 01:54:57 akr : 一応指摘しておくと、変わるには変わりますが、それだけではエラーです。たとえば str::length と byte_str::length が両方見えるのにもかかわらず、length とだけ書くと曖昧だからです。なお、byte_str の length の定義が str の length の override にならないのは define とつけてあるからです。MixJuice では明示的に新しいメソッドの定義と override のどちらなのかを define の有無で明示的に指定するので、同名のメソッドが見えるところに追加されたからといって、新しい定義だったものが override に変わったりはしません。
- 2005-07-22 (金) 20:53:34 小迫 : はい。byte_strとchar_strの中のdefineを削らないとエラーになるのは承知しています。ところで、元のプログラムで、byte_strとchar_strの中で定義するlength()の型が、必ず一致している保障がないというのが不安になるのですが、そういうものなんでしょうか?Strクラスを利用するmodule側が、必要に応じてbyte_strかchar_strをextendsするという使い方だとおもうんですが。
- 2005-07-25 (月) 10:59:53 akr : 使ったほうにしたがって静的に型検査が行われるのでいいんじゃないでしょうか。また、length の場合には型が一致しますが、byte と char で型が違うことは十分にあり得ますし、一致を期待するのは適切ではないと思います。
- 2005-07-26 (火) 22:15:32 小迫 : 一致しなくてよいメソッドは、一致しなくてもよいことを宣言するのが良いと思います(ドキュメント的な役割)。最初のプログラムでは、同じ名前で独立したメソッドlengthを用意することが目的だったのですから、それをmodule strの中で宣言してあるほうが分かり易いと思います。super moduleの中でsub moduleに関することを一切仮定したくない場面では、何も書かないというのでいいです。
- 2005-07-30 (土) 19:51:35 akr : 型はわからないけれど length という名前のメソッドは存在するということなら、ドキュメントやコメントで書けばいいんじゃないでしょうか。コンパイラで役立てられるのであれば言語機構にいれるのもいいと思うのですが。
なっぼ - ym (2005-07-20 (水) 13:53:59)
hotlinks面白かったです。またの次回なかださん楽しみです。 一点Typoだとおもうのですが
使いやすさについて (2) 笹田 反省点っていうのはやっぱり使えるものを作ってなっぼだよなっていう話?
は、なんぼの間違いではないでしょうか。
- 2005-07-21 (木) 13:13:06 卜部 : 修正しました。ご指摘ありがとうございます。
YARV Maniacs 【第 3 回】 命令ディスパッチの高速化 - noni (2005-07-20 (水) 13:09:33)
>もしくは次に述べるものと比較してインダイレクトスレッデッドコードと言います。
これはトークンスレッデッドではないでしょうか?
- 2005-07-20 (水) 13:58:24 ささだ : おっしゃるとおりです。訂正いたしました。ところで、じゃぁ indirect threade code とは、ってのを見ても、よく利点がわかりませんでした。何がうれしいんだろう。
- 2005-07-20 (水) 14:02:55 ささだ : 目的はスペースの効率利用、か。
Rubyist のための他言語探訪 - 葉加瀬聡美 (2005-07-20 (水) 01:39:36)
「リスト閉包式/ジェネレータ閉包式」の説明にある > 1 から 9 までの数 は > 0 から 9 までの数 ではないでしょうか?
- 2005-07-20 (水) 09:34:23 なかむら : 修正しました。ご指摘ありがとうございます。
文字列 - KM (2005-07-19 (火) 23:06:54)
「文字列が一方の端を持っているなら、もう片方の端も持っているに違いない」 /usr/share/games/fortune/fortunes の中に %
Miksch's Law:
If a string has one end, then it has another end.
% というエントリがありました
この資料によると,紙版の Murphy's law にあるもようです http://www.derebus.org.za/archives/2001Sep/articles/fineline.htm
手元に無いので確認できないのですが,アスキーの「マーフィーの法則」 http://www.ascii.co.jp/books/detail/4-7561/4-7561-0326-X.html は,上記資料中の I-III の内容を全部取り込んでいたと思うので, このなかに見付かるかもしれないです
RubyGtk の記事が読みたい! l国際化の記事が読みたい! - えとー (2005-07-19 (火) 22:29:55)
Ruby gtk2の記事が読みたいです。(できれば連載で、、) 一身上の都合により。
国際化回りの記事が読みたいです。 ubyだったら日本語平気だ〜。というのはよく聞く話ですが、国際化の話は日本語平気だ〜と比べると少ないので、なんで国際化しないといけないのか、とかからの記事があれば是非読んでみたいです。ruby と日本語でハマるポイントというのも面白いかなぁとか思いました。

References:[るびま] [SideMenu] [各号目次]