物聯網開發選擇什麼語言好?

帶著紅領巾的雷鋒發表於2015-10-14

enter image description here

隨著智慧生活、智慧家居的普及,物聯網越來越受大家的矚目,也越來越多人投入了物聯網學習的懷抱。但很多物聯網初學者,特別是自學物聯網的人員,一般都有一個疑問,物聯網到底學什麼?它是用什麼語言開發的。

其實物聯網專案開發語言,並不只包含物聯網培訓機構所貼出的課程大綱裡面的那幾種語言,還有很多其他語言也能很好的運用於物聯網的開發。正確選擇物聯網開發語言非常重要,今天小編就和大家一起分享11可適應與物聯網開發的語言,大家可以自己審視一下,瞭解哪些語言可以適合哪些物聯網專案。

1、C語言

眾所周知,C語言是一門基礎的通用程式語言,是嵌入式開發的首選語言,幾乎每一款現有高階嵌入式系統平臺。某些平臺雖然無法直接支援C語言,但不可否認的是其仍然以基礎形式存在,支撐著SDK中的那些專用語言。

雖然C語言是首選的基礎語言,但是也不可否認C語言身上確實存在著諸多過於陳舊的因素:它屬於過程語言而非面嚮物件語言;它並不具備內建的圖形使用者介面;而且採用編譯而非解釋機制。不過這一切負面因素反而在物聯網開發專案當中讓其成為最強而有力的語言候選人之一。

2、C++

C++是通過C語言發展而來的物件導向程式語言,因此C++保留了C語言的特性,同時也加入了資料抽象、類以及物件等機制。這一切讓C++成為我們在Linux系統環境中編寫嵌入式及物聯網程式碼時的熱門選項。這款程式語言自誕生至今已經跨越了三十多年的時光,但其在如今的嵌入式及物聯網開發領域仍然極具生命力。

3、Java

Java是一款面嚮物件語言,具有很強的可移植性:編譯器當中幾乎不存在任何硬體依賴性。而要對特定硬體進行特殊而準確的控制,Java需要藉助硬體所支援的庫並從中呼叫通用程式碼。

這讓Java擁有極具吸引力的經濟性定位:對Java程式碼開發進行一次性投入,企業將能夠獲得足以執行在多種不同平臺之上的開發成果。但從另一方面講,選擇Java的問題在於我們必須確保自己所選定的平臺能夠支援Java(目前只有極少數強大的平臺會提供Java支援能力),同時又要保證這些硬體能夠支援我們為了實現特定控制功能所需要使用的庫。

4、JavaScript

JavaScript是一種指令碼語言,是web前端開發的必用語言之一。如果大家打算在Raspberry Pi硬體平臺上使用Apache伺服器,旨在從由Arduino感測器構建的網路當中提取資料,那麼JavaScript絕對是個很好的起步選項。

自從被網景公司開發出來之時,JavaScript就一直在快速發展演進並已經成為一款功能齊備的語言。不過大家千萬別把它當成是什麼輕量化嵌入式控制器——它所採用的解釋結構意味著我們需要承擔其執行成本。換言之,至少也得是Raspberry Pi這樣的系統才能承擔JavaScript所帶來的效能損失。

5、Python

Python是當下Web開發領域最具活力的程式語言之一,而且其應用範圍已經擴散到了嵌入式控制以及物聯網領域,在很多方面擁有極為出色的靈活性表現。舉例來說,它作為一種解釋語言能夠被提交至單一執行時編譯器當中,或者通過其中內建的預編譯器實現程式碼執行,從而對其緊湊的可執行程式碼進行分發。

而最讓程式設計團隊心動的是,Python語言擁有自己的一大專注重點,即高度強調程式碼內容的可讀性。這款語言的設計規範提到了程式碼可讀性以及緊湊優雅語法的重要意義。任何一位曾經試圖解讀他人C語言程式碼並希望對其進行優化的朋友,應該都能深刻感受到程式碼可讀性在實際工作中的關鍵作用。

與其它語言一樣,Python充當嵌入式語言的前提在於其執行所處的嵌入式平臺需要具備一定的計算能力。如果大家希望開發的是一款能夠獲取資料、將其以某種資料庫格式加以整理,而後彙總成表以實現資訊控制的應用方案,那麼Python絕對是位頗具競爭力的候選程式語言選手。

6、Go

Go由谷歌公司開發並廣泛適用於各類處理器及平臺。雖然它只是眾多源自C設計理念的程式語言當中的一種,但卻在面向特定嵌入式程式設計型別時擁有大量遠勝C語言的功能特性。

