2

アプリ (ゲームではない) のスクリプトを作成する必要がありますが、スクリプト言語の選択に問題があります。Lua は問題ないように見えますが (実際、私のタスクには理想的です)、使用される Unicode 文字列に問題があります。また、Python も考えましたが、構文が気に入らず、Dll が大きすぎます (約 2.5 Mib)。Pythonやその他の言語には、必要のない関数、バッテリー、モジュールが多すぎます(I / O関数など)-スクリプトはロジックを実装するだけで、他のすべてはアプリを実行します。したがって、この条件を満たすスクリプト言語があるかどうかを知りたいです。

  • ユニコード文字列
  • C++ 関数をインポートして、スクリプトから呼び出すことができます
  • 問題なくアプリ(DLLなし)に埋め込むことができます

車輪の再発明は良い考えではないので、自分の言語を開発したくありません。または、Lua のソースに Unicode 文字列を記述する方法はありますか? C++ L"Unicode 文字列" のように

4

5 に答える 5

7

Lua 文字列はエンコーディングに依存しません。つまり、Lua スクリプトで Unicode 文字列を記述できます。パターン マッチングが必要な場合、標準の Lua 文字列ライブラリは Unicode クラスをサポートしていません。ただし、単純な部分文字列検索は機能します。

于 2012-04-21T19:45:43.437 に答える
5

「ユニコード文字列」のようなものは実際にはありません。文字列は、何でも含むことができる一連のバイトです。ただし、文字列内のデータのエンコーディングを知ることは重要です。

私は Lua をUTF-8 文字列で使用しています。これは、気になるすべての操作で機能します。Unicode 文字列ライブラリは使用しませんが、Lua ( ICU4Luaslnunicodeなど) で使用できます。

Lua で UTF-8 文字列を使用する場合の注意事項:

  • 文字列の長さ (# 演算子) は、文字やコードポイントではなく、文字列の長さをバイト単位で返します (非 ASCII 文字は、複数バイトのシーケンスである場合があります)。
  • 文字列分割 (string.sub など) は、UTF-8 シーケンスを分割してはなりません。
  • 文字列の一致 (string.find、string.match) は、ASCII パターンで問題なく機能します。
  • 部分文字列検索 ('plain' モードの string.find など) は、UTF-8 を針または干し草の山として使用します。

UTF-8 でのコードポイントのカウントは、他のエンコーディングよりもわずかに効率的ではありませんが、非常に簡単です。たとえば、Lua では次のようになります。

function utf8_length(str)
        return select(2, string.gsub(str, "[^\128-\193]", ""));
end

これ以上のことが必要な場合は、前述の Unicode ライブラリが、エンコーディング間の変換を含むすべての API を提供します。

個人的には、特定のフレーバーの Unicode を強制する言語 (Javascript など) や、言語に複数のエンコーディングを組み込むことによって賢くしようとする言語 (Python など) に対して、この単純なアプローチを好みます。私の経験では、それらは頭痛とパフォーマンスのボトルネックを引き起こすだけです。

いずれにせよ、すべての開発者は、Unicode がどのように機能するかについての基本的な理解と、アプリケーションでの Unicode の処理方法について最良の選択を行うことができるように、さまざまなエンコーディング間の原則の違いを理解する必要があると思います。

たとえば、アプリケーション内のすべての既存の文字列がワイド文字エンコーディングである場合、Lua を使用するのはあまり便利ではありません。Lua に出入りするすべての文字列に変換を追加する必要があるからです。これは完全に可能ですが、アプリが (ゲームのように) CPU バウンドである可能性がある場合は、パフォーマンスの点でマイナスになります。

于 2012-04-22T14:44:41.943 に答える
1

JavaScript を見てください。V8 エンジンは非常に強力で、JavaScript には大きな stdlib が付属していません。それに加えて、簡単に埋め込むことができ、私が知っていることから、ユニコードをうまく処理します。

于 2012-04-21T19:27:42.593 に答える
0

ジムTclを見てください。小さく、簡単に埋め込みおよび拡張可能で、UTF-8文字列をサポートし、非常に強力です。

于 2012-04-23T19:23:54.957 に答える
0

をご覧くださいIo

それはずっとユニコードであり、埋め込み可能です。また、いくつかのC++ バインディング ライブラリを提供しているようです。

于 2012-04-22T10:13:25.577 に答える