JerryScript 和 IoT.js:來自三星的物聯網 JavaScript

jopen 9年前發布 | 20K 次閱讀 IoT.js

最近三星開源了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.jsAPI提供了緩沖、控制臺、事件、通用輸入輸出接口(GPIO)、流(stream)、定時器等功能。

下圖展示了運行在IoT.js/JerryScript平臺上的JavaScript應用內部架構和相同應用在IoT.js和Node.js平臺上運行的比較。

JerryScript 和 IoT.js:來自三星的物聯網 JavaScript

JerryScript 和 IoT.js:來自三星的物聯網 JavaScript

我們聯系了三星,了解了更多關于這些項目的信息。

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.com/cn


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!