分享

Javascript v.s. Lua

 quasiceo 2014-01-04

Javscript or Lua, this is a question…

从去年10月份开始用Lua做东西,期间颇多折腾,但是也略有小成,习惯了用”{…}”和“;”来的代码风格,乍一用Lua,还真有点不适应。最近开始折腾Node.js,逐渐对V8产生好感,同样是脚本语言,Javascript的语法比起Lua来,天生让我有种更靠谱的错觉…于是我面临一个严肃的选择,是继续使用Lua,还是华丽转身投向V8。

Lua与V8比起来,相似之处在于:

  • weak type
  • 垃圾回收
  • 单线程,GC位于主线程,因此在高吞吐量的对象操作时,执行效率会急剧下降(云风提出过将Lua中的GC移到另一线程的方案
  • 都有部分函数式编程的特性,支持closure
  • 面向对象的实现方法非常类似,Lua中是metatable,而javascript中是prototype
  • Lua与V8都是非常高效的实现(http://shootout.alioth./)
  • 都有很好的API和扩展支持

而它们的差异之处在于:

项目 Lua Javascript
错误处理 callback函数 很fancy的try…catch…异常处理机制
Weak references yes no
coroutine协程 yes no
JIT LuaJIT V8, TraceMonkey
Encoding 需要通过hack手段支持UTF-8 V8原生支持
数组 不能包含nil元素,因为nil意味着数组结尾 可以包含null元素
循环中的“continue”支持 no(需要hack来支持) yes
footprint 极其轻量(50k) v8-shell将近10MB
社区 主要是游戏开发者社区 主要是前端开发者社区
实现语言 c c++
标准库 yes no
.NET CLR实现 主要是一些p/invoke的wrapper ironJS
java实现 mochalua和kahlua都已经不活跃了 Rhino
调试器支持 弱,基本只能通过log trace方式来 d8,可用eclipse断点跟踪

从跨语言开发和社区支持的角度来看,Javascript有更大的优势,然而Lua在执行性能(JIT)和语言特性上则有独一无二的优点。Lua天生就是作为一个极其轻量、可嵌入的设计实现,它更适合做API的封装或是数据传输的中间层,假如需要跨设备边界,并在不同语言环境中进行移植,Javascript是个更好的选择,而且Javascript似乎已经证明了具有构建大规模复杂程序的能力。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多