だから私は現在、新しいプログラミング言語に取り組んでいます。並行プログラミングと Haskell から着想を得たこの言語の主な目標の 1 つは、副作用の管理です。多かれ少なかれ、各モジュールは許可する副作用を指定する必要があります。したがって、ゲームを作成する場合、グラフィック モジュールには IO を実行する機能がありません。入力モジュールには、画面に描画する機能がありません。AI モジュールは完全に純粋である必要があります。ゲームのスクリプトとプラグインは、構成ファイルを読み取るために非常に制限された IO のサブセットにアクセスできます。など。
ただし、何が副作用を構成するかは明確ではありません。このテーマについて、自分の言語で検討したい考えや提案を探しています。ここに私の現在の考えがあります。
いくつかの副作用は露骨です。ユーザーのコンソールへの出力であろうと、ミサイルの発射であろうと、ユーザーが所有するファイルの読み取りまたは書き込み、または外部ハードウェアとのやり取りを行うアクションはすべて副作用です。
他のものはより微妙で、これらは私が本当に興味を持っているものです。これらは、乱数の取得、システム時間の取得、スレッドのスリープ、ソフトウェア トランザクション メモリの実装、またはメモリの割り当てなどの非常に基本的なものなどです。
副作用を制御するために構築された他の言語 (Haskell を見てください) とは異なり、私は自分の言語を実用的で実用的なものに設計したいと考えています。副作用に対する制限は、次の 2 つの目的に役立つはずです。
- 関心の分離を支援するため。(1 つのモジュールですべてを実行できるわけではありません)。
- アプリケーション内の各モジュールをサンドボックス化します。(任意のモジュールをプラグインとして使用できます)
それを念頭に置いて、上で述べたように、乱数や睡眠などの「疑似」副作用をどのように処理すればよいでしょうか? 他に何を見逃したでしょうか?リソースとしてのメモリ使用量と時間をどのように管理すればよいでしょうか?