工控網(wǎng)首頁(yè)
>

應(yīng)用設(shè)計(jì)

>

11款適合物聯(lián)網(wǎng)開(kāi)發(fā)的語(yǔ)言,你了解幾款?

11款適合物聯(lián)網(wǎng)開(kāi)發(fā)的語(yǔ)言,你了解幾款?

2016/5/23 9:41:56

  隨著智能生活、智能家居的普及,物聯(lián)網(wǎng)越來(lái)越受大家的矚目,也越來(lái)越多人投入了物聯(lián)網(wǎng)學(xué)習(xí)的懷抱。但很多物聯(lián)網(wǎng)初學(xué)者,特別是自學(xué)物聯(lián)網(wǎng)的人員,一般都有一個(gè)疑問(wèn),物聯(lián)網(wǎng)到底學(xué)什么?它是用什么語(yǔ)言開(kāi)發(fā)的。

  其實(shí)物聯(lián)網(wǎng)項(xiàng)目開(kāi)發(fā)語(yǔ)言,并不只包含物聯(lián)網(wǎng)培訓(xùn)機(jī)構(gòu)所貼出的課程大綱里面的那幾種語(yǔ)言,還有很多其他語(yǔ)言也能很好的運(yùn)用于物聯(lián)網(wǎng)的開(kāi)發(fā)。正確選擇物聯(lián)網(wǎng)開(kāi)發(fā)語(yǔ)言非常重要,今天小編就和大家一起分享11可適應(yīng)與物聯(lián)網(wǎng)開(kāi)發(fā)的語(yǔ)言,大家可以自己審視一下,了解哪些語(yǔ)言可以適合哪些物聯(lián)網(wǎng)項(xiàng)目。

1、C語(yǔ)言

  眾所周知,C語(yǔ)言是一門(mén)基礎(chǔ)的通用編程語(yǔ)言,是嵌入式開(kāi)發(fā)的首選語(yǔ)言,幾乎每一款現(xiàn)有高級(jí)嵌入式系統(tǒng)平臺(tái)。某些平臺(tái)雖然無(wú)法直接支持C語(yǔ)言,但不可否認(rèn)的是其仍然以基礎(chǔ)形式存在,支撐著SDK中的那些專用語(yǔ)言。

  雖然C語(yǔ)言是首選的基礎(chǔ)語(yǔ)言,但是也不可否認(rèn)C語(yǔ)言身上確實(shí)存在著諸多過(guò)于陳舊的因素:它屬于過(guò)程語(yǔ)言而非面向?qū)ο笳Z(yǔ)言;它并不具備內(nèi)置的圖形用戶界面;而且采用編譯而非解釋機(jī)制。不過(guò)這一切負(fù)面因素反而在物聯(lián)網(wǎng)開(kāi)發(fā)項(xiàng)目當(dāng)中讓其成為最強(qiáng)而有力的語(yǔ)言候選人之一。

2、C++

  C++是通過(guò)C語(yǔ)言發(fā)展而來(lái)的面向?qū)ο缶幊陶Z(yǔ)言,因此C++保留了C語(yǔ)言的特性,同時(shí)也加入了數(shù)據(jù)抽象、類以及對(duì)象等機(jī)制。這一切讓C++成為我們?cè)贚inux系統(tǒng)環(huán)境中編寫(xiě)嵌入式及物聯(lián)網(wǎng)代碼時(shí)的熱門(mén)選項(xiàng)。這款編程語(yǔ)言自誕生至今已經(jīng)跨越了三十多年的時(shí)光,但其在如今的嵌入式及物聯(lián)網(wǎng)開(kāi)發(fā)領(lǐng)域仍然極具生命力。

