web-dev-qa-db-ja.com

C / FortranをJavaScriptと組み合わせるにはどうすればよいですか?

D3.jsのような柔軟なものでリアルタイムに視覚化するために重い数値計算が必要なプロジェクトに取り組んでいます。これを簡単に達成できるフレームワークはありますか?または、Pythonなどで記述された、ある種の「接着」コードを使用する必要がありますか?

6
pav3l

あなたが求めているのはC/FortranとJavascriptの間の相互運用です、相互運用は非常に多くの方法で行うことができますが、頭に浮かぶ最も一般的な2つは次のとおりです:

外部機能インターフェース(FFI)バインディングとプロセス間通信(IPC)。

FFIとは、合意された標準プロトコルがコンパイル時にアセンブリに組み込まれ、外国語によるアセンブリ機能へのアクセスを可能にする場所です。さまざまなFFI標準インターフェイスがありますが、インタープリター型言語とコンパイル済み言語とのインターフェイスを可能にするインターフェイスや、その逆のインターフェイスについてはよく知っています。スクリプトはプレーンテキストであり、インターフェイスするアセンブリがないため、この概念はインタープリターの使用に適合しません。

そうは言っても、インタープリターにはFFIアクセスのための機能があるかもしれません。 Node.JSは、おそらくFFIアクセスのための機能を備えたJavaScriptインタープリターとして思い浮かびます。あるいは、Cプログラムを使用して、ChromeのV8エンジンなどのJavaScriptインタープリターをホストし、CがJavaScriptを直接実行できるようにすることもできます。

プロセス間通信(IPC)では、1つの言語でプロセスを実行し、他の言語で他のプロセスを実行し、IPCの形式を使用して2つの言語間で通信します。一般に、これは共有メモリ空間を介して行われ、両方のプロセスがデータをそのメモリ空間に入れ、そこから読み取ってメッセージを送受信できます。 IOのコストのためにオーバーヘッドの高い手法ですが、同じ手法がファイルで使用されることもありますが、どちらかまたは両方のプロセスがクラッシュしたり、マシンが停電したりしても、耐久性があります。

IPCの共有メモリ技術には、いくつかの種類があります。

  • 親プロセスが子プロセスを呼び出し、「パイプ」を使用してメッセージを直接子プロセスに送信します。 Node.JSは他の言語と相互運用するためにこのテクニックを提案していると思います
  • カーネルに登録され、識別子によってアクセス可能なシステム全体の共有メモリ空間である名前付きパイプ

共有メモリまたはディスク以外に、広く使用されている他のIPC手法は、ネットワーク通信です。ブラウザがWebサイトにアクセスするときはいつでも、別のプロセスと通信しているため、これはIPCであり、このようにしてWebサービスはIPCを達成するための非常に一般的な方法になっています。直接TCPテクニックは、特定のタスクではUDPと同様に引き続き使用されますが、重要なのは、メモリスペースやディスクスペースと同様に、ネットワークがプロセス間の通信層として機能することです。

以上のことから、ブラウザで視覚化したいので、言語の相互運用手法としてIPCのWebサービスを使用することをお勧めします。

それで全部です。私はあなたが何かを学んだことを望みます:)

7
Jimmy Hoffa

[〜#〜] cgi [〜#〜] と記述して、HTTPサーバーとブラウザに残りの処理を行わせます。
後でさらにパフォーマンスが必要な場合は、 FastCGI に変換できます。

もしあなた(あなたの上司)が、重い運搬を行っているブラウザーがないように見えるようにすることに本当に必死であるなら、WebKitウィジェット(クロスプラットフォーム)を含めるか、MSIEフレームを埋め込む(オールラウンドでより簡単で高速ですが、 Windowsでのみ利用でき、MSIEバージョンで問題が発生する可能性があります)。

1
ZJR