CLI
tekriには、検査・C++生成・ビルド・実行の4つのコマンドがあります。インストール前は、以下のtekriを./target/release/tekriに読み替えてください。
| コマンド | 動作 | C++コンパイラ |
|---|---|---|
tekri check FILE.tkr |
構文、名前、型を検査 | 不要 |
tekri emit FILE.tkr [-o FILE.cpp] |
検査してC++20ソースを生成 | 不要 |
tekri build FILE.tkr [-o EXECUTABLE] |
C++へ変換し、実行ファイルを作成 | 必要 |
tekri run FILE.tkr [-- PROGRAM_ARGS...] |
C++へ変換し、コンパイルして実行 | 必要 |
check — 検査する
Section titled “check — 検査する”tekri check examples/sum.tkr成功時は、入力ファイル名に続けてOKを表示します。
examples/sum.tkr: OK生成物は保存せず、C++コンパイラも起動しません。構文・型の検査はできますが、入力内容に依存する桁あふれなどの実行時エラーは実際に実行したときに検査します。
emit — C++を出力する
Section titled “emit — C++を出力する”出力先を省略すると標準出力へ、-oを付けると指定したファイルへ書き込みます。
tekri emit examples/sum.tkrtekri emit examples/sum.tkr -o sum.cpp出力は実行時の補助処理を含む、単独でコンパイルできるC++20ソースです。GCCまたはClangで直接ビルドする場合は、たとえば次のように実行します。
c++ -std=c++20 -O2 sum.cpp -o sumprintf '3\n10 20 30\n' | ./sumemit -oは既存の出力ファイルを書き換えます。元の.tkrソースと同じファイルを出力先にする操作は拒否します。
build — 実行ファイルを作る
Section titled “build — 実行ファイルを作る”tekri build examples/sum.tkr -o sumprintf '3\n10 20 30\n' | ./sumこの例では60を出力します。-oを省略した場合は入力ファイルの拡張子を除いたパスが出力先です。
tekri build examples/sum.tkrこの場合はexamples/sumが作成され、成功時にbuilt examples/sumと表示します。出力先の親ディレクトリは先に作成してください。
C++コンパイラには-std=c++20 -O2を渡します。コンパイルとリンクが成功してから出力先を置き換えるため、ビルドの失敗時は以前の実行ファイルを保持します。元の.tkrソースへの上書きは拒否します。
run — 変換して実行する
Section titled “run — 変換して実行する”printf '84 30\n' | tekri run examples/gcd.tkr生成したプログラムは、呼び出し元の標準入力・標準出力・標準エラー出力を引き継ぎます。上の例の出力は6です。引数や入力のないプログラムは、次のように実行できます。
tekri run examples/expressions.tkrrunは毎回コンパイルします。生成したC++と実行ファイルは一時ディレクトリへ置き、コマンドの終了時に削除します。繰り返し同じプログラムを実行する場合はbuildを使えます。
--以降の引数は生成した実行ファイルに渡せます。tekriにはコマンドライン引数を読む機能がないため、入力にはreadと標準入力を使います。
生成プログラムは通常のネイティブ実行ファイルとして動きます。CLI自体には実行時間やメモリの制限、実行の隔離機能はありません。
C++コンパイラを選ぶ
Section titled “C++コンパイラを選ぶ”既定ではc++を起動します。環境変数CXXには、実行ファイル名または実行ファイルのパスを指定できます。
CXX=g++ tekri run examples/expressions.tkrCXX=clang++ tekri build examples/sum.tkr -o sumCXX=/usr/bin/clang++ tekri build examples/sum.tkr -o sumCXXは1個の実行ファイルを表し、シェルのコマンド文字列としては解釈しません。CXX="clang++ -O3"のように引数を含める指定には対応していません。CLIは追加のC++コンパイラオプションを受け取りません。
対象はGCC / ClangのC++20対応コンパイラです。生成コードは標準ヘッダを使い、整数の桁あふれ検査にはGCC / Clangの組み込み関数を使います。
ヘルプ、版、終了コード
Section titled “ヘルプ、版、終了コード”tekri --helptekri --version-h、-Vも使えます。引数なしでtekriを起動するとヘルプを表示します。
check・emit・buildは成功時に終了コード0を返します。ソースの検査、ファイル操作、C++コンパイルなどに失敗した場合は1です。runは通常、生成プログラムの終了コードを返します。
ソースの診断は元の.tkrのファイル名・行・列を示します。エラーの読み方は診断とエラーを参照してください。CLIの実装はsrc/main.rsにあります。