回答:
TL; DR:Luaにはオーバーヘッドがありますが、適切に使用すれば無視でき、簡単に軽減できます。重い演算やジオメトリの変換には使用しないでください。GUIのスクリプトを作成するためにそれを使用しても、パフォーマンスの問題はまったく見られないでしょう。
ゲームスクリプト言語としてのLuaのパフォーマンスに関するいくつかの基本的なベンチマークを実行しましたが、それはかなり速いです。LuaJITをゲームエンジンにバインドするためにtolua ++を使用して、2,000のアクターを生成しました。各アクターは、すべてのゲームループを呼び出すLuaスクリプトによって制御されます(時間デルタ引数を使用)。俳優の半分は群がった台本を持っていて、残りの半分は一種のランダムウォークをしていた(そして群れによって避けられた)。
レンダリングコンポーネントをオフにすると、Opteron 170で毎秒400ティックを少し超える速度が得られました(2x2.0GHz、エンジンは当時はシングルスレッドでした)。私が掘り下げて最適化した場合、それよりもかなり多くを圧迫できたと思います。おそらく、重い作業の一部をC ++に戻しました。2000人の俳優を毎秒400回更新することは、それでもかなり印象的で、当時の私の期待をはるかに超えていました。
現在、すべてのプロジェクトでLuaを使用しており、実際には実際のゲームコード(AI、GUIレイアウト/ロジック、イベント/メッセージ)のかなりの部分を占めています。何かをすばやく変更してテストし、終了、再コンパイル、および再初期化する必要がない場合、ゲームを作成することははるかに楽しくなります。私は時々いくつかのパフォーマンスの問題に遭遇しましたが、問題のあるコードをC ++に再実装することで簡単に解決できます(そしてLuaから呼び出します)。
EVE Onlineのサーバーはやや話題から外れていますが、ほぼ完全にStackless Pythonで記述されています(それらの演算のほとんどはC ++ libに委ねられています)。これはLuaよりもかなり重いです。ベンチマーク、LuaJITよりもはるかに低いパフォーマンス。彼らは何も問題なく30k以上の同時プレイヤーを処理することに成功しました。確かに、これらすべてを実行する高価なハードウェアがたくさんありますが、コストの大部分はデータベースクラスターにあると思います...
テキストの壁の謝罪。