Go語言增加了一種顯式雜湊表型別,這些型別在從各種感測器及執行器處收集資料並向其傳送資料方面具備相當突出的實用性。Go語言還深入支援使用感測器以及裝置網路的能力——當然,這同時也增加了潛在風險。

Go語言能夠大多種不同通道上支援並行輸入、輸出與處理。如果能夠正確使用,這一能力將使得整套感測器及執行器組合得到良好協調。然而這種特性的風險在於,各通道之間也許並不能意識到對方的存在。如果程式設計人員有所疏忽,那麼缺乏協調的系統就可能帶來不可預測的行為。從技術角度講,這顯然不是什麼好事。

7、Rust

Rust語言由Mozilla公司開發而來。與Mozilla旗下的其它軟體類似,Rust屬於開源專案且擁有非常迅猛的演進速度。Rust語言擁有諸多源自Go的特性,不過它也解決了Go當中存在的一大主要問題。

由於Go語言無法自動在不同資料結構“通道”之間進行資訊共享,因此最終開發出的程式有可能存在所謂“競態條件”。直白地講,這是一種無法控制的狀態,處於這一狀態下的系統會由於不同程式在執行時處於激烈衝突而導致工作無法完成。Rust語言當中包含的函式能夠消除競態條件,從而使其更為可靠地構建起高度併發程式。

同樣的,Rust語言對於執行平臺的效能也存在一定要求,不過如果大家的開發團隊希望開發一款涉及大量併發機制的應用,那麼Rust與Go都是值得認真考量的程式語言選項。

8、Parasail

如果大家對於自己物聯網應用程式的並行處理能力擁有一定要求,那麼Parasail語言也是個值得一試的選項。 Parasail是一款編譯型面嚮物件語言,其始終處於演進當中因此能夠通過與Java、Python、C#甚至是Ada類似的語法進行程式設計。如果大家需要使用具備高度並行性的嵌入式程式碼,那麼Parasail則是最理想的語言選項。

9、B#

我們今天提到的很多語言都屬於大型系統語言,因此要讓其在嵌入式平臺上順利執行,我們需要對其進行具體調整。然而B#則不同,它的設計初衷就是一類著眼於小處的高效嵌入式控制語言。嵌入式虛擬機器(簡稱EVM)允許B#語言執行在多種不同平臺之上,且記憶體佔用量僅為24 k——遠低於我們之前提到的其它軟體包執行要求。

B#語言與C#在某種程度上比較類似。不過相較於C#,B#剔除了相當一部分在嵌入式專案中用不到的特性,並加入了對實時控制功能的支援——這一點在實際使用環境下顯然非常重要。

如果開發專案未來會執行在輕量級嵌入式平臺之上,其規模與複雜度皆低於Raspberry Pi,那麼B#絕對是個值得認真考慮的程式語言選項。

10、組合語言

如果大家希望嚴格遵循比較傳統的設計思路,或者需要儘可能讓自己的專案顯得比較緊湊,那麼彙編程式就是達成目標的不二之選。組合語言能夠構建並打包純粹的機器碼,從而保證大家在處理器之上擁有最為理想的執行效率。而且其對效能的要求被控制在最低水平,而且技術高超的行家能夠利用匯編語言實現很多在其它程式設計機制中根本不存在的優化技巧。

不過,組合語言的程式設計工作無法借力於網路,在網路上幾乎找不到任何實用工具來幫助自己揪出開發成果中的各類錯誤。除此之外,組合語言程式碼以及相關程式編寫技能往往沒有任何承接性。我們能夠針對一種處理器編寫出相關程式碼,但這並不代表我們能夠面向其它處理器編寫出擁有同樣功能的程式碼。

對於希望擁有終極優化效果的產品的程式設計師而言,組合語言能夠將其體積控制在最低水平且保證其中不包含任何其它環境因素。不過可以肯定的是,組合語言絕對不是構建原型方案的最佳方式——如果大家擁有較為充裕的空間及處理效能,那麼建議優先使用高階語言,現代語言中的諸多優勢還是能夠幫上忙的。

11、Forth

Forth語言屬於面向堆疊語言。如果大家經常使用那種老式惠普計算器,那麼肯定會對Forth具備一定程度的理解。作為一種誕生於上世紀七十年代的語言,Forth能夠在具備相關能力的程式設計師手中實現可觀的生產力與執行效率提升效果——而且其他人根本無法使用甚至閱讀由其編寫出的成果。

以上就是眾多程式語言中,相對來說能夠很好完成嵌入式系統的程式設計任務的比較出色的11款語言,大家可以參考每一款語言的優勢和侷限,選擇對應的開發語言。如果還是不清楚具體用什麼語言,可以儘量選擇現在程式設計中常用的比較大眾一些的語言。

相關文章:《物聯網專業學生必看:學習它的方法

相關文章