2012-01-27 14 views
6

標準のプラットフォームに依存しないCまたはC++で書かれた拡張可能なインタプリタ型プログラミング言語はありますか?標準CまたはC++で書かれたインタプリタ

すべてのソースを1つのディレクトリに置くことができ、ソースを標準準拠のCまたはC++コンパイラでコンパイルし、指定されたスクリプト言語でスクリプトファイルを読み込んで解釈する実行可能ファイルを生成できます。

"Cで書かれた"多くのプログラミング言語には、プラットフォームに依存する多くの機能が組み込まれているようですが、その結果、問題を複雑にするターゲットシステム(Autoconfなど)プラットフォーム間の互換性が制限されています。質問の

理由:

私は、プログラミング言語の設計についての学習に興味を持っています。 yacc、lex、llvmのチュートリアルに続いて、いくつかのおもちゃのプログラミング言語で遊んだことがあります。しかし、最近私は、移植可能なC/C++で書かれたプログラミング言語を研究することに興味を持ってきました。そのようにして、標準のCまたはC++コンパイラをサポートしているマシンでプログラムとコードを研究できます。合理的に一様な経験をしています。

これは単なる教育的な目的のためであり、スクリプト言語はCのような超低レベルの機能をサポートする必要はなく、JavaのようなGUIも備えている必要はありません(私はあなたがどんな種類のGUIとにかく標準的なC/C++に制限されている)か、それとも複雑なものであれ。しかし、私は、言語を使っていくつかの有用なプログラムを書くことが現実的であるように、言語を完全にしたいと考えています(例えば、C/C++を使って言語を拡張して、tty上のシェルのように使うことができるはずです) 。

ありがとうございました。

編集:

André[email protected]少なくとも、言語のコアが100%のプラットフォームに依存しなかった場合、私はそれを好むだろう。言語が他のライブラリに依存する大きな標準ライブラリが含まれていれば "もっと便利"になりますが、標準ライブラリを削除して、言語のコアだけを使用したいと考えています(カスタム手書きの図書館)を探していました。

+0

