2004-08-19 (Thu) [長年日記]
_ The Jolt Programming Language
その名も「Jolt」!
ハッカー御用達のカフェイン飲料Joltにちなんで名付けられたらしい。 ドメイン名もwww.jolt-lang.orgと、ちゃんと-lang.orgの伝統(?)にのっとっている。
この言語はC++をリプレースするのを目的とする、静的型のシステム言語なのだが、 文法が(静的型があることを除けば)Rubyそっくり。「end文法」だし。
[Matzにっき(2004-08-18)より引用]
がーん、と思って見てみたら、そんなにRubyそっくりというほどではないようだ。
まつもとさんは、
Rubyの特徴であったブロックもGroovyではなんかハック的な文法*1であったのに対して、 こちらのブロックはきちんとRubyとそっくりのセマンティックスになっている。「do〜end」と「{〜 }」の両方が使えるところまでRubyそっくり。
[Matzにっき(2004-08-18)より引用]
と書かれているが、メソッド定義側の
class Vector is ... proc binop(do op: proc(int32, int32: int32)): int32 is v: int32 := this[0] for i in 1 .. this.size - 1 v := op(v, this[i]) end return v end ... end
というのはちょっとRubyとは違うような。 これってGroovyみたいなセマンティクスじゃないのかなあ。
_ Apache::MethodDispatcher
外国人に、mod_rubyにmod_pythonのpublisherみたいなのはないか、と聞かれて作ってみた。 でも、
if !cls.public_instance_methods(false).include?(method_name) return FORBIDDEN end
というのはどうも今一つ。 やはりDecoratorか。
_ まつもとさんのツッコミ
"do"は"&"の置換であり、静的型言語なのでパラメータや戻り値の
型も指定されている、と読むんじゃないでしょうか。
[Journal InTime - The Jolt Programming Language , Apache::MethodDispatcherより引用]
なるほど、&
の方でしたか。
yield
の方を期待していたのですが、yieldの説明を見て、何か違うな、と。
_ 文法変更
実はbabelの方も文法を変更をしようかな、とか。
- 改行を文のセパレータに。thenも改行でいいかな。
- 引数がないメソッド呼び出しにも括弧を使用 (括弧がない場合はbound methodを返す)。
- x.fooはx.get_foo()、x.foo = yはx.set_foo(y)として扱う (Satherはそれぞれx.foo(), x.foo(y))。
- :=を=に、=を==に、::=は:=に変更。
- case insensitiveに。
- $は廃止。
outパラメータの廃止。代りに多値を導入。
divmod(x: int, y: int): int, int is return x.div(y), x.mod(y) end foo is a, b := divmod(38, 5) end
- 返り値の有無による多重定義の廃止。 返り値があるメソッド呼び出しも文に(dummy変数で受け取る必要なし)。
構文糖としてのfor文の導入。
for i, j in x.elt!, y.elt! do ... end
は、
loop i := x.elt! j := y.elt! end
と同じ。
- 同じく構文糖としてのwhile文。
しかし、迷うなあ、いろいろ。
"do"は"&"の置換であり、静的型言語なのでパラメータや戻り値の<br>型も指定されている、と読むんじゃないでしょうか。まあ、「そっ<br>くり」は言い過ぎかも。<br><br>セマンティックスですが、 <br><br> obj.inject(1) {|a,x| a+x}<br><br>が、実は<br><br> obj.inject(1, {|a,x| a+x})<br><br>という意味でしかないというGroovyとは、明確に暗黙の特別な引数<br>であるRubyやJoltは違うんじゃないかと思います。