3、Java

  Java是一款面向?qū)ο笳Z(yǔ)言,具有很強(qiáng)的可移植性:編譯器當(dāng)中幾乎不存在任何硬件依賴性。而要對(duì)特定硬件進(jìn)行特殊而準(zhǔn)確的控制,Java需要借助硬件所支持的庫(kù)并從中調(diào)用通用代碼。

  這讓Java語(yǔ)言擁有極具吸引力的經(jīng)濟(jì)性定位:對(duì)Java代碼開(kāi)發(fā)進(jìn)行一次性投入,企業(yè)將能夠獲得足以運(yùn)行在多種不同平臺(tái)之上的開(kāi)發(fā)成果。但從另一方面講,選擇Java的問(wèn)題在于我們必須確保自己所選定的平臺(tái)能夠支持Java(目前只有極少數(shù)強(qiáng)大的平臺(tái)會(huì)提供Java支持能力),同時(shí)又要保證這些硬件能夠支持我們?yōu)榱藢?shí)現(xiàn)特定控制功能所需要使用的庫(kù)。

4、JavaScript

  JavaScript是一種腳本語(yǔ)言,是web前端開(kāi)發(fā)的必用語(yǔ)言之一。如果大家打算在Raspberry Pi硬件平臺(tái)上使用Apache服務(wù)器,旨在從由Arduino傳感器構(gòu)建的網(wǎng)絡(luò)當(dāng)中提取數(shù)據(jù),那么JavaScript絕對(duì)是個(gè)很好的起步選項(xiàng)。

  自從被網(wǎng)景公司開(kāi)發(fā)出來(lái)之時(shí),JavaScript就一直在快速發(fā)展演進(jìn)并已經(jīng)成為一款功能齊備的語(yǔ)言。不過(guò)大家千萬(wàn)別把它當(dāng)成是什么輕量化嵌入式控制器——它所采用的解釋結(jié)構(gòu)意味著我們需要承擔(dān)其運(yùn)行成本。換言之,至少也得是Raspberry Pi這樣的系統(tǒng)才能承擔(dān)JavaScript所帶來(lái)的性能損失。

5、Python

  Python是當(dāng)下Web開(kāi)發(fā)領(lǐng)域最具活力的編程語(yǔ)言之一,而且其應(yīng)用范圍已經(jīng)擴(kuò)散到了嵌入式控制以及物聯(lián)網(wǎng)領(lǐng)域,在很多方面擁有極為出色的靈活性表現(xiàn)。舉例來(lái)說(shuō),它作為一種解釋語(yǔ)言能夠被提交至單一運(yùn)行時(shí)編譯器當(dāng)中,或者通過(guò)其中內(nèi)置的預(yù)編譯器實(shí)現(xiàn)代碼運(yùn)行,從而對(duì)其緊湊的可執(zhí)行代碼進(jìn)行分發(fā)。

  而最讓編程團(tuán)隊(duì)心動(dòng)的是,Python語(yǔ)言擁有自己的一大專注重點(diǎn),即高度強(qiáng)調(diào)代碼內(nèi)容的可讀性。這款語(yǔ)言的設(shè)計(jì)規(guī)范提到了代碼可讀性以及緊湊優(yōu)雅語(yǔ)法的重要意義。任何一位曾經(jīng)試圖解讀他人C語(yǔ)言代碼并希望對(duì)其進(jìn)行優(yōu)化的朋友,應(yīng)該都能深刻感受到代碼可讀性在實(shí)際工作中的關(guān)鍵作用。

  與其它語(yǔ)言一樣,Python充當(dāng)嵌入式語(yǔ)言的前提在于其運(yùn)行所處的嵌入式平臺(tái)需要具備一定的計(jì)算能力。如果大家希望開(kāi)發(fā)的是一款能夠獲取數(shù)據(jù)、將其以某種數(shù)據(jù)庫(kù)格式加以整理,而后匯總成表以實(shí)現(xiàn)信息控制的應(yīng)用方案,那么Python絕對(duì)是位頗具競(jìng)爭(zhēng)力的候選編程語(yǔ)言選手。

