■
早速コンパイルして使ってみた。
コンパイル時に躓いたのは、外部ライブラリと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より)