成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

十一款值得深入了解的物聯(lián)網(wǎng)編程語言

譯文
開發(fā) 開發(fā)工具 后端
對于物聯(lián)網(wǎng)項(xiàng)目而言,選擇編程語言的重要意義絕不在制定硬件平臺(tái)決策之下。在今天的文章中,我們將共同審視11款編程語言,并認(rèn)真考量哪一種最適合自己的下一個(gè)編程項(xiàng)目。

對于物聯(lián)網(wǎng)項(xiàng)目而言,選擇編程語言的重要意義絕不在制定硬件平臺(tái)決策之下。在今天的文章中,我們將共同審視11款編程語言,并認(rèn)真考量哪一種最適合自己的下一個(gè)編程項(xiàng)目。

物聯(lián)網(wǎng)開發(fā)項(xiàng)目目前正在全球范圍的諸多企業(yè)當(dāng)中如火如荼地展開。新型硬件平臺(tái)的出現(xiàn)讓工程師們能夠以前所未有的便捷方式在物聯(lián)網(wǎng)應(yīng)用當(dāng)中構(gòu)建嵌入式系統(tǒng)。一旦選定了合適的硬件平臺(tái),接下來要做的就是為其開發(fā)應(yīng)用軟件——先別高興得太早,到了這一步擺在我們面前的選項(xiàng)會(huì)更多、也更具挑戰(zhàn)。

[[151740]]

就在不久之前,我們對于編程語言的選擇還受到硬件平臺(tái)方案的嚴(yán)格約束。不過時(shí)至今日,多數(shù)現(xiàn)代平臺(tái)已經(jīng)基于開源標(biāo)準(zhǔn)并能夠支持多種編程語言類型,這樣出色的靈活性自然帶來了更多潛在選項(xiàng)。而這也正是我們今天所要解決的問題。

那么我們應(yīng)該如何為特定物聯(lián)網(wǎng)項(xiàng)目選擇編程語言呢?在某些情況下,我們的潛在選項(xiàng)仍然會(huì)受到當(dāng)前硬件平臺(tái)的限定。不過在其它條件下,大家完全可以立足于特定因素選擇語言類型,例如企業(yè)開發(fā)團(tuán)隊(duì)對該語言的熟悉程度、其能夠在業(yè)務(wù)環(huán)境中整體物聯(lián)網(wǎng)系統(tǒng)的其它組件所使用,或者其代碼成果是否體積更小、執(zhí)行效率更高或者編寫速度更快等等。

我們首先從眾多選項(xiàng)中挑選出了11款最為出色的語言,它們都能夠很好地完成嵌入式系統(tǒng)的編程任務(wù)。它們涵蓋范圍很廣,從用途廣泛的C++以及Java到專門面向嵌入式用例的Go以及Parasail皆在其中。每一款語言都有著自己的優(yōu)勢與局限。在閱讀了今天的文章之后,也希望大家能夠在評(píng)論當(dāng)中表達(dá)您的觀點(diǎn)與較為傾向的語言選項(xiàng),幫助我們共同了解如何更好地構(gòu)建起自己的嵌入式與物聯(lián)網(wǎng)開發(fā)項(xiàng)目。

C語言

作為一款最初用于進(jìn)行電話交換機(jī)編程的語言,C確實(shí)是我們在考慮嵌入式系統(tǒng)開發(fā)時(shí)應(yīng)當(dāng)首先審視的合理選項(xiàng)。C語言屬于軟件開發(fā)世界中的一種通用語,其適用于幾乎每一款現(xiàn)有高級(jí)嵌入式系統(tǒng)平臺(tái)。某些平臺(tái)雖然無法直接支持C語言,但不可否認(rèn)的是其仍然以基礎(chǔ)形式存在,支撐著SDK中的那些專用語言。

好消息是專業(yè)程序員們必然對C語言擁有較為深入的了解——如果做不到這一點(diǎn),那么企業(yè)應(yīng)該撥出專項(xiàng)資金幫助大家完成進(jìn)修,這對于程序員自身的職業(yè)發(fā)展以及企業(yè)運(yùn)營前景來說都將物有所值。從當(dāng)下的角度審視,C語言身上確實(shí)存在著諸多過于陳舊的因素:它屬于過程語言而非面向?qū)ο笳Z言;它并不具備內(nèi)置的圖形用戶界面;而且采用編譯而非解釋機(jī)制。不過這一切負(fù)面因素反而在物聯(lián)網(wǎng)開發(fā)項(xiàng)目當(dāng)中讓其成為最強(qiáng)而有力的語言候選人之一。

