トップ «前の日記(2004-08-18 (Wed)) 最新 次の日記(2004-08-20 (Fri))» 編集   RSS 1.0 FEED  

Journal InTime


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みたいなセマンティクスじゃないのかなあ。

_ [mod_ruby] 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] 文法変更

実は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文。

しかし、迷うなあ、いろいろ。

本日のツッコミ(全1件) [ツッコミを入れる]
_ まつもと (2004-08-19 (Thu) 21:31)

"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は違うんじゃないかと思います。