Python,Lua 哪個適合做繪圖軟體的插件腳本語言?
Lua,因為:
- Lua 比Python 更容易編程,這裡更容易編程的意思是指更容易做擴展和嵌入編程,也就是對解釋器做事情,Lua 的跨語言編程模型非常簡單好用,數據交互都是通過棧,而 Python 要複雜得多,作為 Python 和 C/C++混合編程的專家,我在最熟練的時候要把引用計數處理對也要核對文檔,睜大眼睛仔細看好幾次。
- Lua 的解釋器就是一個數據結構,你可以在一個進程裡面造出 很多來,而且彼此是完全隔離的,這在並發、錯誤處理上都極大得簡化了問題,而 Python 的解釋器是全局的,用了 Python,涉及這部分的東西就告別並行了,因為 進入Python解釋器那裡串列化了,如果出現了錯誤,也比較難以可靠地恢復(Lua 只要保護好涉及的資源,把解釋器銷毀重建一個就好了)
- Lua 的效率比 Python 好,如果用 API 兼容的 LuaJIT 那就更好了(最快沒有之一的腳本語言實現),做繪圖軟體的插件,這可能還是一個重要的考慮
事實上 Adobe Photoshop 就是用 Lua 做的腳本
Python 的優勢在於庫豐富。它的語言表現力可以打 80 分,基本合格,給生態系統拖後腿的情況不嚴重,但語言本身用今天的標準看並不出彩。
Lua 的優勢在於語言本身實現簡潔(除了 keyword 比較長):比如 coroutine,還有比較好的 closure 優化。缺點是庫比較少。如果是對已有的 C 代碼進行 scripting,Lua 的缺點就不算缺點。相當多的專業的三維軟體和合成軟體的腳本,以及VFX公司的流水線工具們,基本是選擇了python,這個也不是隨口胡說,是的確有根據的。不信搜搜。
python和lua 哪個適合做繪圖軟體的插件腳本語言?
取決於你期望用腳本語言達成什麼目標。
如果你只是希望把它做為UI/Project配置文件:CMake: Given the chance to do the language over, we would have spent some time looking for a nice embedded language that already existed. 【Lua】 is the best fit that might have worked.
如果你只是打算把C/C++ API封裝一下,讓用戶在你指定的域里做功能定製,那麼選擇Lua。
有人提到 Adobe Photoshop Lightroom,從簡介上看,其實Lightroom乾的無非就上面兩件事情。是的,Lua在遊戲行業很流行,而遊戲行業用Lua做的就是第二類事情。
但是,如果你希望你的用戶用這種腳本語言定製自己的插件,如果你的用戶可能來自各行各業,如果你希望給你的用戶足夠的自由度想怎麼插就怎麼插,那麼Lua不是一個好的選擇。出了程序員的圈子,Lua的社區並不大,而你需要的是一種能輕鬆與其他domain對接的編程語言,比如Python。
Maya的腳本語言就是用Python,玩法比Lightroom多了去了。
今時今日,CommonJS Spec Wiki可能是比Python更好的選擇(Node.js是CommonJS的一個實現),理由:
- Javascript有豐富的第三方庫,涵蓋的領域不輸Python
- V8/Node封裝C/C++介面更容易
- Javascript的語法比Python簡單,與Lua很相似
- 還可以用HTML寫UI
- 性能比Python好了一個數量級,接近luajit(雖然我認為作為插件語言,性能其實根本不是問題)
但不是沒有代價:集成Node.js進desktop app跟簡單的集成一個解釋器,難度不是一個量級的。。有興趣可以參考Node-Webkit · GitHub或者Atom Shell · GitHub
非利益相關:前Autodesk程序員,現投身遊戲行業。
python。
很多專業和開源圖像處理軟體都是用Python做腳本的。
如果是用C++/QT寫繪圖軟體,然後要找個腳本做插件提高軟體的靈活性和擴展性,那必然Lua比Python好
如果是用Python/PyQT寫繪圖軟體,然後用C++對性能要求高的部分進行優化,那必然是Python比Lua好這種問題就好比什麼語言是最好的語言,只能說哪一個熟練就用那一個
lua,輕。
請搜索:Adobe Photoshop Lightroom
你會用就都適合
圖像處理,Python的全局鎖(GIL)就夠讓人決定選Lua了
推薦閱讀:
※如何用python模擬一個星系?
※如何評價 Quora 的 Ultralisk 並行架構?
※大家都用 Python 來做什麼啊?
※如何用一段簡單的代碼講述一個悲傷的故事?