10

願わくば、この質問が複雑すぎたり、あいまいすぎたりしないことを願っています。私は自分の頭の中で何が欲しいかを知っているので、指を交差させてテキストでこれを理解することができます.

独自仕様の構文を持つ言語を探しているので、自分で作成する必要があると思います。ここ数日、コンパイラ、レクサー、パーサー、アセンブリ言語、仮想マシンなどについて読んでいましたが、目標を達成するために必要なものに関してすべてを整理するのに苦労しています (ファイルの最後に添付されている一部仕様)。基本的に、先に進むために具体的にどのツールを使用する必要があるかについて、私はひどく混乱しています。

ちょっとした背景: 作成された言語は、マルチプレイヤーのテキストベースの MUD サーバーを実装するために使用されることを願っています。したがって、クライアントの TCP/IP 接続、ノンブロッキング IO、SQL などを介したデータベース アクセスを作成/維持するための簡単な組み込み機能が必要です。セキュリティにも関心があります。この言語用に書かれたコードが盗まれて、専門のソフトウェアを使わずに一般大衆に使われることを望まないからです。これはおそらく、オブジェクト コードにコンパイルする必要があることを意味します。

では、これらの仕様に適合する言語を作成するための最良のオプションは何ですか

私の結論は以下です。これは私の最善の知識に基づいた推測に過ぎないので、私が間違った方向に向かっていると思われる場合は、私に異議を唱えてください. 専門家がコメントをしに来たとき、私がどれほど混乱しているかを確認するために、これを含めているだけです.

  1. コードのセキュリティのために、コンパイルして仮想マシンで実行できる言語が必要です。こうなったら、めちゃめちゃ仕事が増えるじゃないですか。既存のモジュールを使用するのではなく、下位レベルで仮想マシン、アセンブラー言語を作成し、次に上位レベルでコードライブラリを作成して、IO、ソケットなどを自分で処理しますか?

  2. 私はただ混乱しています。

  3. 私が理にかなっているのかどうかはわかりません。

少しでも私の頭を落ち着かせてくれる方がいらっしゃいましたら、よろしくお願いします!または、私がコースから外れていて、これを行うためのより簡単な方法がある場合は、お知らせください!

4

6 に答える 6

10

ドメイン固有のカスタム プログラミング言語を設計することは、問題に対する正しいアプローチです。実際、ほとんどすべての問題は、DSL を使用した方が適切に対処できます。おそらくググりたい用語は:domain specific languageslanguage-oriented programming.

コンパイラの設計と実装は複雑な作業だと言う人もいます。それはまったく真実ではありません。コンパイラの実装は簡単なことです。利用可能な高品質のコンパイラが多数あり、独自の言語から別の言語、または他の言語の組み合わせへの単純な変換を定義するだけで済みます。パーサーが必要です。現在では、Antlr や自作の PEG ベースのパーサー ジェネレーターが大量にあるため、大したことではありません。言語のセマンティクスを定義する何かが必要です。最新の関数型プログラミング言語はこの分野で優れています。必要なのは、ADT とパターン マッチングをサポートするものだけです。ターゲット プラットフォームが必要です。多くの可能性があります: JVM と .NET、C、C++、LLVM、Common Lisp、Scheme、Python、その他テキスト文字列でできているものなら何でも。

独自の言語を構築するためのすぐに使用できるフレームワークがあります。文字通り、Common Lisp または Scheme の実装は、そのようなフレームワークとして使用できます。LLVM には、必要なものもすべて含まれています。.NET ツールボックスは問題ありません。多くのコード生成オプションが利用可能です。複雑なセマンティクスを持つ言語を構築するための、このような特殊なフレームワークがあります。

お好きな方法をお選びください。簡単です。想像以上に簡単です。

于 2011-04-20T12:37:14.950 に答える
3

標準的な問題と思われるものを解決するために独自の言語とツール チェーンを作成することは、間違った方法のように思えます。MUD を作成するのではなく、さらに別の言語を開発することになります。

多くのゲーム開発者は、スクリプト言語を使用して独自のゲーム世界を記述するというアプローチをとっています。

参照: https://stackoverflow.com/questions/356160/which-game-scripting-language-is-better-to-use-lua-or-pythonこの場合、既存の言語 (Pythong および LUA) を使用する場合- ゲームのスクリプト。

于 2011-04-20T12:13:11.247 に答える
3

あなたはコンパイラーやコンピューター言語の作成についてよく知らないので、そうではありません。上手い人は世界で5人くらい。

それでも試してみたい場合: 優れた汎用言語を作成するには、少なくとも 3 年はかかります。フルタイム。それは事業です。

代わりに、おそらく「カスタム」部分を除いて、ほとんどすべての問題をすでに解決している既存の言語のいずれかを試す必要があります。しかし、その言語はあなたが想像していたよりもうまく機能し、「カスタム」部分はまったく必要ないかもしれません。

次の 2 つのオプションがあります。

  1. Python、美しいスクリプト言語。VM は言語をバイト コードにコンパイルします。コンパイラで時間を無駄にする必要はありません。構文は非常に柔軟ですが、Python のすべてには十分な理由があるため、あまり柔軟ではありません。

  2. ジャバ。新しいXtext フレームワークを使用すると、数分で独自の言語を作成できます。それは、数分で良い言語を作成できるという意味ではありません。ただ言語。

Python には多くのライブラリが付属していますが、他に何か必要な場合は、すぐに空気が薄くなります。良い面としては、短時間で多くの優れたしっかりしたコードを書くことができます。通常、Python の 1 行は、Java の 10 行に相当します。

Java には多くの余計な機能はありませんが、文字通り何百万ものフレームワークがあり、イメージできることはすべて実行できます...そして、できないこともたくさんあります。

とはいえ、なぜ 1 つの言語に限定する必要があるのでしょうか。Jythonを使用すると、Java VM で Python ソースを実行できます。したがって、コア (Web サーバー、SQL など) を Java で記述し、柔軟な UI パーツ、冒険などを Python で記述できます。

于 2011-04-20T12:19:32.230 に答える
2

独自の小さな言語を本当に作成したい場合は、lexyaccなどのツールや同様のシステム ( ANTLRが一般的な代替手段です) を検討するのがより簡単で、多くの場合より迅速な解決策であり、既存の仮想マシンまたは簡単なものを自分で作る。

すべてを自分で作成することは、優れた学習体験であり、他の仮想マシンの舞台裏で何が行われているかを理解するのに役立ちます。

于 2011-11-15T13:02:57.233 に答える
0

プログラミング言語の設計と実装の概念を理解するための優れた情報源は、MIT Pressの Structure and Interpretation of Computer Programsです。言語を設計して実装したいと考えている人、またはより優れたプログラマーになりたいと考えている人にとっては、すばらしい読み物です。

于 2011-12-22T12:29:45.053 に答える