コンテンツにスキップ

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++へ変換し、コンパイルして実行 必要
ターミナルウィンドウ
tekri check examples/sum.tkr

成功時は、入力ファイル名に続けてOKを表示します。

examples/sum.tkr: OK

生成物は保存せず、C++コンパイラも起動しません。構文・型の検査はできますが、入力内容に依存する桁あふれなどの実行時エラーは実際に実行したときに検査します。

出力先を省略すると標準出力へ、-oを付けると指定したファイルへ書き込みます。

ターミナルウィンドウ
tekri emit examples/sum.tkr
tekri emit examples/sum.tkr -o sum.cpp

出力は実行時の補助処理を含む、単独でコンパイルできるC++20ソースです。GCCまたはClangで直接ビルドする場合は、たとえば次のように実行します。

ターミナルウィンドウ
c++ -std=c++20 -O2 sum.cpp -o sum
printf '3\n10 20 30\n' | ./sum

emit -oは既存の出力ファイルを書き換えます。元の.tkrソースと同じファイルを出力先にする操作は拒否します。

ターミナルウィンドウ
tekri build examples/sum.tkr -o sum
printf '3\n10 20 30\n' | ./sum

この例では60を出力します。-oを省略した場合は入力ファイルの拡張子を除いたパスが出力先です。

ターミナルウィンドウ
tekri build examples/sum.tkr

この場合はexamples/sumが作成され、成功時にbuilt examples/sumと表示します。出力先の親ディレクトリは先に作成してください。

C++コンパイラには-std=c++20 -O2を渡します。コンパイルとリンクが成功してから出力先を置き換えるため、ビルドの失敗時は以前の実行ファイルを保持します。元の.tkrソースへの上書きは拒否します。

ターミナルウィンドウ
printf '84 30\n' | tekri run examples/gcd.tkr

生成したプログラムは、呼び出し元の標準入力・標準出力・標準エラー出力を引き継ぎます。上の例の出力は6です。引数や入力のないプログラムは、次のように実行できます。

ターミナルウィンドウ
tekri run examples/expressions.tkr

runは毎回コンパイルします。生成したC++と実行ファイルは一時ディレクトリへ置き、コマンドの終了時に削除します。繰り返し同じプログラムを実行する場合はbuildを使えます。

--以降の引数は生成した実行ファイルに渡せます。tekriにはコマンドライン引数を読む機能がないため、入力にはreadと標準入力を使います。

生成プログラムは通常のネイティブ実行ファイルとして動きます。CLI自体には実行時間やメモリの制限、実行の隔離機能はありません。

既定ではc++を起動します。環境変数CXXには、実行ファイル名または実行ファイルのパスを指定できます。

ターミナルウィンドウ
CXX=g++ tekri run examples/expressions.tkr
CXX=clang++ tekri build examples/sum.tkr -o sum
CXX=/usr/bin/clang++ tekri build examples/sum.tkr -o sum

CXXは1個の実行ファイルを表し、シェルのコマンド文字列としては解釈しません。CXX="clang++ -O3"のように引数を含める指定には対応していません。CLIは追加のC++コンパイラオプションを受け取りません。

対象はGCC / ClangのC++20対応コンパイラです。生成コードは標準ヘッダを使い、整数の桁あふれ検査にはGCC / Clangの組み込み関数を使います。

ターミナルウィンドウ
tekri --help
tekri --version

-h、-Vも使えます。引数なしでtekriを起動するとヘルプを表示します。

check・emit・buildは成功時に終了コード0を返します。ソースの検査、ファイル操作、C++コンパイルなどに失敗した場合は1です。runは通常、生成プログラムの終了コードを返します。

ソースの診断は元の.tkrのファイル名・行・列を示します。エラーの読み方は診断とエラーを参照してください。CLIの実装はsrc/main.rsにあります。