Python,Lua哪个适合做绘图软件的插件脚本语言?
时间:2021-07-01 10:21:17
帮助过:17人阅读
回复内容:
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 的缺点就不算缺点。
如果是用C++/QT写绘图软件,然后要找个脚本做插件提高软件的灵活性和扩展性,那必然Lua比Python好
如果是用Python/PyQT写绘图软件,然后用C++对性能要求高的部分进行优化,那必然是Python比Lua好
python。
很多专业和开源图像处理软件都是用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程序员,现投身游戏行业。
相当多的专业的三维软件和合成软件的脚本,以及VFX公司的流水线工具们,基本是选择了python,这个也不是随口胡说,是的确有根据的。不信搜搜。
图像处理,Python的全局锁(GIL)就够让人决定选Lua了
这种问题就好比什么语言是最好的语言,只能说哪一个熟练就用那一个
lua,轻。
请搜索:
Adobe Photoshop Lightroom