24

これはより広い範囲の質問ですが、java/php/c などでコードを記述し、コードをオンラインで実行してコンパイルするための質問を人々に与えることができる、私の会社のオンライン テスト コードを書きたいと考えています。codeacademy、Udacity などのサイトでこれが起こっているのを見てきました。その背後にあるアーキテクチャを理解したいだけです。Googleで同様の行に沿って多くの検索を行いましたが、具体的な答えを見つけることができませんでした. あちこちの断片を読んだ後、コードがサーバー上のコンパイラに送信され、結果が返されることを理解しました。それがどのように起こるのか正確にはわかりません。誰かが私にその出発点を教えてもらえますか。

4

2 に答える 2

8

Web アーキテクチャに適用される MVC パターンによると、基本的には次のようなものがあります。

  • ユーザーが何らかのコードを挿入できるようにするクライアント側の Web アプリケーション。初期の構文チェックに Javascript を利用する可能性があります。
  • 挿入されたコードをクライアントからの入力として受け取るサーバー エンドポイント

一連の操作は次のようになります。

  1. サーバー側では、入力は対象のプログラミング言語 (Java クラスや C モジュールなど) に適した構造に変換されます。
  2. より多くのコンテキストが定義されている可能性があります (クラスパスなど)。
  3. 次に、言語がコンパイルされると、コンパイラが呼び出されます (javac や gcc など)。これは、C の exec や Java の Runtime.getRuntime().exec など、いくつかの方法で発生する可能性があります。それ以外の場合は、コードをサーバーにデプロイするか、一部のシミュレーターを実行してコードを渡すことができます。
  4. 続いて、コードが実行され、出力がインターセプトされます (たとえば、コンソール出力をファイルに送信するか、この例のようにターゲット言語インフラストラクチャを利用するだけです)。実行は、コマンド ライン (java など) または他のツール (クライアント ブラウザーがアクセスするため、展開された php コードを実行するための curl など) を介して行うことができます。
  5. サーバーの最後のステップは、傍受した出力を HTML などの読み取り可能な形式でクライアントに送り返すことです。別の方法として、Java を使用している場合は、基本的なアーキテクチャを変更しないAppletを使用できます。

ただし、より一般的に言えば、ポイントはコンパイラとインタープリタがベース ソフトウェアであるということです。これらは、オペレーティング システムのみで簡単に生活できる一般ユーザー向けではありません。したがって、私の知る限りでは、「オンライン コンパイル」は「コードを投稿し、サーバー上で実行させ、答えを視覚化する」こととは別のものです。オンライン コンパイルは、コンパイルの責任をネットワーク全体に分散することを意味します。

于 2014-09-22T06:28:19.363 に答える
2

会社でdomjudgeを使用し、必要に応じてカスタマイズしました。

PHPコードは非常によく書かれています。非常にモジュール化されており、要件に合わせて簡単に調整できます。

于 2014-09-22T06:26:40.087 に答える