http://www.prothon.org/

早速コンパイルして使ってみた。
コンパイル時に躓いたのは、外部ライブラリとGCCのバージョン

  • ApachePortableRuntime library
  • BoostRegex library
  • GCC3 (古いバージョンではC99に対応していなかった)

configureでは(未だ?)チェックされないみたいなので注意。

 #!/usr/bin/env prothon

 print "Hello, world"
 Point = Object()
 with Point:
    .x = 0
    .y = 0
    def .move(x, y)
        .x += x
        .y += y

 p = Point()
 p.move(10, 20)
 print p.x, p.y # 10 20

 # 動的にプロトタイプの部分を変更できる。
 Point.move(50, 50)

 p = Point()
 print p.x, p.y # 50 50

 # q は pのプロトタイプ
 q = p()
 print q.x, q.y # 50 50


Pythonとの違い

  • ブロックを表すインデントはタブのみ。
  • コメントは、C言語の /* ... */ と行コメント #
  • 関数名の末尾に ! があるものは、破壊的代入を行なう。
  • 数字は . で終るとは限らない。7.chr()の様な記述も可能。
  • Int型整数の割算は // (Float型は / らしいけどエラー)
  • <>はサポートされていない。!=を代わりに使う。
  • 文字列連結演算子の + は、オブジェクトを文字列に変換する。for は generator をターゲットにとる。すべてのオブジェクトはgeneratorを定義できる。int 型の数値の場合、for i in 7: は python の for i in range(7): と同じ振舞をする。
  • ループにはラベルを付ける事が出来る。
  • class キーワードはない。with キーワードを使う。
  • 組み込みの関数(__builtins__)を持たない。
  • 値を返さない関数は self を返す。
  • 大文字で始まる変数名はグローバルになる。

小文字で始まる変数名はローカル、.で始まるものは self に属する。


TODO

  • ラベル付きループのネストでsegmentation fault
  • リスト/ハッシュのイテレーションは?
  • gen キーワードの使い方は?
  • dir() や help() 等の inspection 機能は未実装。(MLより)