Python,Lua 哪個適合做繪圖軟體的插件腳本語言?


Lua,因為:

  1. Lua 比Python 更容易編程,這裡更容易編程的意思是指更容易做擴展和嵌入編程,也就是對解釋器做事情,Lua 的跨語言編程模型非常簡單好用,數據交互都是通過棧,而 Python 要複雜得多,作為 Python 和 C/C++混合編程的專家,我在最熟練的時候要把引用計數處理對也要核對文檔,睜大眼睛仔細看好幾次。
  2. Lua 的解釋器就是一個數據結構,你可以在一個進程裡面造出 很多來,而且彼此是完全隔離的,這在並發、錯誤處理上都極大得簡化了問題,而 Python 的解釋器是全局的,用了 Python,涉及這部分的東西就告別並行了,因為 進入Python解釋器那裡串列化了,如果出現了錯誤,也比較難以可靠地恢復(Lua 只要保護好涉及的資源,把解釋器銷毀重建一個就好了)
  3. 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的一個實現),理由:

  1. Javascript有豐富的第三方庫,涵蓋的領域不輸Python
  2. V8/Node封裝C/C++介面更容易
  3. Javascript的語法比Python簡單,與Lua很相似
  4. 還可以用HTML寫UI
  5. 性能比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 來做什麼啊?
如何用一段簡單的代碼講述一個悲傷的故事?

TAG:設計 | Python | 腳本語言 | Lua | 像素畫 |