1

私は、多くのオブジェクトとデータを処理するプログラムに取り組んでいます。アプリケーションにある種の「API」を持たせることで、操作を注入できるようになります。アプリケーション自体がオブジェクトの管理などを行っているため、これをどのように実装できるのだろうか。たとえば、Unity3D および Panda3D エンジンでは、スクリプト用の ECMA や Python など、さまざまな言語を使用できます。私は「ゲーム用」のスクリプト言語を探しているわけではありませんが、さまざまなスクリプト言語をサポートする方法についての指針を探しています。

議論のために、私のプログラムにクラス Cube のオブジェクトがあるとしましょう。立方体には、回転、移動、変換などのクラス メソッドと、色、中心、サイズなどのプロパティがあります。ここで、ユーザーが JavaScript などを使用してオブジェクトを操作できるようにしたいと考えています。しかし、私の「コア」プログラムは Ruby で書かれています。

  1. ユーザー コードとその構文 (独自のバージョンの JavaScript を実装するため) を評価するパッケージ全体をゼロから作成する必要がありますか? または、既存のパッケージ、スケルトン、フレームワーク、gem などはありますか?
  2. 操作が許可されているクラス (たとえば、クラスを「操作可能」とマークする属性) にのみスクリプト言語を提供するセキュリティを実装するにはどうすればよいでしょうか。

エンタープライズ アプリケーションがどのようにこのトリックを行ったのか (そしてゲーム エンジンも...) 常に疑問に思っていたので、ヘルプとフィードバックに感謝します。

4

2 に答える 2

3

コア プログラムが Ruby で記述されている場合、Ruby 以外でスクリプトを記述したい理由がわかりません (サンドボックス (以下を参照) を除いて)。

ユーザー コードとその構文 (独自のバージョンの JavaScript を実装するため) を評価するパッケージ全体をゼロから作成する必要がありますか?

いいえ。プログラムに組み込むことができるパッケージは多数あります。プログラムが C で書かれている場合、または C インターフェースを提供している場合でも、決定は簡単です。プログラミング言語Luaは、ほとんど手間をかけずに C プログラムに組み込むように設計されています。私は少なくとも数十回それをしました。

操作が許可されているクラス (たとえば、クラスを「操作可能」とマークする属性) にのみスクリプト言語を提供するには、セキュリティをどのように実装しますか?

これを行うには、スクリプトに表示される名前のコレクションを設定します。プログラミング言語の担当者として、環境(名前へのアクセスに関する専門用語)を制御していると言えます。たとえば、Lua の場合、各ユーザーのスクリプトに、ユーザーに持たせたい機能を正確に指定できる環境を渡します。スクリプトが名前を付けることができない場合、使用できません。この仕事は一般にサンドボックス化と呼ばれています。(「ユーザーをサンドボックスに入れて外に出さないでください。」のように) 名前空間の制御によるサンドボックス化は、Lua 以外の他の言語では一般的です。

私はいつも、エンタープライズ アプリケーションがこのトリックをどのように行ったのか疑問に思っていました (そしてゲーム エンジンも...)。

このトリックを簡単に要約して、SOの回答にする方法がわかりません。しかし、一般的な考え方は次のとおりです。

  • スクリプト言語にはバイトコード インタープリターがあります。

  • スクリプトと C の間で呼び出すための慎重に設計されたプロトコルがあります。

詳細については、Roberto の著書Programming in Luaをお読みください。以前の版はオンラインで無料です。

于 2010-06-22T14:25:56.183 に答える
1

あなたの要件に完全に従っているかどうかはわかりませんが、RESTfulなアプローチのようなものがうまくいきますか? REST は通常、クライアント/サーバーの用語で考えられていますが、いくつかのアイデアはここでも適用できると思います。

基本的な概念は、API を介して (おそらく JSON または XML で) オブジェクトの表現を公開することです。クライアントはこれらの表現を取得し、必要な変更を加えてから、変更したバージョンをプログラムに送信します。プログラムは変更を検証し、(合法であると仮定して) 適用します。

これにより、使用されているスクリプト言語の種類にとらわれず、柔軟性があり、ユーザーにとって理解しやすく、セキュリティ ポリシーを実装するための明確な場所が得られるように思えます。

ちなみに、これがスクリプト可能なゲーム エンジンの仕組みかどうかはわかりませんが、これに似た API を公開しているエンタープライズ システムをいくつか見てきました (ただし、通常はユーザーが作成したスクリプトを受け入れるのではなく、Web サービスとして)。

于 2010-06-22T14:24:06.123 に答える