最近三星开源了 IoT.js 和 JerryScript 。IoT.js 是一个使用 JavaScript 语言编写的物联网应用平台;JerryScript 是一个适用于嵌入式设备的小型 JavaScript 引擎。
三星创建这两个项目的目的,是为了让 JavaScript 开发者能够构建物联网应用。物联网设备在 CPU 性能和内存空间上都有着严重的制约。因此,三星设计了 JerryScript 引擎,它能够运行在小于 64KB 内存上,且全部代码能够存储在不足 200KB 的只读存储(ROM)上。在 JerryScript 引擎上运行 JavaScript 代码看上去是这样的:
{ jerry_init (JERRY_FLAG_ENABLE_LOG); char script [] = "print ('Hello, World!');"; jerry_parse (script, strlen (script)); jerry_run (); jerry_cleanup (); }
IoT.js 平台使用 JerryScript 引擎来运行 JavaScript 代码,使用 libuv 库来实现异步 I/O。这样的结构让开发者能够创建物联网服务,让设备与设备、外界之间交互。IoT.js 目前运行在 Linux 和 NuttX (一个实时操作系统),目标设备为树莓派 2(Raspberry Pi 2)和意法半导体开发板(ST board),后续计划支持其他微控制器(MCU)和物联网设备。IoT.js API 提供了缓冲、控制台、事件、通用输入输出接口(GPIO)、流(stream)、定时器等功能。
下图展示了运行在 IoT.js/JerryScript 平台上的 JavaScript 应用内部架构和相同应用在 IoT.js 和 Node.js 平台上运行的比较。
我们联系了三星,了解了更多关于这些项目的信息。
InfoQ:运行在只有 64KB 内存上的 JavaScript 引擎非常受限,你们是怎么做到这一点的?
三星:针对 JavaScript 引擎需要考虑许多质量属性。当前,最重要的是性能属性,因为我们希望运行在浏览器中的应用看起来像原生应用。
从物联网的角度,我们只关注内存占用。
JerryScript 和当前多级自适应即时编译(JIT)引擎相比,是一个纯粹的解释器。所以它没有保存编译后代码的开销,甚至它的解析器也不保存抽象语法树(AST)。它直接将源码按行解释成字节码。对于数据表现,JerryScript 中的对象在大小上做了优化。JerryScript 使用压缩的指针、固定大小的字节码块、预分配对象池和数值对象的多种表示等方式同时达到遵守标准和内存优化。我们将持续不断的用各种方式减少内存消耗。你们可以在 http://samsung.github.io/jerryscript/internals/ 查看到 JerryScript 内部实现细节。
InfoQ:在物联网领域使用 JavaScript 语言有什么优势?
三星:JavaScript 是当今最著名的编程语言之一 [1] [2] [3] ,大量前端开发者对它非常熟悉。因此使用 JavaScript 可以方便的扩大物联网开发者社区规模。Android 使用 Java 语言开发就是一个很好的历史事例。
另一方面,JavaScript 在嵌入式设备开发中是非常便利的。它支持异步函数回调和异步 I/O,这对基于事件驱动的硬件编程是非常有用的。
最后,JavaScript 是网页编程中使用最广的语言。将物联网设备和互联网生态系统(web ecosystem)相互配合,对于构建物联网生态系统来说是一个明智的选择。因此,许多互联网标准,如 HTTP、JSON、REST 已经成为物联网连接标准化的中心,唯一缺少的就是 JavaScript。我们认为 JavaScript 在应用程序和服务互通层上是最重要的一环。
InfoQ:IoT.js 提供了哪些功能?
三星:IoT.js 的核心是向下兼容 Node.js。为了做到这一点,IoT.js 遵守 CommonJS 规范中的模块化编程,并且支持 Node.js API 中核心功能的子集。针对物联网,我们正在定义嵌入式设备控制和物联网编程的标准模块。截至目前,我们定义了第一个通用输入输出接口(GPIO)访问 API 的候选规范,并且实现了它的原型。我们认为,为了体现它的真正价值,这些活动应该在物联网社区的共识下完成。这就是我们开源 IoT.js 的原因。请参阅 GitHub 上关于这个问题的讨论( https://goo.gl/7V8jNp )。
我们也会提供物联网连接层接口协议实现,如 OIC/IoTivity、AllSeen 联盟(AllSeen Alliance)等。它们将会以 npm 模块的方式发布。
查看英文原文: JerryScript & IoT.js: JavaScript for IoT from Samsung
感谢邵思华对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。
评论