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
- R
- Matlab
- Arduino
- Swift
作為程式語言界的當紅辣子雞,JavaScript 已將其觸角延伸到了很多領域,變換出了很多新奇的玩法,下面的內容我試圖探索一些 JavaScript 很少為人所知的玩法:
Espruino
Espruino 是一個專門為微控制器(MCU)設計的 JavaScript 直譯器,最低資源開銷 128KB Flash & 8KB RAM,使用 MPL-2.0 協議開源。
作者 Gordon Williams 簡直就是個全才,最近還設計了一款硬體 Puck.js 來支援 Espruino。
在這位巨人的肩膀上,我做了一些修改,讓其能夠相容我自己開發的硬體,修改後的程式碼我已經提交 GitHub 了,感興趣的小夥伴可以克隆下來玩玩。
$ 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 程式設計機器人的行為:
是不是很好玩?可惜就是沒有機器人。不過,你可以先用 Espruino 體驗一下 Blockly 的玩法,再一步一步構建你自己的機器人(沒錯,前面提到的 Espruino 是支援 Blockly 的):
未完待續
是不是還沒有玩過癮?更多好玩的東西,我還在探索中,等我學上手就來分享,感興趣的朋友可以稍微關注一下。
相關文章
- 鮮為人知的JavaScript功能JavaScript
- 那些功能逆天,卻鮮為人知的pandas騷操作
- Spring核心原理之 IoC容器中那些鮮為人知的細節(3)Spring
- 鮮為人知的 Python 語法Python
- 鮮為人知的 PostgreSQL 特性 - hakibenitaSQL
- 15 個鮮為人知的Unix命令
- 鮮為人知的程式設計真相程式設計
- 10款鮮為人知的PHP框架PHP框架
- Python:鮮為人知的功能特性(上)Python
- Python:鮮為人知的功能特性(下)Python
- 鮮為人知的python位運算Python
- 有趣且鮮為人知的 Python “特性”Python
- 5個 Google Guava 鮮為人知的特性GoGuava
- 10個鮮為人知的WordPress函式函式
- Google鮮為人知的14項服務Go
- 庫克的14件鮮為人知的軼事
- 5個鮮為人知Java集合特性Java
- opencv介面那些不為人知的事!OpenCV
- 一份鮮為人知的Python特性Python
- 11 個鮮為人知的 Linux 命令(1)Linux
- 10 個鮮為人知的 Linux 命令(5)Linux
- 10 個鮮為人知的 Linux 命令(2)Linux
- 10 個鮮為人知的 Linux 命令(3)Linux
- 10 個鮮為人知的 Linux 命令(4)Linux
- 十個鮮為人知的Linux 命令(三)Linux
- 十個鮮為人知的Linux 命令(二)Linux
- 6條鮮為人知的程式設計真相程式設計
- C語言有哪些鮮為人知的特性?C語言
- 鮮為人知的Windows XP最佳化(轉)Windows
- 推薦六個鮮為人知的 Composer 命令
- 鮮為人知的軟體專案管理原則專案管理
- 十個鮮為人知的Linux命令 - Part 5Linux
- 25個鮮為人知的谷歌使用技巧——資訊圖谷歌
- 一些鮮為人知的程式設計真相程式設計
- 谷歌11款鮮為人知的低調產品谷歌
- [譯] 鮮為人知的資料科學 Python 庫資料科學Python
- 一些鮮為人知的程式設計事實程式設計
- 走程式序員:那些不為人知的辛酸