6、Go

  Go由谷歌公司開(kāi)發(fā)并廣泛適用于各類處理器及平臺(tái)。雖然它只是眾多源自C設(shè)計(jì)理念的編程語(yǔ)言當(dāng)中的一種,但卻在面向特定嵌入式編程類型時(shí)擁有大量遠(yuǎn)勝C語(yǔ)言的功能特性。

  Go語(yǔ)言增加了一種顯式散列表類型,這些類型在從各種傳感器及執(zhí)行器處收集數(shù)據(jù)并向其發(fā)送數(shù)據(jù)方面具備相當(dāng)突出的實(shí)用性。Go語(yǔ)言還深入支持使用傳感器以及設(shè)備網(wǎng)絡(luò)的能力——當(dāng)然,這同時(shí)也增加了潛在風(fēng)險(xiǎn)。

  Go語(yǔ)言能夠大多種不同通道上支持并行輸入、輸出與處理。如果能夠正確使用,這一能力將使得整套傳感器及執(zhí)行器組合得到良好協(xié)調(diào)。然而這種特性的風(fēng)險(xiǎn)在于,各通道之間也許并不能意識(shí)到對(duì)方的存在。如果編程人員有所疏忽,那么缺乏協(xié)調(diào)的系統(tǒng)就可能帶來(lái)不可預(yù)測(cè)的行為。從技術(shù)角度講,這顯然不是什么好事。

7、Rust

  Rust語(yǔ)言由Mozilla公司開(kāi)發(fā)而來(lái)。與Mozilla旗下的其它軟件類似,Rust屬于開(kāi)源項(xiàng)目且擁有非常迅猛的演進(jìn)速度。Rust語(yǔ)言擁有諸多源自Go的特性,不過(guò)它也解決了Go當(dāng)中存在的一大主要問(wèn)題。

  由于Go語(yǔ)言無(wú)法自動(dòng)在不同數(shù)據(jù)結(jié)構(gòu)“通道”之間進(jìn)行信息共享,因此最終開(kāi)發(fā)出的程序有可能存在所謂“競(jìng)態(tài)條件”。直白地講,這是一種無(wú)法控制的狀態(tài),處于這一狀態(tài)下的系統(tǒng)會(huì)由于不同進(jìn)程在運(yùn)行時(shí)處于激烈沖突而導(dǎo)致工作無(wú)法完成。Rust語(yǔ)言當(dāng)中包含的函數(shù)能夠消除競(jìng)態(tài)條件,從而使其更為可靠地構(gòu)建起高度并發(fā)程序。

  同樣的,Rust語(yǔ)言對(duì)于運(yùn)行平臺(tái)的性能也存在一定要求,不過(guò)如果大家的開(kāi)發(fā)團(tuán)隊(duì)希望開(kāi)發(fā)一款涉及大量并發(fā)機(jī)制的應(yīng)用,那么Rust與Go都是值得認(rèn)真考量的編程語(yǔ)言選項(xiàng)。

8、Parasail

  如果大家對(duì)于自己物聯(lián)網(wǎng)應(yīng)用程序的并行處理能力擁有一定要求,那么Parasail語(yǔ)言也是個(gè)值得一試的選項(xiàng)。

Parasail是一款編譯型面向?qū)ο笳Z(yǔ)言,其始終處于演進(jìn)當(dāng)中因此能夠通過(guò)與Java、Python、C#甚至是Ada類似的語(yǔ)法進(jìn)行編程。如果大家需要使用具備高度并行性的嵌入式代碼,那么Parasail則是最理想的語(yǔ)言選項(xiàng)。

9、B#

  我們今天提到的很多語(yǔ)言都屬于大型系統(tǒng)語(yǔ)言,因此要讓其在嵌入式平臺(tái)上順利運(yùn)行,我們需要對(duì)其進(jìn)行具體調(diào)整。然而B(niǎo)#則不同,它的設(shè)計(jì)初衷就是一類著眼于小處的高效嵌入式控制語(yǔ)言。嵌入式虛擬機(jī)(簡(jiǎn)稱EVM)允許B#語(yǔ)言運(yùn)行在多種不同平臺(tái)之上,且內(nèi)存占用量?jī)H為24 k——遠(yuǎn)低于我們之前提到的其它軟件包運(yùn)行要求。

  B#語(yǔ)言與C#在某種程度上比較類似。不過(guò)相較于C#,B#剔除了相當(dāng)一部分在嵌入式項(xiàng)目中用不到的特性,并加入了對(duì)實(shí)時(shí)控制功能的支持——這一點(diǎn)在實(shí)際使用環(huán)境下顯然非常重要。如果開(kāi)發(fā)項(xiàng)目未來(lái)會(huì)運(yùn)行在輕量級(jí)嵌入式平臺(tái)之上,其規(guī)模與復(fù)雜度皆低于Raspberry Pi,那么B#絕對(duì)是個(gè)值得認(rèn)真考慮的編程語(yǔ)言選項(xiàng)。