C++

自從上世紀(jì)八十年代初整個(gè)編程世界的發(fā)展車輪開始朝著面向?qū)ο笳Z言滾動(dòng)之時(shí),F(xiàn)ortran、Cobol以及C這樣的過程語言就似乎注定了被人遺忘的命運(yùn)。目前Fortran與Cobol已經(jīng)徹底淪為利基型語言(雖然Cobol的利基范圍比較可觀,但其定位局限仍然非常明顯),而C語言則憑借著Bjarne Stroustrup的工作成果而繼續(xù)停留在公眾視野當(dāng)中——其貢獻(xiàn)是為C語言開發(fā)出了一款面向?qū)ο蟮念A(yù)處理程序,也就是我們所熟知的C++。

C++保留了C語言的特性,但同時(shí)加入了數(shù)據(jù)抽象、類以及對象等機(jī)制。這一切讓C++因?yàn)槲覀冊贚inux系統(tǒng)環(huán)境中編寫嵌入式及物聯(lián)網(wǎng)代碼時(shí)的熱門選項(xiàng)。這款編程語言自誕生至今已經(jīng)跨越了三十多年的時(shí)光,但其在如今的嵌入式及物聯(lián)網(wǎng)開發(fā)領(lǐng)域仍然極具生命力。

#p#

Java

 

C與C++從起步階段的設(shè)計(jì)初衷就一直在于對其運(yùn)行所在的硬件平臺(tái)進(jìn)行直接控制。這種特性在需要對硬件進(jìn)行細(xì)化程度極高的監(jiān)測及控制時(shí)確實(shí)優(yōu)勢明顯,但這同時(shí)也意味著我們所編寫的代碼需要從非常具體的角度考量硬件狀況。而用編程圈里的行話來說,就是代碼不太適合進(jìn)行移植。

Java的設(shè)計(jì)思路則被打造成一款面向?qū)ο笳Z言,因此具備非常出色的可移植性:編譯器當(dāng)中幾乎不存在任何硬件依賴性。而要對特定硬件進(jìn)行特殊而準(zhǔn)確的控制,Java需要借助硬件所支持的庫并從中調(diào)用通用代碼。

這一切都讓Java擁有極具吸引力的經(jīng)濟(jì)性定位:對Java代碼開發(fā)進(jìn)行一次性投入,企業(yè)將能夠獲得足以運(yùn)行在多種不同平臺(tái)之上的開發(fā)成果。Java同時(shí)也是當(dāng)前人氣最高的主流編程語言之一,其被應(yīng)用于成千上萬計(jì)算機(jī)科學(xué)與電子工程技術(shù)項(xiàng)目當(dāng)中。因此我們能夠從人才市場上輕松找到能夠勝任相關(guān)工作的應(yīng)聘者。但從另一方面講,選擇Java的問題在于我們必須確保自己所選定的平臺(tái)能夠支持Java(目前只有極少數(shù)強(qiáng)大的平臺(tái)會(huì)提供Java支持能力),同時(shí)又要保證這些硬件能夠支持我們?yōu)榱藢?shí)現(xiàn)特定控制功能所需要使用的庫。

JavaScript

從表面上看,大家很容易誤以為JavaScript屬于Java語言的某種衍生版本。完全可以理解,不過完全錯(cuò)誤。這兩種語言確實(shí)在某種程度上存在類似或者說交集(例如某些庫可以同時(shí)與二者相兼容),但二者的開發(fā)過程完全獨(dú)立而且并不共享任何語法或者語義。

顧名思義,JavaScript是一種腳本語言,被廣泛應(yīng)用于構(gòu)建Web前端應(yīng)用。如果大家打算在Raspberry Pi硬件平臺(tái)上使用Apache服務(wù)器,旨在從由Arduino傳感器構(gòu)建的網(wǎng)絡(luò)當(dāng)中提取數(shù)據(jù),那么JavaScript絕對是個(gè)很好的起步選項(xiàng)。

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

