簡體   English   中英

什么是很好的腳本語言可以集成到高性能應用程序中?

[英]What is a good scripting language to integrate into high-performance applications?

我是游戲開發人員,現在正在為我們公司編寫跨平台,多線程引擎。 可以說,游戲引擎中最強大的工具之一就是它的腳本系統,因此我正在尋找一種新的腳本語言來集成到我們的引擎中(目前使用的是相對基本的內部引擎)。

所需腳本系統的主要功能(按重要性順序)是:

  • 性能 - 必須快速調用和更新腳本
  • 跨平台 - 需要相對容易地移植到多個平台(不介意一點工作,但只需要幾天時間移植到每個平台)
  • 離線編譯 - 能夠脫機預解析腳本代碼幾乎是必不可少的(有助於文件大小和加載時間)
  • 能夠與c ++很好地集成 - 應該能夠支持語言中的OO代碼,並將此功能與c ++集成
  • 多線程 - 不是必需的,但是需要的。 最好能夠在不會相互干擾的多個線程上運行它的單獨實例(即底層代碼中沒有需要在運行時更改的全局變量)。 基於Critical Section和Mutex的解決方案無需適用。

到目前為止,我已經積累了使用Lua,Squirrel(OO語言,基於Lua)並編寫了一個ActionScript 2虛擬機的經驗。

那么,您建議哪種腳本系統符合上述標准? (如果可能的話,您是否也可以發布或鏈接到您可能擁有的其他腳本語言的任何比較)

謝謝,格蘭特

由於Blizzard-Activision將其作為開發魔獸世界加載項的主要平台,Lua的優勢在於受到眾多知名視頻游戲開發人員和知識淵博的開發人員的良好基礎的時間考驗。

Lua多年來一直用於視頻游戲行業。 輕巧高效。

話雖這么說, ChaiScriptFalcon是很好的候選人, 可以滿足您的需求和比Lua更高級別的語言,但歷史和社區支持較少。

Lua非常適合您的需求。 我會以同樣的順序接受它們。

Lua是最快的腳本語言之一。 編譯速度快,運行速度快。

Lua在任何具有ANSI C編譯器的平台上編譯,其中afaik包括所有游戲平台。

Lua可以預編譯,但作為一種非常動態的語言,大多數錯誤只能在運行時檢測到。 預編譯代碼(作為字節碼)在大小方面通常比源代碼更大。

有許多Lua / C ++綁定工具。

它不支持多線程(您不能從多個線程訪問解釋器的單個實例),但是您可以擁有多個解釋器實例,每個線程一個實例,甚至每個游戲對象一個實例。

到目前為止,我們已經和Squirrel好運了。 Lua非常受歡迎,正在成為一個標准。

我建議你更關心內存而不是速度。 大多數腳本語言都“足夠快”,如果它們變慢,你總是可以將一些功能推回到C ++中。 但是,它們中的許多都會耗費大量內存,並且在控制台內存上比CPU時間更加稀缺。 無限的內存消耗最終會讓你崩潰,如果你只需要為解釋器分配4MB,那就像必須從窗口拋出30個紋理來騰出空間。

Lua ,然后是LuaJIT,因為額外的喧囂!

只是不要期望自動C ++綁定庫太多,大多數都是緩慢和限制性的。 最好為自己的對象做自己的綁定。

至於並發,可以是LuaLanes ,也可以自己滾動。 如果您的C ++程序已經是多線程的,只需從每個線程調用單獨的LuaStates,並在需要時使用您自己的C ++共享結構作為通信通道。

正如您可能已經知道的那樣,Lua中最經常重復的答案是“滾動自己”,這通常是最好的建議! 除非它是關於綁定到常見的C / C ++庫,在這種情況下,它很可能已經存在。

如果你還沒看過,我建議你查看Angelscript

我已經在跨平台環境(僅使用重新編譯的Windows和Linux)中成功使用它,它可以很好地與C ++(對象和代碼)集成。

它是輕量級的並且支持多線程(在問題被提出的意義上),表現良好並且編譯為可以提前完成的字節代碼。

Python開始。

如果你能證明你需要更快的速度,那么看看Stackless Python 這就是EVE Online用於游戲的內容。

JavaScript可能是一個合理的選擇,因為大量的努力已經用於優化在Web瀏覽器中使用的各種實現。

想到這些:

  • LUA
  • 使用boost :: python的Python
  • MzScheme或Guile
  • 帶SWIG的Ruby

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM