JavaScript 很少為人所知的玩法

Stack OverFlow 的聯(lián)合創(chuàng)始人杰夫·阿特伍德(Jeff Atwood)曾提出著名的“Atwood定律”片挂,即:

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

任何能夠用 JavaScript 實(shí)現(xiàn)的應(yīng)用幻林,最終都必將用 JavaScript 實(shí)現(xiàn)。

毫無(wú)疑問(wèn)音念,JavaScript 已然成為當(dāng)下最流行的編程語(yǔ)言之一沪饺,這點(diǎn)已經(jīng)不需要爭(zhēng)論了,不服的話前后端乃至全棧工程師肯定跟你急闷愤。最近整葡,hackereart 就發(fā)表過(guò)一篇博文氧卧,文中描述了2016年主流編程語(yǔ)言的使用情況:

他們因此預(yù)測(cè)今年最流行的語(yǔ)言將會(huì)是:

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

作為編程語(yǔ)言界的當(dāng)紅辣子雞鸣戴,JavaScript 已將其觸角延伸到了很多領(lǐng)域,變換出了很多新奇的玩法,下面的內(nèi)容我試圖探索一些 JavaScript 很少為人所知的玩法:

Espruino

Espruino 是一個(gè)專(zhuān)門(mén)為微控制器(MCU)設(shè)計(jì)的 JavaScript 解釋器流昏,最低資源開(kāi)銷(xiāo) 128KB Flash & 8KB RAM嗓袱,使用 MPL-2.0 協(xié)議開(kāi)源扫倡。

作者 Gordon Williams 簡(jiǎn)直就是個(gè)全才豹缀,最近還設(shè)計(jì)了一款硬件 Puck.js 來(lái)支持 Espruino。

在這位巨人的肩膀上鼠次,我做了一些修改更哄,讓其能夠兼容我自己開(kāi)發(fā)的硬件,修改后的代碼我已經(jīng)提交 GitHub 了腥寇,感興趣的小伙伴可以克隆下來(lái)玩玩成翩。

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

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

# 終端跳出一大堆字符,板子上的藍(lán)色燈閃爍赦役,最后一切輕松搞定~
...
[====================] 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 還有一個(gè)配套的開(kāi)發(fā)工具 Espruino Web IDE麻敌,可以用來(lái)編輯代碼、下載程序掂摔,甚至可用于圖形化編程术羔。下面是簡(jiǎn)單實(shí)現(xiàn) LED 閃爍的代碼,有沒(méi)有一種似曾相識(shí)的感覺(jué):

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

有意思的是乙漓,Espruino 硬件上跑著 JavaScript 的解釋器级历,上傳給它的 JavaScript 代碼只是保存在 RAM 中,掉電就沒(méi)有了叭披,這點(diǎn)跟瀏覽器的做法居然如出一轍寥殖,也正好體現(xiàn)了其具備動(dòng)態(tài)解析的特點(diǎn)。

JerryScript

如果說(shuō) Espruino 有點(diǎn)玩具化涩蜘,那 JerryScript 應(yīng)該說(shuō)就比較產(chǎn)品化了嚼贡,而且 JerryScript 的資源開(kāi)銷(xiāo)也不高,RAM 可小于 64KB皱坛,ROM 可小于 200KB编曼。

一說(shuō)到 JerryScript 就一定離不開(kāi) IoT.js 和三星,他們的“三角關(guān)系”是這樣的:

IoT.js 是一個(gè)使用 JavaScript 編寫(xiě)的物聯(lián)網(wǎng)應(yīng)用平臺(tái)剩辟;JerryScript 是一個(gè)適用于嵌入式設(shè)備的小型 JavaScript 引擎;而三星開(kāi)源了 IoT.js 和 JerryScript往扔。

整個(gè)內(nèi)部架構(gòu)如下:

下面這一小段代碼可以顯示 JerryScript 的基本工作流程:初始化引擎 → 解析 JavaScript 代碼 → 執(zhí)行代碼 → 結(jié)束運(yùn)行贩猎,釋放內(nèi)存。

{
  jerry_init(JERRY_FLAG_ENABLE_LOG);

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

  jerry_run();

  jerry_cleanup();
}

查看 JerryScript 的源碼萍膛,發(fā)現(xiàn)已經(jīng)能夠在一些 RTOS(如 Zephyr吭服、mbed OS 等)上運(yùn)行了。去年在深圳舉行的 mbed Connect Asia 2016 大會(huì)上蝗罗,Jan Jongboom 說(shuō)他已經(jīng)將 JerryScript 帶到 mbed OS 5 上來(lái)了艇棕,還介紹了幾個(gè)簡(jiǎn)單的示例蝌戒。

既然已經(jīng)支持 mbed OS 5 了,那事情就好辦多了沼琉,可以輕松支援自己開(kāi)發(fā)的硬件北苟,至于開(kāi)發(fā)環(huán)境的搭建可以參考 README,不難實(shí)現(xiàn)打瘪。

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

