天天看點

腳本語言适合物聯網開發嗎

序言

物聯網在今天已經不是一個新詞彙,尤其是“物”這麼接地氣的東西,在網際網路深入到各行各業時,自然而然會結合在一起,形成物聯網。

這個“物”,就是千奇百怪、多種多樣的嵌入式硬體、邊緣硬體,以及通用的計算機終端的集合。

腳本語言适合物聯網開發嗎

(圖檔來源于網際網路)

而關鍵也就是這個所謂的“物”,尤其是嵌入式硬體,把業内各路神仙高手都給折騰得不輕,多少年了,這個“物”的開發,竟然和二十年前沒什麼本質差異,這能忍?

今天就聊一聊,物聯網的開發到底還有沒有質的提升空間,腳本語言到底合不合适物聯網開發?

物聯網的開發語言

先别急聊物聯網的開發語言,先看看網際網路是怎麼一步一步過來的,程式設計語言又是怎麼個演化過程。

網際網路簡史

說是簡史,那就一定得簡單。

整個網際網路的曆史,就是人類瘋狂建造資訊高速的曆史。

數字世界中的資料通信,和實體世界中的物品流通,尤其是和建造高速、高鐵、飛機等交通基礎設施以後,開辟的物流鍊路,并無二緻。

程式設計語言的種類

程式設計的方法論可以是類似的,但用于不同目的的程式設計的實際操作方式,當然是會不同的。

如果針對不同目的、不同次元的程式設計方式是相同的,那一定意味着分工還不夠精細和優化,效率還不夠高。

于是對程式設計語言有如下粗略的分類:

低級語言

機器語言:01010110011110

彙編語言:把常用的機器指令序列簡化為一些助記詞

進階語言

面向過程程式設計語言:并非聚焦于資料,而是聚焦于過程,典型如 Basic, Fortran, C, Pascal

面向對象程式設計語言:出于理想化地解決現實世界的問題而生,一切皆對象,如 Java, Python, C++, C#, JavaScript, and PHP.

函數式程式設計語言:為處理運算而生,聚焦于函數,Haskell, Scala, Erlang等

腳本語言:用于執行自動化任務或重複任務,運作時解釋,無需編譯,如Bash, JavaScript, Shell, Python, and Perl.

什麼時候該選用何種語言

離硬體最近的部分,需要用低級語言來處理,或是把進階語言翻譯成低級語言處理。

接近底層的基礎設施,應該用進階語言,首先肯定是C,其次按需要混編其他語言。

基礎設施之上的應用架構部分,适合選用為解決現實世界的問題而生的語言,比如面向對象的語言。

最後應用的部分,根據目标應用需求,選用不同語言,大多也是面向對象或腳本等進階語言。

所有軟體都封裝好以後,僅僅是組裝、定制、自動化、個性化,那麼腳本語言是不二之選。

物聯網裝置應用開發的現狀

網際網路和物聯網開發的差別

好了,繞了一圈,回到文章開頭提出的問題。

可為什麼物聯網中“物”的開發,會很多年沒有質的提升呢?

本質上來說,網際網路開發中所用的伺服器(硬體),和物聯網的嵌入式硬體,也是沒有差別的。

都是沙子做的高內建度晶片,加上外圍電路形成核心闆、主機闆,再接上一堆的外設,完成各自需要做的任務。

那差別究竟在哪裡?

還是拿造高速來形容。

伺服器相當于高速路網體系中的關鍵交通樞紐,要打造一個網絡,必然投入重金先建設樞紐進行計算排程和資料流轉配置設定,是首先标準化的。

而物聯網嵌入式硬體,相當于末端的站點,可能是一個十八線小鄉村,是不是要連入高速路網都不一定,更不用說要讓它承擔重要的戰略任務了。而且每一個十八線小鄉村站,都因為各個地方的地理情況不同,千差萬别,有的是建在樹林裡的,有建在山上的,還有建在河邊甚至懸崖邊的。

是以碎片化 和 場景廣是物聯網開發和物聯網開發最大的差別。

機遇和挑戰

好了,現在産能富餘了,交通樞紐該建也都建差不多了,大家覺得十八線小鄉村站,是不是也可以考慮并入高速路網?