10、匯編語(yǔ)言

  如果大家希望嚴(yán)格遵循比較傳統(tǒng)的設(shè)計(jì)思路,或者需要盡可能讓自己的項(xiàng)目顯得比較緊湊,那么匯編程序就是達(dá)成目標(biāo)的不二之選。匯編語(yǔ)言能夠構(gòu)建并打包純粹的機(jī)器碼,從而保證大家在處理器之上擁有最為理想的執(zhí)行效率。而且其對(duì)性能的要求被控制在最低水平,而且技術(shù)高超的行家能夠利用匯編語(yǔ)言實(shí)現(xiàn)很多在其它編程機(jī)制中根本不存在的優(yōu)化技巧。

  不過(guò),匯編語(yǔ)言的編程工作無(wú)法借力于網(wǎng)絡(luò),在網(wǎng)絡(luò)上幾乎找不到任何實(shí)用工具來(lái)幫助自己揪出開(kāi)發(fā)成果中的各類錯(cuò)誤。除此之外,匯編語(yǔ)言代碼以及相關(guān)程序編寫(xiě)技能往往沒(méi)有任何承接性。我們能夠針對(duì)一種處理器編寫(xiě)出相關(guān)代碼,但這并不代表我們能夠面向其它處理器編寫(xiě)出擁有同樣功能的代碼。

對(duì)于希望擁有終極優(yōu)化效果的產(chǎn)品的程序員而言,匯編語(yǔ)言能夠?qū)⑵潴w積控制在最低水平且保證其中不包含任何其它環(huán)境因素。不過(guò)可以肯定的是,匯編語(yǔ)言絕對(duì)不是構(gòu)建原型方案的最佳方式——如果大家擁有較為充裕的空間及處理性能,那么建議優(yōu)先使用高級(jí)語(yǔ)言,現(xiàn)代語(yǔ)言中的諸多優(yōu)勢(shì)還是能夠幫上忙的。

11、Forth

  Forth語(yǔ)言屬于面向堆棧語(yǔ)言。如果大家經(jīng)常使用那種老式惠普計(jì)算器,那么肯定會(huì)對(duì)Forth具備一定程度的理解。作為一種誕生于上世紀(jì)七十年代的語(yǔ)言,F(xiàn)orth能夠在具備相關(guān)能力的程序員手中實(shí)現(xiàn)可觀的生產(chǎn)力與執(zhí)行效率提升效果——而且其他人根本無(wú)法使用甚至閱讀由其編寫(xiě)出的成果。

  以上就是眾多編程語(yǔ)言中,相對(duì)來(lái)說(shuō)能夠很好完成嵌入式系統(tǒng)的編程任務(wù)的比較出色的11款語(yǔ)言,大家可以參考每一款語(yǔ)言的優(yōu)勢(shì)和局限,選擇對(duì)應(yīng)的開(kāi)發(fā)語(yǔ)言。如果還是不清楚具體用什么語(yǔ)言,可以盡量選擇現(xiàn)在編程中常用的比較大眾一些的語(yǔ)言。

來(lái)源:文/小麥麥子(簡(jiǎn)書(shū)作者)

提交

查看更多評(píng)論
其他資訊

查看更多

超越傳統(tǒng)直覺(jué),MATLAB/Simulink助力重型機(jī)械的智能化轉(zhuǎn)型

新大陸自動(dòng)識(shí)別精彩亮相2024華南國(guó)際工業(yè)博覽會(huì)

派拓網(wǎng)絡(luò)被Forrester評(píng)為XDR領(lǐng)域領(lǐng)導(dǎo)者

智能工控,存儲(chǔ)強(qiáng)基 | ??低晭?lái)精彩主題演講

展會(huì)|Lubeworks路博流體供料系統(tǒng)精彩亮相AMTS展會(huì)