DSP上でLinuxを実行している組み込みシステムで作業しています。次に、その一部をスクリプト化できるようにしたいので、埋め込み可能なスクリプティング言語を探しています。これらのスクリプトは、既存のC++コードベースとうまく統合され、小さくて高速でなければなりません。
Luaは、このような問題に対する業界の選択肢であることを理解しています。 Luaは、実証済みで安定していることが証明されているなどの理由で、おそらくLuaを使用します。ただし、プログラミング言語としては、ちょっと変わったコーナーがあります。
それでは、埋め込み可能な言語にはどのような選択肢がありますか?
編集:
これは約1年後です。
実際に組み込みシステムでLuaを使用しましたが、非常に優れたパフォーマンスを発揮します。時間が経つにつれて、プロジェクトのますます多くの部分にますますスクリプトのサポートが追加され、それが本当にそれを実現するのに役立ちました。
パフォーマンスは本当に素晴らしいです。長い配列の検索や派手な文字列操作を含むかなり複雑な操作でも、驚くほどうまく機能します。基本的に、Luaに関連するパフォーマンスの問題はまったく発生しませんでした。
C関数とのインターフェイスは非常に簡単で、非常にうまく機能します。これにより、スクリプトシステムを簡単に成長させることができました。
最後に、Luaの柔軟性の高さに驚かされました。 Luaインタープリターは、非標準のメモリアロケーターを備え、doubleデータ型をサポートしていないシステムで実行する必要があります。 Luaをそのシステムで動作させるために修正しなければならなかった1つのヘッダーファイルに、よく文書化された2つの場所があります。埋め込みに本当に適しています!
「組み込みシステム」、「小さくて速い」、「うまく統合する」と言うので、Luaが唯一の選択肢ではないにしてもナンバーワンであることは正しいと思います。しかし、プログラミング言語に「風変わりなコーナー」があることに同意しなくなりました。まず、Luaのプログラミングという本は、私が今まで読んだ中で最高の本の1つです。第二に、「風変わりなコーナー」の一部は、言語が非常に直交的でクリーンであるという事実に由来するものであり、長期的には欠点ではなく資産です。たとえば、JavaScriptの方がずっと悪いと思います。 「Javascript the good parts」を読んだ場合、著者は言語の一部の構造が設計ミスである理由と、new演算子を避けるべき理由を詳細に説明します。 Luaではそうではありませんが、不良な部分は削除されています。たとえば、バージョン5.xでは、風変わりな価値の高いものが標準の構文スコープに置き換えられました。
私の見解では、Luaは他のほとんどの言語よりもはるかに少ない風変わりなコーナーを持つ言語です!私たちは商用プロジェクトでそれを使用しており、私たちはそれで満足しています。
ユースケースにはLuaを心からお勧めします。ただし、 Forth は、特にリソースに制約のある組み込みデバイスの場合の代替手段であり、まだ言及されていません。
LISPは常に存在します。 :)しかし、それはLuaが実際にほとんどの言語よりも「風変わり」ではないという事実を強調しています。非プログラマ向けに設計されており、擬似コードのように読み取ります。明確で統一されたセマンティクス(レキシカルスコープを持つファーストクラスのネストされた関数、複数の割り当て、複数の戻り値、クリーンなコンストラクター構文を備えた単一の柔軟なデータ構造化メカニズムなど)により、学習、読み取り、書き込みなどが非常に簡単になります。また、予想外に強力で表現力豊かです(適切なテールコール、継続、メタプログラミングなど)。
Luaの唯一の本当に「風変わりな」側面は、配列のインデックスが1であるということと、他のすべての人(~=
のではなく !=
、--
のではなく //
など)、しかし、これらはほとんどCのような言語に慣れているプログラマーの目を通して風変わりです。
別の選択肢としては、Squirrelがあります。これはLuaに触発され、同様の目標を持っていますが、Cのような構文です。私はそれを使っていないので、それが目標を満たしているかよくわかりません。
要件(小さなフットプリント、小さな癖、C++との統合)について、考えられる唯一のオプションは Common LISP です。
この他のSO質問 の一部の人々は、Cと統合するために [〜#〜] cffi [〜#〜] を推奨しています。
しかし、もしあなたがどこにいれば、私はルアに固執します。
Tclは組み込み言語になるようにゼロから設計されており、数十年前から使用されています。さらに、拡張性に優れているため、ドメイン固有の言語の開発に最適です。
DSPの世界についてはあまり知りませんが、「dsp lua」と「dsp tcl」をGoogleで検索すると、Tclのヒット数が2倍になります。
Python を検討しましたか? Nice extending and embedding guide が利用可能です。 Boost を使用している場合、 Boost Python はC++とPythonの間のシームレスな統合のためのライブラリです。
私は、Luaがこのような問題に対する業界の選択肢であることを理解しています
大胆な主張!すでにLinuxを実行している場合は、選択肢を広く選択することをお勧めします。 Linux自体は決して組み込みシステムの「産業選択」ではありません。 「産業」はそれよりもはるかに細分化されています。
Forthは、パフォーマンス、サイズ、OS(またはOSなし)に関係なく、事実上すべてのシステムに実装可能な言語です。おそらく最もファッショナブルな言語ではありませんが、簡単に実装および拡張できます。
別の候補は ch である可能性があります。これは埋め込み可能なC/C++インタープリターであるため、コンパイルおよびスクリプト化されたコードに同じ言語を使用できます。