#p#

Python

這款在假期閑暇時(shí)間開發(fā)而成并借用著名喜劇團(tuán)體命名的編程語言從表面上看似乎不太可能成為嚴(yán)肅開發(fā)項(xiàng)目的備選方案。然而事實(shí)證明,Python如今已經(jīng)成為Web開發(fā)領(lǐng)域最具活力的語言選項(xiàng)之一,而且其應(yīng)用范圍已經(jīng)擴(kuò)散到了嵌入式控制以及物聯(lián)網(wǎng)領(lǐng)域。Python在很多方面擁有極為出色的靈活性表現(xiàn)。舉例來說,它作為一種解釋語言能夠被提交至單一運(yùn)行時(shí)編譯器當(dāng)中,或者通過其中內(nèi)置的預(yù)編譯器實(shí)現(xiàn)代碼運(yùn)行,從而對其緊湊的可執(zhí)行代碼進(jìn)行分發(fā)。

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

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

Go

首先必須強(qiáng)調(diào)一點(diǎn):這里說的是“Go”,而不是“Go!”二者屬于完全不同的兩種語言,而且擁有完全不同的功能定位。Go由谷歌公司負(fù)責(zé)開發(fā)并廣泛適用于各類處理器及平臺(tái)。雖然它只是眾多源自C設(shè)計(jì)理念的編程語言當(dāng)中的一種,但卻在面向特定嵌入式編程類型時(shí)擁有大量遠(yuǎn)勝C語言的功能特性。

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

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

#p#

Rust

[[151747]]

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

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

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

Parasail

[[151748]]

如果大家對于自己物聯(lián)網(wǎng)應(yīng)用程序的并行處理能力擁有一定要求,那么Parasail語言也是個(gè)值得一試的選項(xiàng)。在之前介紹Go與Rust語言時(shí),我們已經(jīng)提到了編程概念當(dāng)中的并發(fā)機(jī)制。如果大家不清楚并發(fā)與并行的區(qū)別(或者您的開發(fā)團(tuán)隊(duì)無法明確解釋二者的差異),那么請?jiān)谥志幋a之前認(rèn)真查尋相關(guān)資料,保證自己的徹底明確之后再做決定。

Parasail是一款編譯型面向?qū)ο笳Z言,其始終處于演進(jìn)當(dāng)中因此能夠通過與Java、Python、C#甚至是Ada(真的很難相信會(huì)在一種現(xiàn)代語言當(dāng)中看到Ada的名頭)類似的語法進(jìn)行編程。千萬別會(huì)錯(cuò)意,如果大家打算構(gòu)建一個(gè)物聯(lián)網(wǎng)項(xiàng)目,那么利用Ada進(jìn)行編程絕對是個(gè)不錯(cuò)的選擇。不過如果大家需要使用具備高度并行性的嵌入式代碼,那么Parasail則是最理想的語言選項(xiàng)。

#p#

B#

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

B#語言與C#在某種程度上比較類似(如果大家或者下轄技術(shù)團(tuán)隊(duì)曾經(jīng)開發(fā)過微軟.NET項(xiàng)目,那么對C#肯定不會(huì)陌生)。不過相較于C#,B#剔除了相當(dāng)一部分在嵌入式項(xiàng)目中用不到的特性,并加入了對實(shí)時(shí)控制功能的支持——這一點(diǎn)在實(shí)際使用環(huán)境下顯然非常重要。

如果大家的項(xiàng)目如果大家的開發(fā)項(xiàng)目未來會(huì)運(yùn)行在輕量級(jí)嵌入式平臺(tái)之上,其規(guī)模與復(fù)雜度皆低于Raspberry Pi,那么B#絕對是個(gè)值得認(rèn)真考慮的編程語言選項(xiàng)。

匯編語言

[[151750]]

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

不過壞消息是,匯編語言的編程工作無法借力于網(wǎng)絡(luò):大家?guī)缀跽也坏饺魏螌?shí)用工具來幫助自己揪出開發(fā)成果中的各類錯(cuò)誤。除此之外,匯編語言代碼以及相關(guān)程序編寫技能往往沒有任何承接性。具體來講,我們能夠針對一種處理器編寫出相關(guān)代碼,但這并不代表我們能夠面向其它處理器編寫出擁有同樣功能的代碼。

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

