この質問へのコメントでの議論の派生物として。副作用と難治性機能の関係についてお聞きしたいと思います。具体的には:
1)ook / brainfuckを使用してGPUにアクセスできますか(グラフィックスの副作用を引き起こしますか)?
2)空白を使用してシステムコールを発信できますか?
3)本質的には、チューリング完全言語を使用してすべての一般的な副作用を引き起こすことができますか?
4)ボーナス質問:可能であれば、実用的な例/コードへのリンクを提供できますか?
この質問へのコメントでの議論の派生物として。副作用と難治性機能の関係についてお聞きしたいと思います。具体的には:
1)ook / brainfuckを使用してGPUにアクセスできますか(グラフィックスの副作用を引き起こしますか)?
2)空白を使用してシステムコールを発信できますか?
3)本質的には、チューリング完全言語を使用してすべての一般的な副作用を引き起こすことができますか?
4)ボーナス質問:可能であれば、実用的な例/コードへのリンクを提供できますか?
bmargulies のコメントは、一般的な質問に関して的確です。技術的にチューリング完全とは、その言語を使用して単一テープのチューリング マシンをシミュレートできることを意味します。実際には、チューリング完全言語 Y でチューリング完全言語 X 上の任意の計算をシミュレートできることを意味します。しかし、あなたが話していることはすべて計算ではなく、システム インターフェイスです。特定のシステムで特定のことを行うには、インターフェースが必要です。これらの言語は汎用インターフェースを提供しません。以下で説明するように、これらはいくつかのシステム コールを提供します。
弱いアナロジーを使用しましょう。スペースシャトルを考えてみましょう。スペース シャトル内のすべての計算は iPhone で行うことができます (タイムリーな方法ではない可能性があります)。しかし、実際にロケットを発射してブースターを切り離すには、専用のシステムが必要です。「右舷ロケットを 10 秒間発射してください!」のような宇宙飛行士への指示を出力する iPhone 用のアプリを作成できます。その方向にスペースシャトルを飛ばします。しかし、スペース シャトルのドックに iPhone を差し込むだけではダメでした。
したがって、ご想像のとおり、すべての質問に対する答えはそれぞれ次のとおりです。
空白は解釈された言語であり、この言語はコンソールへの文字の読み書き以外にシステム統合を提供しません。(また、元の質問に従って C プログラムに簡単に統合できる従来のアセンブリ コードも生成しません。システム コールを使用して、C プログラムからインタープリターを実行し、出力をプロセスに返す必要があります。言語とインタープリターはオープン ソースであるため、技術的には、インタープリターを介して一般的な OS 呼び出しをサポートするように言語を変更できます。
Brainfuck は実際にコンパイルされるので、理論的には、生意気な場合は他のプログラムに簡単に組み込むことができます。空白と同様に、文字の読み書きのみをサポートします。完全なシステム コールをサポートするように Brainfuck を変更することは興味深い (そしておそらく論文に値する) でしょう。
これがコンパイラのソースです。それを持っている:
それが役立つことを願っています!
ook /brainfuck / whitespaceなどのプログラムの出力をgpuにアクセスする/システムコールを作成する/コーヒーを淹れるなどのコマンドとして解釈するラッパーをいつでも作成できます。
しかし、いいえ、ブレインファックでこれらのことを行う組み込みのメカニズムはありません。あなたが言及した他の言語にもメカニズムがあるとは思いません。「チューリング完全」であるということは、その言語が理論上、通常のコンピューターが計算できるものなら何でも計算できるということです。グラフィックスの描画、サウンドの再生、コーヒーの淹れ方など、コンピューターが実行できる可能性のある非計算処理を実行するためのメカニズムが、言語によって必ずしも提供されるわけではありません。