これは[プログラマー](http://programmers.stackexchange.com)サイトにとっては本当に良い質問です。 –

+2

これはどのような話題ですか? [Programmers.SE excluded topics](http://programmers.stackexchange.com/faq)にしっかり収まるようです。 –

+0

「ソースをソースツリーに埋め込む」というのは、実際にiOSプラットフォーム外のプロジェクトにライブラリを組み込む一般的な方法ではありません。 Cを使用する場合は、「サードパーティのライブラリを使用する」と「オートツールを扱う」を追加することを検討してください。 – millimoose

答えて

9

embedded Lua

実際にはcore Luaそのものがおそらく良いでしょう。一見、私は多くの異なるシステム上で動作するというeLuaの主張は、それが非常に移植性が高いことを意味しましたが、実際にはコアLuaをとり、明らかに移植性が低いハードウェアドライバを追加します。

Ocamlが別の優れた選択肢になります。それは、"The bytecoded system currently runs on any POSIX-compliant operating system with an ANSI-compliant C compiler"を要求し、Caml Lightは特に学習に適しています。 "ランタイムシステムとバイトコードインタープリタは標準Cで書かれているため、Caml Lightはほとんどの32または64ビットプラットフォームに移植するのが簡単です。"

+0

悲しいことに、 http://www.eluaproject.net/doc/master/en_building.htmlから: "** eLua **には非常に柔軟なビルドシステム[...]があります。これを使用するには、単一の設定ファイルを編集する必要があります プラットフォーム固有のディレクトリ(* src/platform//platform_conf.h*)にある "* platform_conf.h * – ruakh

+4

これは完璧ではありませんが、プラットフォームに依存しないプラットフォームのようなものはないと思います。もし存在すれば、すべてのプラットフォームが一貫していて、クロスプラットフォームの問題はまったくないでしょう。すべてがプラットフォームから独立しているだけです。 Luaの価値は、必要な変更が少なく、1つのファイルだけで、_code_プラットフォームを独立させるための作業をすでに完了しているということです。私の理解は、通訳者ではなくビルドの調整だけです。 – Matt

+0

@Matt:私は、C(とC++)のランタイムライブラリは(ほとんど)すべてのプラットフォームの違いを抽象化していると考えています。しかし、C標準のAPIでは、ファイル名のようなプラットフォーム固有のデータをアプリが使用する必要があります。 –

6

Luaです。コアのLuaインタプリタは、あなたが得ることができるほどの最小限のものです。ディストリビューションにはメイクファイルが含まれていますが、それはまるでベアボーンのようです。コア言語だけを構築するために必要なファイルについては、Luaの標準ライブラリとコマンドラインインタプリタのどれであるかについての説明もあります。

コア言語自体は、プラットフォーム固有のAPIまたはヘッダーには触れません。標準ライブラリはありますが、最小限の方法でしかできません。そして、あなたが気に入らなければにはがありません。

ビルドの設定にはいくつかの#defineがありますが、それは主にDLLビルドなどです。

注:autotoolsおよびその他のプラットフォーム固有のビルド構成ユーティリティの目的は、ライブラリがプラットフォーム固有のものを有効にラップすることです。にはプラットフォームに依存しないインタフェースが使用されます。純粋なプラットフォームに依存しないCまたはC++標準ライブラリを使用して、ほとんどのプラットフォームで行うことはできません。ディレクトリツリーにアクセスしたり、ファイルを検索したりすることはできません。ウィンドウを開くなど、本当に便利なことはもちろんです。単純なstdin/stdoutアプリケーションの場合は、それで十分でしょう。しかし、大多数の場合、そうではありません。

私は、特定のプラットフォーム用にビルドを構成する必要があることを示唆しています。あなたのドメインが科学的なアプリケーションでなければ(そして場合によってはそうでなくても)、プラットフォームに依存しないプログラミングは大したものではありません。あなたはこれらの種類のライブラリを扱うことを学ばなければなりません。

Luaは、ライブラリーの場合、outlierです。ほとんどのライブラリは、あなたがディレクトリに押し込んでwilly-nillyをコンパイルできるファイルのリストではありません。ライブラリが使用するツールを使って作業する方法をすぐに理解すればするほど、より良い結果が得られます。

0

LUAとTCLは最も単純な2つの解釈言語であるため、両方のソースコードのコピーを入手して調べます。しかし、あなたの質問は静的リンクと共有リンクの関係に関連していると思います。静的にリンクされたプログラムは、カーネルインタフェースを超えたシステム依存関係はありませんが、動的にリンクされたプログラムは、インストールされる正しい共有ライブラリのセットを必要とします。

Pythonのような言語では、Python独自のライブラリ(モジュールと呼ばれる)とモジュールが依存するバイナリ共有ライブラリを心配する必要があります。 Python自体は通常、共有ライブラリを使用して構築されますが、it can be built staticallyです。さらに、独自のフォルダ階層にPythonバイナリthat uses the Linux shared library RUNPATH feature so that all binary dependencies can be bundled with Pythonをビルドしました。

もしあなたの質問がリンクされているなら、StaticPythonが標準の動的Pythonに比べてビルドされ、PybuildがRUNPATHを使用してスクリプトをビルドする方法を見てみましょう。

0

ほとんどすべての最近のスクリプト言語がCまたはC++で書かれています:などのPerl、bashのは、cshの、PHP、HTML、Javascriptを、作る、VIM、TCLを、など

それらを構築するコンフィギュレーションを必要とするという事実通訳の特徴ではないので、複数のプラットフォームで構築するための適応です。—通常はといいます。

新しい機能を作成する関数を書くことができるという意味で、これらはすべて拡張可能です。

関連する問題