$ cd mbed-js-example

# 國(guó)內(nèi)的朋友可以使用淘寶鏡像安裝依賴(lài):cnpm install
$ npm install 

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

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

# 從我的倉(cāng)庫(kù)拉回相關(guān)目標(biāo)硬件配置文件
$ git remote set-url origin https://github.com/makerdiary/mbed-os.git
$ git pull

# 指定目標(biāo)板子友鼻,自動(dòng)編譯
$ gulp --target=YS_BEACON

再來(lái)看下 JavaScript 所編寫(xiě)應(yīng)用的源碼,是不是有種既陌生又親切的感覺(jué):

// 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 文件下載到目標(biāo)板闺骚,看看是不是你想要的結(jié)果:

Blockly

如果你對(duì)編程語(yǔ)言或命令行窗口閃爍的光標(biāo)感到恐懼的話彩扔,Blockly 或許是拯救你的利器,讓你變得好玩有趣僻爽。

Blockly 是 Google 開(kāi)發(fā)并開(kāi)源的一個(gè) JavaScript 庫(kù)虫碉,用于實(shí)現(xiàn)圖形化編程,只需拖動(dòng)一些表示變量胸梆、表達(dá)式敦捧、循環(huán)等含義的圖形塊,組合在一起就可以完成編程乳绕,是不是很酷绞惦?

實(shí)際上,Blockly 只做一件事:可視化編輯洋措,生成代碼济蝉。而代碼背后的行為,Blockly 是不管的菠发,這就留給開(kāi)發(fā)者們非常大的想象空間王滤,例如 Ozobot 就開(kāi)發(fā)了一個(gè)智能機(jī)器人玩具,玩家可以使用 Blockly 編程機(jī)器人的行為:優(yōu)酷視頻

是不是很好玩滓鸠?可惜就是沒(méi)有機(jī)器人雁乡。不過(guò),你可以先用 Espruino 體驗(yàn)一下 Blockly 的玩法糜俗,再一步一步構(gòu)建你自己的機(jī)器人(沒(méi)錯(cuò)踱稍,前面提到的 Espruino 是支持 Blockly 的):

未完待續(xù)

是不是還沒(méi)有玩過(guò)癮?更多好玩的東西悠抹,我還在探索中珠月,等我學(xué)上手就來(lái)分享,感興趣的朋友可以稍微關(guān)注一下楔敌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末啤挎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子卵凑,更是在濱河造成了極大的恐慌庆聘,老刑警劉巖胜臊,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伙判,居然都是意外死亡象对,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)澳腹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)织盼,“玉大人,你說(shuō)我怎么就攤上這事酱塔×ち冢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵羊娃,是天一觀的道長(zhǎng)唐全。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蕊玷,這世上最難降的妖魔是什么邮利? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮垃帅,結(jié)果婚禮上延届,老公的妹妹穿的比我還像新娘。我一直安慰自己贸诚,他們只是感情好方庭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著酱固,像睡著了一般械念。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上运悲,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天龄减,我揣著相機(jī)與錄音,去河邊找鬼班眯。 笑死希停,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的署隘。 我是一名探鬼主播脖苏,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼定踱!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起恃鞋,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤崖媚,失蹤者是張志新(化名)和其女友劉穎亦歉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體畅哑,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肴楷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荠呐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赛蔫。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖泥张,靈堂內(nèi)的尸體忽然破棺而出呵恢,到底是詐尸還是另有隱情,我是刑警寧澤媚创,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布渗钉,位于F島的核電站,受9級(jí)特大地震影響钞钙,放射性物質(zhì)發(fā)生泄漏鳄橘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一芒炼、第九天 我趴在偏房一處隱蔽的房頂上張望瘫怜。 院中可真熱鬧,春花似錦本刽、人聲如沸鲸湃。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)唤锉。三九已至,卻和暖如春别瞭,著一層夾襖步出監(jiān)牢的瞬間窿祥,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工蝙寨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晒衩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓墙歪,卻偏偏與公主長(zhǎng)得像听系,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虹菲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評(píng)論 25 707
  • 本文首發(fā)于 GitChat靠胜,現(xiàn)免費(fèi)放出~感謝大家的支持。 我們都知道,大學(xué)幾乎是沒(méi)有 Web 前端課的浪漠。以我所在的...
    hylerrix閱讀 4,880評(píng)論 8 60
  • 我在風(fēng)里傾訴 風(fēng)帶走了我嘴邊的話 試著大聲呼喊 聲音也會(huì) 何時(shí)才能傳達(dá)到呢 乘著風(fēng)的這句話
    柳卿卯木閱讀 57評(píng)論 0 0
  • 【禪語(yǔ)】 冬日已至陕习,空氣寒涼,觀雨后草木址愿,卻依然零落一地该镣。由此可見(jiàn),不是所有的草木都是在秋季成熟且凋落响谓,成長(zhǎng)與成熟...
    武漢如心閱讀 708評(píng)論 3 8