序言#
最近、私は starknet と cairo 言語に夢中になって勉強していました。学習の過程でいくつかのメモを取ったので、ここで共有します。
Cairo プログラムの実行フロー#
Cairo では、プログラムの実行フローは以下の手順で概括できます:
- Cairo のソースコードを書く:プログラマーは Cairo プログラミング言語を使ってプログラムのソースコードを書きます。
- ソースコードをコンパイルする:cairo-compile コマンドを使って Cairo のソースコードをバイトコードの等価形式にコンパイルします。
- バイトコードをロードする:Cairo Runner を使ってバイトコードをロードし、実行可能な命令のシーケンスに変換します。
- 命令のシーケンスを実行する:命令のシーケンスの順序に従って各命令を実行し、各命令のフラグに基づいて実行する操作と次の状態を決定します。
- 結果を出力する:プログラムの実行が完了したら、結果を出力してプログラムを終了します。
このフローでは、確定性と非確定性の両方が広く適用されます。一部の命令は確定性を持ち、その振る舞いは入力と規則だけで完全に予測できます。他の命令は非確定性を持ち、異なる結果を生み出す可能性があり、すべての可能な結果を正しく処理するために注意が必要です。
要するに、Cairo ではプログラマーがソースコードを書き、cairo-compile コマンドを使ってバイトコードにコンパイルします。そして、Cairo Runner を使ってバイトコードをロードし、実行し、結果を出力します。このプロセスでは、確定性と非確定性がさまざまな種類の問題やアルゴリズムに広く適用されます。
Cairo Runner とは#
Cairo Runner は、コンパイルされた Cairo プログラムを実行するためのコンピュータープログラムです。Cairo では、プログラムの実行は通常のコンピュータープログラムの実行とは異なります。これは主に、Cairo が非確定性のコードを許可するためです。したがって、Cairo Runner はこの非確定性をサポートし、Cairo プログラムを正しく実行できる必要があります。
さらに、Cairo Runner は再配置可能なメモリセグメントの概念をサポートしており、Cairo の非確定性を利用して連続性の要件を緩和します。再配置可能なメモリセグメントは、データと命令を格納するための連続したメモリ領域であり、実行時に異なる位置に移動することができます。これにより、Cairo は動的なメモリ割り当てやガベージコレクションなどの問題をより良く処理できます。
確定性と非確定性の違い#
コンピュータ科学では、確定性と非確定性は 2 つの重要な概念です。Cairo でも、これらの概念は重要です。
確定性は、システムやプロセスの振る舞いが完全に入力と規則によって予測できることを指します。つまり、同じ入力と規則が与えられた場合、システムやプロセスは常に同じ出力を生成します。Cairo では、確定性のコードは 1 つの可能な操作シーケンスしか実行できず、実行ごとに同じ結果が得られます。
非確定性は、システムやプロセスの振る舞いが完全に入力と規則によって予測できないことを指します。つまり、同じ入力と規則が与えられた場合でも、システムやプロセスは異なる出力を生成する可能性があります。Cairo では、非確定性のコードは複数の可能な操作シーケンスを実行し、実行ごとに異なる結果が得られる可能性があります。
Cairo では、非確定性のコードを使用してランダム数生成や検索アルゴリズムなどの問題を解決することができます。ただし、非確定性のコードを使用する際には注意が必要で、すべての可能な結果を正しく処理する必要があります。
Cairo での確定性と非確定性の違いについての詳細は、PDF ファイルの 28 ページで確認できます。
Cairo での確定性と非確定性の利用方法#
Cairo では、確定性と非確定性の両方が広く利用されています。Cairo の命令セットには、加算、減算、乗算などの確定性の操作を実行するための命令が含まれています。これらの命令の振る舞いは完全に入力と規則によって予測でき、実行ごとに同じ結果が得られます。
一方、Cairo にはランダム数生成や検索アルゴリズムなどの非確定性の操作を実行するための命令も含まれています。これらの命令の振る舞いは完全に入力と規則によって予測できず、実行ごとに異なる結果が得られる可能性があります。
非確定性のコードを使用する際には注意が必要で、すべての可能な結果を正しく処理する必要があります。このような非確定性をサポートするために、Cairo Runner は再配置可能なメモリセグメントを正しく処理し、ガベージコレクションなどの機能をサポートする必要があります。
要するに、Cairo では確定性と非確定性の両方が重要な概念であり、さまざまな種類の問題やアルゴリズムに広く適用されています。
Cairo での確定性と非確定性の利用方法の詳細については、PDF ファイルの 28 ページで確認できます。