質問

ある種のスクリプトを埋め込む必要があるc ++サーバー側プロジェクトがあります。オンラインMMOタイプのサーバーの一部です。 TCLの使用経験は豊富で、自然にフィットしているようです。私はゲーム開発の日に最小限のLuaを実行しましたが、これが組み込みスクリプトのより良い言語になるのではないかと思います。また、新しい言語を学ぶことは素晴らしいことです。 TCLとLuaの相対的な長所と短所は何ですか?ありがとう!

役に立ちましたか?

解決

正直なところ、どちらもタスクに非常に適しています。どちらもアプリケーションに簡単に組み込むことができ、構文はかなり単純です。 Tclで(アプリケーションとやり取りするために)新しいコマンドを追加するのは非常に簡単であるという事実を知っています。また、Luaはこのタイプのことも非常に得意だと言われています。

お勧めの方法は、Luaをしばらく試して自分の好みを確認することです(既にTclを知っているので)...そして、最も快適に感じるものを選択します。多くのコードを作成している場合は、多くのコードで作業することになりますので、使用できるものも必要になります。最終的に、両方の言語の選択は、エンドユーザーが非常に簡単にスクリプトを記述できるようにする必要があります。

Tclは、Luaが好きではない(Warcraftのアドオン用にかなりの量のプログラミングを行っている)ためと、Tclが大好きだ(そのために多くのプログラミングを行っているため)仕事でもプライベートでも)。

編集:両方のエンドユーザーにとって簡単であるというメモを追加しました。賛成2票を獲得し、私の声明のなぜ部分を明確にしないこと以外に何ができるのか考えられませんでした。

他のヒント

私はRHSeegerの反対だと思います。ゲーム(オンラインゲーム)に埋め込まれたLuaとTCLの両方を使用しましたが、選択があれば10フィートのバージポールでTCLに再び触れることはありません。私の非常に主観的な意見は、Luaは健全な言語であり、TCLはそうではないということです。スクリプト言語の他のオプションと比較して、TCL構文はほとんどの人にとって非常にわかりにくく、すべてのセットとexprおよびドル記号と多くの括弧などがあります。その部門。

このスクリプティングインターフェイスが純粋にあなたのためなら、Luaは新しいものを何も提供しないので(オブジェクトの向きがあなたのものでない限り)TCLを使うこともできます。熟練したユーザーの手の中にTCLは合理的なツールです。ただし、経験の浅いユーザーがシステムを使用することを期待している場合は、Luaを使用します。よりシンプルな構文で多くの生産性が得られます。

Tclには、途中で必要または便利なライブラリがさらに増えると思われます。

他の人が述べたように、両方の言語は非常にうまく機能します。同様に機能する可能性が高い3番目のオプションはJavaScriptです。これは、ほぼ同じニッチに収まるためです。どちらかをあなたにウーしようとする代わりに(私は両方の言語がとても好きなので)私は客観的な違いのいくつかに焦点を合わせ、一方が他方より先だと思う場所を指摘しようとします。

ゲームサーバーで最も重要な問題は、生のパフォーマンスです。どちらの言語も成熟しており、最適化されていますが、コンパイルされたコードに従うことでいくつかの問題が最適化されることも認識しています。両方の言語は、これを実行するために基本的に同じメカニズムを使用します。言語自体の観点から見ると、Luaの方が少し速いようです。 リンク

次の大きな要因であるライブラリの観点から、どちらの言語も有用なライブラリを使用する必要はありません。つまり、両方の言語が非常にコンパクトです。Javaなどの言語では、大規模なランタイムライブラリを使用する必要があります。繰り返しますが、これは元の設計要件の結果です。両方の言語には豊富なアドオンライブラリがありますが、少なくともこのカテゴリではTCLの方がいくぶんバラエティに富んでいると思います。 tcl :( Tcl拡張アーカイブ / Tcl拡張リポジトリ)lua:( LuaForge

もう1つの違いは、コア言語自体にあります。どちらの言語もスタイルよりもシンプルさを重視していますが、それが類似点の終わりです。 Luaは、ほとんどのプログラマーにとって馴染みのある構文を、非常に単純な文脈自由文法で使用します。 TCL構文も単純ですが、実際には他の既存の言語と共通点はありませんが、表面的にはUNIXシェル言語に少し似ています。 Tclは、行指向のコマンド構文が非常に明確であるため、おそらくプログラマー以外の方が簡単ですが、他の言語を経験したプログラマーは通常、難解な構文に反対します。どちらもコード生成に関してひどく寛容ではありませんが、どちらも強力なメタプログラミング機能を備えています(同等ですが、CLISPマクロほど堅牢ではありません)。

Lua C APIは非常に簡単にアプリケーションに統合できます。 Cから、Lua状態とそのネイティブデータ型に完全にアクセスできます。たとえば、スクリプトを作成しなくてもハッシュテーブルの実装を取得するためだけにLuaを使用することをお勧めします。

Cで記述されたLua関数は、グローバル名として注入したり、ほとんどの標準ライブラリ関数のようにテーブルに収集したり、DLLに実装して実行時に動的にロードしたりできます。これにより、アプリケーションは安定したAPIを提供し、LuaまたはCで記述されたプラグインをサポートできます。

Luaは言語として驚くほど強力で、機能的プログラミングスタイルとオブジェクト指向プログラミングスタイルの両方をサポートしています。また、驚くほど軽量です。完全なソースキットと完全なドキュメントは1 MB未満に収まり、DLL内のVM、コンパイラ、および標準ライブラリ全体はWindowsでわずか164KBです。

バージョン2以降、TCLを真剣に検討していません。具体的な方法で比較することはしません。私は、両方が同じニッチに適合するように、ほぼ同時に発明されたと信じています。どちらも確かに熱心なユーザーコミュニティを持つ成熟した言語です。

Luaには LuaJIT があります。これは、タイトループでCの速度に達するJITコンパイラであり、 Snabbスイッチ。パフォーマンスが重要です(Snabbは毎秒ギガビットを処理でき、すべてLuaJITで処理されます)。 LuaJITには、使いやすい FFI があり、Cスタブコードを記述せずにC関数にアクセスできます。

PUC-Lua(標準実装)は、メモリ不足からの回復をサポートしています。 LuaJITもTCLもありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top