這時候機會就來了,首先是擴建,讓小鄉村站有更大的容量和吞吐量,可以安排更多從業人員并行進行協調排程,小鄉村站的承建方是開心得眉飛色舞了,因為他們的方案可以大麥,大麥!

但是問題也随之而來了。

每一個小鄉村的站長,都有各自的管理和建設模式,可能還是用筆和紙在記賬呢!這放以前也夠用啊,而且是最優成本效益方案,作為站長,隻需要管理自己一個人就行了,足以讓小鄉村站運轉得井井有條。

但現在呢,讓并入高速路網,說會有很多交通流量經過,也給安排了一個大團隊來管理,那隻用紙和筆還搞得定嗎?

是不是得請一個專家來出謀劃策指定方案和架構标準,至少也得向關鍵交通樞紐(伺服器)學習呀!

更好的方案:HaaS輕應用

好了,既然這麼多十八線小鄉村站都需要并如高速路網,那麼我們由交通樞紐委員會來出一個标準化方案吧。

小鄉村擴建以後,可以把樞紐上的一些标準範式的架構套用過來,可以裁剪适配,具體的站點怎麼設計,還是得站長自己來個性化定制了。

于是,HaaS輕應用應運而生。

HaaS輕應用借鑒了網際網路開發的經驗,将“無所不能”的前端技術,遷移到嵌入式裝置。使得在物聯網的硬體開發中,也有機會打開創造力的匣子,百花齊放。

首先,它是一套架構,支撐嵌入式硬體上輕應用的運作。

其次,它以面向對象的方式封裝硬體資源,使得底層基礎設施的能力都能提供到位。

最後,它用腳本語言JavaScript/Python進行程式設計,無需編譯,即可快速按需定制和自動化完成既定任務。

用來驅動硬體的腳本,大概長什麼樣呢?

var deviceAddr = 1;
var device = modbus(
  { id: 'UART2' },
  { id: 'D13', polarity: 1 },
  deviceAddr
);

var events = require('events');
var event = new events();
var status = 0x01;
setInterval(function () {
  device.write('c1-8', status).then(function (data) {
    console.log('write c1 data ' + data);
  });
  /* read back */
}, 2000);

event.on('write', function () {
  device.read('c1').then(function (data) {
    console.log('read c1 data ' + data);
  });
})

// ...

           

這是一段modbus讀寫硬體外設的代碼。

我們可以看到,實際的硬體相關操作其實是沒有展現細節的,都是調用封裝好的API,代碼裡都是一些簡單邏輯。

所謂的輕應用,也可以了解為:業務腳本邏輯 + 一堆API調用。

當這些原子的功能元件API抽象得足夠完善時,就可以幹很多活了,比如

腳本語言适合物聯網開發嗎

當然,這隻是一些典型場景,适合在腳本語言做物聯網開發的早期階段,快速占領市場。

待到生态愈發成熟,可以有更多的應用場景從中受益。

腳本語言适合物聯網開發嗎

他山之石

為什麼是腳本語言?而不是其他編譯性語言呢?

一句話:因為硬體性能提升了,是以可以犧牲部分運作效率,換取開發效率。

他山之石,可以攻玉。

我們來看看其他領域的應用開發的典型語言。

遊戲

最成功的遊戲之一,魔獸世界,使用Lua腳本開發插件,使得玩家可以輕松按自己需要個性化定制,各類玩法和插件生态得以發展得異常多姿多彩。

工業

PLC是工業控制最常見的器件,采用梯形圖程式設計,而梯形圖的邏輯解算過程,其實就是腳本語言的解釋過程,隻不過梯形圖更像是圖形化的腳本語言而已。

區塊鍊

Solidity是一種用于編寫智能合約的類腳本語言,随着Ethereum的發展而被廣泛采用。

sCrypt也是一款用于開發智能合約的腳本語言,在BitcoinSV上運作。

結語:對未來的思考

越接近于解決末端實際問題的應用,越是可能使用腳本來解決。

原因是越是末端,越難以抽象和标準化,越多的定制和個性化,是以腳本是一大利器。

可以大膽猜測,腳本語言不僅适合物聯網開發,而且極度适合物聯網末端碎片化解決方案的全棧開發,包括嵌入式硬體、服務以及前端。

繼續閱讀