16

現在取り組んでいるプロジェクトでは、スクリプトエンジンをC ++コードに埋め込んで、将来の拡張性を考慮しています。アプリケーションでは、かなりの量のテキスト処理と、これらのスクリプト内での正規表現の使用が必要になります。

Luaは、埋め込みスクリプトに関しては一般的に業界の最愛の人ですが、正規表現をサポートしていないことも知っています(少なくとも箱から出して)。これにより、Luaの背後で最高のサポートがあり、強力な正規表現機能を提供しているように見えるため、言語を埋め込むためにPythonに傾倒しています。

これは正しい選択ですか?私は別の言語を見るべきですか?Luaをもう一度見直す必要がある理由はありますか?

4

4 に答える 4

19

一般に「正規表現」(まったく正規表現ではない)として知られているものが特に必要な場合は、次の2つの選択肢があります。

  1. Pythonを使用します。含まれている正規表現はPerlやsed/grepと十分に似ています
  2. Luaと外部PCREライブラリを使用する

一方、適切なパターンマッチングが必要な場合は、Luaを使用して、次のいずれかを実行できます。

  1. Luaに含まれているパターンマッチングを使用します。これはgrepの伝統には含まれていませんが、非常に優れています。不足している機能はサブパターンの選択肢です(|)
  2. LPEGを使用します。これは、正規表現よりもはるかに強力で、通常は高速です。

お分かりのように、私は最後の大ファンです。非常に複雑で決定論的なパターンを定義できるだけでなく、パーサー全体を作成するために使用できる完全な文法ツールです。必要に応じて、文法を単一の複数行の文字列定数で記述し、データをキャプチャして構造を構築するための独自のフックを定義できます。

これを使用して、JSONパーサー、C呼び出しツリー、xPathライブラリなどをすばやくハックしました。

于 2010-09-22T22:39:13.303 に答える
7

PythonとC++の統合は、boost.pythonで大いに役立ちます。C ++ソースに精通している人が主にスクリプトを書いている人であれば、これははるかに便利です。

スクリプターが特定のソースに精通していなくても、Cのような構文(C、C ++など)に精通している場合は、Pythonの方が使いやすいはずです。おそらくほんの少しだけですが、Luaは難しくありません。優れたプログラマーはとにかく多数の言語を使用できますが、あなたはあなたの聴衆についての情報を何も与えていません。

LuaはPythonよりもサンドボックス化がはるかに簡単であるため、スクリプトで実行できることを制限する必要がある場合(たとえば、追加のプロセスを生成したり、ファイルを読み取ったり)、Pythonが除外される可能性があります。

于 2010-09-22T22:54:05.377 に答える
5

私自身のCプロジェクトの1つにLuaを組み込んだので、Luaを提案します。これは簡単だからです。

しかし、それはあなたのスクリプト言語が何ができる必要があるかに依存します。Luaは、ゲームの事実上のスクリプト言語になりました。高度なスクリプト機能が必要な場合はPythonを使用できますが、スクリプトを簡単にサポートするためだけの場合は、Luaを使用してください。私が見たところ、Luaは、スクリプトに慣れていない初心者の方が簡単に習得できます。

Luaは軽量で、外部パッケージが必要な場合は追加できますが、要点は、Luaのアトミック部分はPythonのアトミック部分よりもはるかに小さいということです。

于 2010-09-22T23:35:17.193 に答える
4

それらすべての祖父を忘れないでください-tcl

埋め込みを非常に簡単にするtcl用のc++ラッパーがあります

現在のプロジェクトで使用しています

以前の(c#)プロジェクトでは、Pythonではなくluaを使用しました。古いc#プロジェクトでは、Pythonを使用していました。構文が平均的なスクリプター(vbscriptまたはjavascriptに使用される)にとってより正常であるため、luaを選択しました。ただし、次のc#プロジェクトでは(iron)pythonに戻します。luaはあまりにもあいまいです

C ++の場合、これからは常にtclを使用します

編集:私の新しいお気に入りは、jint(.net javascripttインタープリター)v使いやすく、優れたインターフェイスです。そして、jsが現時点でクールな言語であることを考えると、誰もその言語について文句を言うことはできません

于 2010-09-22T22:38:24.913 に答える