## Culebra ソースファイルの拡張子は`.cul`。manifestもパッケージマネージャも無く、 標準ライブラリは`import`なしで全て見えている。 ```bash culebra prog.cul # 実行(バイトコードVMのexecutor) culebra --jit prog.cul # 同じ出力、そのバイトコードをLLVMへ降ろす culebra test # cwd 以下の test_*.cul を実行 culebra fmt -i . # その場で整形(スタイル設定は無い) culebra lint . # 静的検査 ``` **APIは推測せず引く。** 特に、確かめるまでもないと感じるものほど。 `sort`・`take`・`items`・`length`のように、どの言語にもある名前こそ、 誤った推測が最も確信を伴い、最も気づかれない。リファレンス一式は バイナリの中にあるので、実行しているビルドと必ず一致する: ```bash culebra docs -g 'Math.wrap' # 一致したセクションを表示 culebra docs -g '' >/dev/null # 一致が無ければ exit 1 culebra docs stdlib Scene # 名前空間の章をまるごと表示 ``` 終了コードはgrepと同じで、`0`は何か表示した、`1`は一致なし。 `-g`が見つけられない署名は存在しない。 **culebraを書く前に`culebra docs quick-guide`を読む。** プロンプトに収まる 1ファイルで、構文・言われなくても手が伸びる範囲の署名・他言語から 持ち込めない習慣の一覧が入っている。その一覧がどういう内容かの一例: ```culebra # !! TypeError 'ab' * 3 ``` 状態を持つ仕組み — `Scene`、`Canvas`、`Net`、`PEG`、`CodeGen`など — は quick-guideでは名前だけを挙げてある。使う前にその章を表示して読むこと。 署名だけでは、どの順で呼ぶのか、結果は誰のものかが分からない。 **書いたものは実行する。** 未定義の名前はプログラム開始前に弾かれるが、 この検査が見るのは名前だけでメンバーは見ない。`Math.abss(1)`や `xs.len()`は`culebra lint`を通り、その行が走った時に失敗する。 存在しないプロパティはエラーではなく`nil`になる。