JavaScript 很少為人所知的玩法

yudar1024 7年前發布 | 15K 次閱讀 JavaScript開發 JavaScript

Stack OverFlow 的聯合創始人杰夫·阿特伍德(Jeff Atwood)曾提出著名的“Atwood定律”,即:

Any application that can be written in JavaScript, will eventually be written in JavaScript.

任何能夠用 JavaScript 實現的應用,最終都必將用 JavaScript 實現。

毫無疑問,JavaScript 已然成為當下最流行的編程語言之一,這點已經不需要爭論了,不服的話前后端乃至全棧工程師肯定跟你急。最近, hackereart 就發表過一篇博文,文中描述了2016年主流編程語言的使用情況:

他們因此預測今年最流行的語言將會是:

  • JavaScript
  • Java
  • Python
  • PHP
  • Matlab
  • Arduino
  • Swift

作為編程語言界的當紅辣子雞,JavaScript 已將其觸角延伸到了很多領域,變換出了很多新奇的玩法,下面的內容我試圖探索一些 JavaScript 很少為人所知的玩法:

Espruino

Espruino 是一個專門為微控制器(MCU)設計的 JavaScript 解釋器,最低資源開銷 128KB Flash & 8KB RAM,使用 MPL-2.0 協議開源。

作者 Gordon Williams 簡直就是個全才,最近還設計了一款硬件 Puck.js 來支持 Espruino。

在這位巨人的肩膀上,我做了一些修改,讓其能夠兼容我自己開發的硬件,修改后的代碼我已經提交 GitHub 了,感興趣的小伙伴可以克隆下來玩玩。

Star

$ git clone https://github.com/makerdiary/Espruino.git
$ cd Espruino

# 將 YS-Beacon 連接至 PC
$ YS_BEACON=1 RELEASE=1 make flash

# 終端跳出一大堆字符,板子上的藍色燈閃爍,最后一切輕松搞定~
...
[====================] 100%
DEBUG:root:reset stop on Reset  
INFO:root:Programmed 446464 bytes (109 pages) at 14.56 kB/s  
DEBUG:root:uninit board <pyOCD.board.mbed_board.MbedBoard object at 0x1025e8a90>  
DEBUG:root:closing interface

Espruino 還有一個配套的開發工具 Espruino Web IDE ,可以用來編輯代碼、下載程序,甚至可用于圖形化編程。下面是簡單實現 LED 閃爍的代碼,有沒有一種似曾相識的感覺:

var on = false;  
setInterval(function() {  
  on = !on;
  LED1.write(on);
}, 500);

有意思的是,Espruino 硬件上跑著 JavaScript 的解釋器,上傳給它的 JavaScript 代碼只是保存在 RAM 中,掉電就沒有了,這點跟瀏覽器的做法居然如出一轍,也正好體現了其具備動態解析的特點。

JerryScript

如果說 Espruino 有點玩具化,那 JerryScript 應該說就比較產品化了,而且 JerryScript 的資源開銷也不高,RAM 可小于 64KB,ROM 可小于 200KB。

一說到 JerryScript 就一定離不開 IoT.js 和三星,他們的“三角關系”是這樣的:

IoT.js 是一個使用 JavaScript 編寫的物聯網應用平臺;JerryScript 是一個適用于嵌入式設備的小型 JavaScript 引擎;而三星開源了 IoT.js 和 JerryScript。

整個內部架構如下:

下面這一小段代碼可以顯示 JerryScript 的基本工作流程:初始化引擎 → 解析 JavaScript 代碼 → 執行代碼 → 結束運行,釋放內存。

{
  jerry_init(JERRY_FLAG_ENABLE_LOG);

  char script[] = "print ('Hello, World!');";
  jerry_parse(script, strlen(script));

  jerry_run();

  jerry_cleanup();
}

查看 JerryScript 的源碼,發現已經能夠在一些 RTOS(如 Zephyr、mbed OS 等)上運行了。去年在深圳舉行的 mbed Connect Asia 2016 大會上,Jan Jongboom 說他已經將 JerryScript 帶到 mbed OS 5 上來了,還介紹了幾個簡單的示例。

既然已經支持 mbed OS 5 了,那事情就好辦多了,可以輕松支援自己開發的硬件,至于開發環境的搭建可以參考 README ,不難實現。

$ git clone https://github.com/YS-Beacon/mbed-js-example.git

$ cd mbed-js-example

# 國內的朋友可以使用淘寶鏡像安裝依賴:cnpm install
$ npm install 

# 此處 gulp 用于獲取 JerryScript 源碼
$ gulp

# 獲取 mbed os 最新源碼
$ cd ./build/jerryscript/targets/mbedos5/mbed-os
$ git checkout master
$ git pull

# 從我的倉庫拉回相關目標硬件配置文件
$ git remote set-url origin https://github.com/makerdiary/mbed-os.git
$ git pull

# 指定目標板子,自動編譯
$ gulp --target=YS_BEACON

再來看下 JavaScript 所編寫應用的源碼,是不是有種既陌生又親切的感覺:

// blink_leds.js
var led = DigitalOut(LED1);

var blink = function() {  
    led.write(led.read() ? 0 : 1);
    print("blink! LED is now " + led.read());
};

module.exports = blink;

// main.js
var blink = require('./blink_leds');

setInterval(function() {  
    blink();
}, 1000);

將編譯好的 mbedos5.hex 文件下載到目標板,看看是不是你想要的結果:

Blockly

如果你對編程語言或命令行窗口閃爍的光標感到恐懼的話,Blockly 或許是拯救你的利器,讓你變得好玩有趣。 Blockly 是 Google 開發并開源的一個 JavaScript 庫,用于實現圖形化編程,只需拖動一些表示變量、表達式、循環等含義的圖形塊,組合在一起就可以完成編程,是不是很酷?

實際上,Blockly 只做一件事:可視化編輯,生成代碼。而代碼背后的行為,Blockly 是不管的,這就留給開發者們非常大的想象空間,例如 Ozobot 就開發了一個智能機器人玩具,玩家可以使用 Blockly 編程機器人的行為:

您的瀏覽器不支持 video 標簽。

是不是很好玩?可惜就是沒有機器人。不過,你可以先用 Espruino 體驗一下 Blockly 的玩法,再一步一步構建你自己的機器人(沒錯,前面提到的 Espruino 是支持 Blockly 的):

未完待續

是不是還沒有玩過癮?更多好玩的東西,我還在探索中,等我學上手就來分享,感興趣的朋友可以稍微關注一下。

 

來自:https://makerdiary.co/interesting-things-about-javascript/

 

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