物聯(lián)傳媒 旗下網(wǎng)站
登錄 注冊

在物聯(lián)網(wǎng)中使用腳本語言面臨的挑戰(zhàn)與對策

作者:Amber Ankerholz
來源:Linux技術(shù)
日期:2017-07-12 14:33:03
摘要:腳本語言常用在桌面、服務(wù)器和網(wǎng)頁開發(fā)中。它們強大的內(nèi)置功能能夠讓你花費少量的時間和精力來開發(fā)小型卻有用的應(yīng)用,然而,目前在物聯(lián)網(wǎng)中使用超高級語言深度開發(fā)嵌入式應(yīng)用相對來說有些別扭。

  腳本語言常用在桌面、服務(wù)器和網(wǎng)頁開發(fā)中。它們強大的內(nèi)置功能能夠讓你花費少量的時間和精力來開發(fā)小型卻有用的應(yīng)用,然而,目前在物聯(lián)網(wǎng)中使用超高級語言深度開發(fā)嵌入式應(yīng)用相對來說有些別扭。 -- Amber Ankerholz

  在即將到來的嵌入式 Linux 會議 + OpenIoT 峰會中,Paul Sokolovsky 將會討論在嵌入式開發(fā)中使用腳本語言的一些挑戰(zhàn)。

  腳本語言(又稱作超高級語言Very High-Level Languages或 VHLLs ),例如 Python、 PHP 以及 JavaScript 常用在桌面、服務(wù)器和網(wǎng)頁開發(fā)中。它們強大的內(nèi)置功能能夠讓你花費少量的時間和精力來開發(fā)小型卻有用的應(yīng)用,Paul Sokolovsky,Linaro 公司物聯(lián)網(wǎng)工程師如是說。然而,目前在物聯(lián)網(wǎng)中使用超高級語言深度開發(fā)嵌入式應(yīng)用相對來說有些別扭。

  在即將到來的嵌入式 Linux 會議[1] + OpenIoT 峰會[2]中,Sokolovsky 會討論在嵌入式開發(fā)中使用 VHLLs 的挑戰(zhàn)并且基于 MicroPython 的例子與 JerryScript + Zephyr.js 項目比較不同的對策。 我們與Sokolovsky 進(jìn)行了一番交談來獲得更多信息。

  您可以給我們的讀者一些 VHLLs 的背景知識嗎?

  Paul Sokolovsky: 超高級語言成為計算機科學(xué)和信息技術(shù)風(fēng)景中的一部分已經(jīng)幾十年了。也許第一個流行的腳本語言是 Unix shell(sh),盡管由于較小的特征集,它很少被認(rèn)為是一種超高級語言,而是一種特定領(lǐng)域語言。所以第一個真正破紀(jì)錄的 VHLLs 是 Perl(1987)和 Tcl(1988),很快緊跟著出現(xiàn)了 Python(1991),Ruby(1995),PHP(1995),JavaScript(1995)以及許多其它語言。

  不同 VHLLs 之間的區(qū)別特性包括:它們的解析本能(從使用者的角度來看,也許是因為其中復(fù)雜的編譯器作祟),內(nèi)置可用的強大的數(shù)據(jù)類型如任意大小的列表和映射,可觀的標(biāo)準(zhǔn)庫,以及允許用戶訪問甚至更大的第三方庫的外部模塊系統(tǒng)。所有的這些特性都與相對容易使用的感覺(更少的輸入,不需要構(gòu)建等)和簡單的學(xué)習(xí)曲線相耦合。

  使用這些語言做開發(fā)有哪些優(yōu)勢?

  Sokolovsky: 優(yōu)勢的根源來自于以上描述的這些特性。一個新手可以非常輕松的開始使用腳本語言并且快速的學(xué)習(xí)它。很多 VHLLs 提供了一個強大的交互模式,所以你不需要去讀那些厚厚的使用手冊來開始使用腳本語言,而是直接去探索和體驗它們。強大的內(nèi)置功能允許你去開發(fā)小而有用的應(yīng)用(腳本),而僅僅使用很少的時間和精力(這就是“腳本語言”名字的來源)。如果要轉(zhuǎn)向開發(fā)大型應(yīng)用,廣泛的第三方庫和可以輕而易舉使用的模塊系統(tǒng)使得開發(fā)變得流暢和高產(chǎn)。

   在嵌入式平臺上使用腳本開發(fā)和在其他平臺開發(fā)有什么區(qū)別?

  Sokolovsky: 鑒于之前我們討論過的 VHLLs 振奮人心的能力,有一個創(chuàng)意——為什么我們不能享受使用 VHLLs 為嵌入式設(shè)備做開發(fā)而具有所有(或者至少一部分)優(yōu)勢呢?這里我提到的“嵌入式設(shè)備”不僅僅是擁有 8-32 MB RAM 的小型 Linux 系統(tǒng),還有運行在微控制器(MCU)上有幾千字節(jié)內(nèi)存的深度嵌入式系統(tǒng)。少量(有些時候幾乎沒有)的相關(guān)資源肯定使這個創(chuàng)意的實現(xiàn)變得更加復(fù)雜。 另一個問題是設(shè)備訪問和交互。嵌入式設(shè)備通常沒有顯示屏和鍵盤,但是幸運的是解決這個問題的答案已經(jīng)存在幾十年了,這里要感謝 Unix,它提供了使用串口(UART)來搭建一個終端連接的方法。當(dāng)然,在主機端,有些用戶喜歡使用圖形集成開發(fā)環(huán)境(IDE)來隱藏串口通信細(xì)節(jié)。

  所以,由于嵌入式設(shè)備所有的這些不同特性,這個創(chuàng)意就是提供一個盡可能熟悉的工作環(huán)境。但熟悉只是其中一方面,另一方面,為了適應(yīng)甚至最小的設(shè)備,工作環(huán)境需要盡可能的縮小。要想解決這些矛盾需要嵌入式 VHLLs 的操作可以高度配置,來適應(yīng)不同的項目和硬件的需求。

  只有在物聯(lián)網(wǎng)中使用這些語言才會遇到的挑戰(zhàn)有哪些?比如說你如何處理內(nèi)存限制?

  Sokolovsky: 當(dāng)然,解釋程序本身幾乎不怎么消耗硬件資源。但是在當(dāng)今世界,最珍貴的資源是人類的時間。不管你是一個研發(fā)工程師、一個僅僅有幾個小時的周末創(chuàng)客、一個被 bug 和安全問題淹沒的支持工程師,或者一個計劃開發(fā)新產(chǎn)品的產(chǎn)品經(jīng)理——你手頭上大概都沒有什么多余時間。因此需要將 VHLLs 的生產(chǎn)力提供到嵌入式工程師手上。

  當(dāng)前的工藝水平使得這些需求變得可行。公正的來講,甚至于微處理器單元(MCU)平均 都有 16-32 KB RAM , 128-256 KB ROM。這僅僅足夠搭載一個核心解釋程序,一個標(biāo)準(zhǔn)庫類型的規(guī)范子集,一些硬件驅(qū)動,以及一個很小但是依舊有用的應(yīng)用程序。假如你的硬件配置稍微越過了中間線,其能力得到了快速的增長——這實際上是由于一個從 1970 年代就聞名的技巧:使用自定義的字節(jié)碼和精碼(pcode)相比原始機器代碼能夠讓你獲得更大的代碼/特性密度。

  在這條道路上有很多挑戰(zhàn),RAM 不夠用是主要的一個。我是在一個 16 GB RAM 的筆記本上寫下的這些話(但不斷切換的話依然會很卡),而剛才提到的 16KB 比它小一百萬倍!不過,通過小心的選擇算法和編程技巧,在這樣小的 RAM 下仍有可能通過腳本語言來執(zhí)行簡單程序,而相當(dāng)復(fù)雜的程序可能需要 128-256K。

  有很多的技術(shù)挑戰(zhàn)需要解決(它們已經(jīng)被成功的解決了),這里沒有足夠的篇幅來涵蓋它們。不過,我在 OpenIoT 峰會上的演講會涵蓋使用兩種嵌入式腳本語言的經(jīng)驗和成就:MicroPython(Python3 的子集)和 Zephyr.js(JavaScript/Node.js 的子集),都運行在 Linux 基金會的 Zephyr 實時操作系統(tǒng)上,它被寄希望于在 IoT 工業(yè)界取得和 Linux 在移動互聯(lián)網(wǎng)和服務(wù)器方面一樣的成就。(相關(guān) PPT 會為無法參加 OpenIoT 會議的朋友在會議后放出。)

  你能給我們一些 VHLLs 最適用的應(yīng)用的例子嗎?以及一些它們不適用的例子?

  Sokolovsky:以上是很多關(guān)于 VHLLs 的光明前景,公正的來說:在嵌入式開發(fā)中,這里有很多一廂情愿的幻想(或者說希望其是能夠自我實現(xiàn)的預(yù)言)。在嵌入式開發(fā)中 VHLLs 現(xiàn)在可以提供的是:快速成型,以及教育/創(chuàng)客市場上所必須的易學(xué)性和易用性。有一些先行者在其它領(lǐng)域使用 VHLLs,但是就目前來看,它需要在基礎(chǔ)構(gòu)造和工具開發(fā)上投入更多。重要的是,這樣的投入應(yīng)遵循開源原則并分享,否則會逐漸損害到 VHLLs 能夠節(jié)省使用者時間和精力的優(yōu)勢。

  謹(jǐn)記這些,嵌入式 VHLLs 是發(fā)育完全(“逐漸變的完整”)的語言,能夠適應(yīng)各種類型的應(yīng)用,但是要受制于硬件。例如,假如一個微處理器的規(guī)格低于之前提到的閾值,如一個老舊的 8-bit 微處理器,那么只有同樣古老而優(yōu)秀的 C 語言能夠為你所用。另外一個限制是當(dāng)你真的想要充分利用硬件時—— C 語言或者匯編程序才是正確的選擇。但是,這里有一個驚喜——嵌入式 VHLLs 的開發(fā)者也想到了這一點,例如 MicroPython 允許你將 Python 和匯編程序在同一個應(yīng)用中結(jié)合起來。

  嵌入式 VHLLs 的優(yōu)勢是其可配置性和可(重復(fù))編程性,外加靈活的連接性支持。這恰恰是 IoT 和智能設(shè)備最需要的,很多 IoT 應(yīng)用使用起來也不需要太復(fù)雜。考慮一下,例如,一個可以貼在任何地方用來完成各種任務(wù)的智能按鈕。但是,如果你需要調(diào)整雙擊的時間時怎么辦?使用腳本語言,你可以做到。也許你完全不會考慮三連擊,但是現(xiàn)在在某些情況下四連擊都可能是有用的。使用腳本語言,你可以輕易修改它。( xiaow6/譯)

人物訪談