Forth

[[151751]]

Forth是另一種專門針對嵌入式系統(tǒng)編程工作做出設(shè)計(jì)與優(yōu)化的語言。雖然它的主要定位在于實(shí)現(xiàn)系統(tǒng)層級(jí)上的編程,但Forth還擁有另一大不可替代的優(yōu)勢:它有點(diǎn)像是編程世界中的黑話。舉例來講,假如說某個(gè)群體以世界語作為母語,并傾向于使用它來跟我們交流,那么不懂世界語就會(huì)讓我們處于非常尷尬的境地。而在編程世界當(dāng)中,F(xiàn)orth就是這樣一種等同于世界語的存在。

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

如果大家所在的開發(fā)團(tuán)隊(duì)中存在著大量Forth程序員,那么請享受由此帶來的完全不同的工作體驗(yàn)。而如果大家對Forth一無所知而又打算開發(fā)一款全新嵌入式項(xiàng)目,且樂于接受這一語言帶來的開發(fā)學(xué)習(xí)曲線,那么也不妨加以嘗試。不過如果各位身邊并不具備現(xiàn)成的Forth程序員儲(chǔ)備,同時(shí)又希望快速構(gòu)建出原型設(shè)計(jì)方案,那么請直接選擇其它語言。

原文標(biāo)題:11 IoT Programming Languages Worth Knowin

責(zé)任編輯:王雪燕 來源: 51CTO
相關(guān)推薦

2015-10-21 10:42:33

技術(shù)周刊

2012-03-09 17:37:20

ibmdw

2019-10-09 10:16:08

LoRaLoRaWAN局域網(wǎng)

2024-04-30 11:11:33

aiohttp模塊編程

2023-11-02 07:55:31

Python對象編程

2010-07-13 09:36:25

2010-11-19 16:22:14

Oracle事務(wù)

2020-09-21 09:53:04

FlexCSS開發(fā)

2022-08-26 13:48:40

EPUBLinux

2009-08-25 16:27:10

Mscomm控件

2010-06-23 20:31:54

2020-07-20 06:35:55

BashLinux

2019-03-31 15:11:52

物聯(lián)網(wǎng)協(xié)議物聯(lián)網(wǎng)通信網(wǎng)絡(luò)

2017-01-20 08:30:19

JavaScriptfor循環(huán)

2019-08-02 08:59:21

Token認(rèn)證服務(wù)器

2019-11-29 16:21:22

Spring框架集成

2018-02-24 13:21:02

2018-09-04 16:20:46

MySQ索引數(shù)據(jù)結(jié)構(gòu)

2013-04-10 11:16:19

iPad的MouseE

2016-10-20 08:46:17

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 黄色一级视频 | 九九热在线免费观看 | 天堂一区二区三区 | 国产在线观看一区 | 亚洲精品一级 | 国产91一区 | 国产精品久久久久久久岛一牛影视 | 免费视频一区二区 | 欧美一级大片 | 国产精品久久久久婷婷二区次 | 中文字幕在线观看一区 | 欧美激情视频一区二区三区在线播放 | 国产成人啪免费观看软件 | 精品久久久久久亚洲综合网 | 91精品国产自产在线老师啪 | 看片地址 | 天天拍天天操 | 色狠狠一区| 久久精品国产99国产 | 国产成人av在线播放 | 伊久在线| 亚洲免费观看 | 日韩精品一区二区三区视频播放 | 欧美中文字幕一区二区 | 99av成人精品国语自产拍 | 免费观看成人鲁鲁鲁鲁鲁视频 | 久久综合一区 | 日韩在线免费视频 | 国产一区久久久 | 欧美黄色一区 | 日本一级淫片免费啪啪3 | 天天色综 | 亚洲成人一区二区 | 伊人久麻豆社区 | www,黄色,com | 干干干操操操 | 97成人免费 | 一级毛片观看 | 欧美日本一区 | 午夜视频免费在线观看 | 96av麻豆蜜桃一区二区 |