在物聯網中使用腳本語言面臨的挑戰與對策
在即將到來的嵌入式 Linux 會議 + OpenIoT 峰會中,Paul Sokolovsky 將會討論在嵌入式開發中使用腳本語言的一些挑戰。
腳本語言(又稱作 超高級語言 或 VHLLs ),例如 Python、 PHP 以及 JavaScript 常用在桌面、伺服器和網頁開發中。它們強大的內置功能能夠讓你花費少量的時間和精力來開發小型卻有用的應用,Paul Sokolovsky,Linaro 公司物聯網工程師如是說。然而,目前在物聯網中使用超高級語言深度開發嵌入式應用相對來說有些彆扭。
在即將到來的嵌入式 Linux 會議 + OpenIoT 峰會中,Sokolovsky 會討論在嵌入式開發中使用 VHLLs 的挑戰並且基於 MicroPython 的例子與 JerryScript + Zephyr.js 項目比較不同的對策。 我們與Sokolovsky 進行了一番交談來獲得更多信息。
Linux.com:您可以給我們的讀者一些 VHLLs 的背景知識嗎?
Paul Sokolovsky: 超高級語言成為計算機科學和信息技術風景中的一部分已經幾十年了。也許第一個流行的腳本語言是 Unix shell(sh),儘管由於較小的特徵集,它很少被認為是一種超高級語言,而是一種特定領域語言。所以第一個真正破紀錄的 VHLLs 是 Perl(1987)和 Tcl(1988),很快緊跟著出現了 Python(1991),Ruby(1995),PHP(1995),JavaScript(1995)以及許多其它語言。
不同 VHLLs 之間的區別特性包括:它們的解析本能(從使用者的角度來看,也許是因為其中複雜的編譯器作祟),內置可用的強大的數據類型如任意大小的列表和映射,可觀的標準庫,以及允許用戶訪問甚至更大的第三方庫的外部模塊系統。所有的這些特性都與相對容易使用的感覺(更少的輸入,不需要構建等)和簡單的學習曲線相耦合。
Linux.com: 使用這些語言做開發有哪些優勢?
Sokolovsky: 優勢的根源來自於以上描述的這些特性。一個新手可以非常輕鬆的開始使用腳本語言並且快速的學習它。很多 VHLLs 提供了一個強大的交互模式,所以你不需要去讀那些厚厚的使用手冊來開始使用腳本語言,而是直接去探索和體驗它們。強大的內置功能允許你去開發小而有用的應用(腳本),而僅僅使用很少的時間和精力(這就是「腳本語言」名字的來源)。如果要轉向開發大型應用,廣泛的第三方庫和可以輕而易舉使用的模塊系統使得開發變得流暢和高產。
Linux.com: 在嵌入式平台上使用腳本開發和在其他平台開發有什麼區別?
Sokolovsky: 鑒於之前我們討論過的 VHLLs 振奮人心的能力,有一個創意——為什麼我們不能享受使用 VHLLs 為嵌入式設備做開發而具有所有(或者至少一部分)優勢呢?這裡我提到的「嵌入式設備」不僅僅是擁有 8-32 MB RAM 的小型 Linux 系統,還有運行在微控制器(MCU)上有幾千位元組內存的深度嵌入式系統。少量(有些時候幾乎沒有)的相關資源肯定使這個創意的實現變得更加複雜。 另一個問題是設備訪問和交互。嵌入式設備通常沒有顯示屏和鍵盤,但是幸運的是解決這個問題的答案已經存在幾十年了,這裡要感謝 Unix,它提供了使用串口(UART)來搭建一個終端連接的方法。當然,在主機端,有些用戶喜歡使用圖形集成開發環境(IDE)來隱藏串口通信細節。
所以,由於嵌入式設備所有的這些不同特性,這個創意就是提供一個儘可能熟悉的工作環境。但熟悉只是其中一方面,另一方面,為了適應甚至最小的設備,工作環境需要儘可能的縮小。要想解決這些矛盾需要嵌入式 VHLLs 的操作可以高度配置,來適應不同的項目和硬體的需求。
Linux.com:只有在物聯網中使用這些語言才會遇到的挑戰有哪些?比如說你如何處理內存限制?
Sokolovsky: 當然,解釋程序本身幾乎不怎麼消耗硬體資源。但是在當今世界,最珍貴的資源是人類的時間。不管你是一個研發工程師、一個僅僅有幾個小時的周末創客、一個被 bug 和安全問題淹沒的支持工程師,或者一個計劃開發新產品的產品經理——你手頭上大概都沒有什麼多餘時間。因此需要將 VHLLs 的生產力提供到嵌入式工程師手上。
當前的工藝水平使得這些需求變得可行。公正的來講,甚至於微處理器單元(MCU)平均 都有 16-32 KB RAM , 128-256 KB ROM。這僅僅足夠搭載一個核心解釋程序,一個標準庫類型的規範子集,一些硬體驅動,以及一個很小但是依舊有用的應用程序。假如你的硬體配置稍微越過了中間線,其能力得到了快速的增長——這實際上是由於一個從 1970 年代就聞名的技巧:使用自定義的位元組碼和精碼(pcode)相比原始機器代碼能夠讓你獲得更大的代碼/特性密度。
在這條道路上有很多挑戰,RAM 不夠用是主要的一個。我是在一個 16 GB RAM 的筆記本上寫下的這些話(但不斷切換的話依然會很卡),而剛才提到的 16KB 比它小一百萬倍!不過,通過小心的選擇演算法和編程技巧,在這樣小的 RAM 下仍有可能通過腳本語言來執行簡單程序,而相當複雜的程序可能需要 128-256K。
有很多的技術挑戰需要解決(它們已經被成功的解決了),這裡沒有足夠的篇幅來涵蓋它們。不過,我在 OpenIoT 峰會上的演講會涵蓋使用兩種嵌入式腳本語言的經驗和成就:MicroPython(Python3 的子集)和 Zephyr.js(JavaScript/Node.js 的子集),都運行在 Linux 基金會的 Zephyr 實時操作系統上,它被寄希望於在 IoT 工業界取得和 Linux 在移動互聯網和伺服器方面一樣的成就。(相關 PPT 會為無法參加 OpenIoT 會議的朋友在會議後放出。)
Linux.com: 你能給我們一些 VHLLs 最適用的應用的例子嗎?以及一些它們不適用的例子?
Sokolovsky:以上是很多關於 VHLLs 的光明前景,公正的來說:在嵌入式開發中,這裡有很多一廂情願的幻想(或者說希望其是能夠自我實現的預言)。在嵌入式開發中 VHLLs 現在可以提供的是:快速成型,以及教育/創客市場上所必須的易學性和易用性。有一些先行者在其它領域使用 VHLLs,但是就目前來看,它需要在基礎構造和工具開發上投入更多。重要的是,這樣的投入應遵循開源原則並分享,否則會逐漸損害到 VHLLs 能夠節省使用者時間和精力的優勢。
謹記這些,嵌入式 VHLLs 是發育完全(「逐漸變的完整」)的語言,能夠適應各種類型的應用,但是要受制於硬體。例如,假如一個微處理器的規格低於之前提到的閾值,如一個老舊的 8-bit 微處理器,那麼只有同樣古老而優秀的 C 語言能夠為你所用。另外一個限制是當你真的想要充分利用硬體時—— C 語言或者彙編程序才是正確的選擇。但是,這裡有一個驚喜——嵌入式 VHLLs 的開發者也想到了這一點,例如 MicroPython 允許你將 Python 和彙編程序在同一個應用中結合起來。
嵌入式 VHLLs 的優勢是其可配置性和可(重複)編程性,外加靈活的連接性支持。這恰恰是 IoT 和智能設備最需要的,很多 IoT 應用使用起來也不需要太複雜。考慮一下,例如,一個可以貼在任何地方用來完成各種任務的智能按鈕。但是,如果你需要調整雙擊的時間時怎麼辦?使用腳本語言,你可以做到。也許你完全不會考慮三連擊,但是現在在某些情況下四連擊都可能是有用的。使用腳本語言,你可以輕易修改它。
(題圖:來自 Pixabay,基於 CC0 協議)
作者:AMBER ANKERHOLZ 譯者:xiaow6 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive