<ruby id="66w77"><video id="66w77"></video></ruby>
<ruby id="66w77"><option id="66w77"><thead id="66w77"></thead></option></ruby>
  • <ruby id="66w77"><table id="66w77"></table></ruby>

  • <ruby id="66w77"><table id="66w77"></table></ruby>
    <strong id="66w77"></strong>
    物聯(lián)網(wǎng)開(kāi)發(fā)應用哪些程序語(yǔ)言比較好?
    來(lái)源:日期:2018-10-18 10:36:28點(diǎn)擊:6361次

        ?    ?目前來(lái)說(shuō),是沒(méi)有一套專(zhuān)門(mén)面向物聯(lián)網(wǎng)應用開(kāi)發(fā)的語(yǔ)言的,這不利于推動(dòng)物聯(lián)網(wǎng)的大發(fā)展,因此,必須要選擇一種適合物聯(lián)網(wǎng)特點(diǎn)的開(kāi)發(fā)語(yǔ)言。下面我們結合物聯(lián)網(wǎng)本身的特征,分析物聯(lián)網(wǎng)對應用開(kāi)發(fā)語(yǔ)言的要求。然后感覺(jué)這些要求,對現有的編程語(yǔ)言進(jìn)行分析,選擇出最適合物聯(lián)網(wǎng)應用開(kāi)發(fā)的編程語(yǔ)言。

        ?    ?一. 物聯(lián)網(wǎng)應用開(kāi)發(fā)對編程語(yǔ)言的要求

        ?    ?1. 開(kāi)發(fā)語(yǔ)言必須是跨硬件平臺的所謂跨硬件平臺,指的是編寫(xiě)的物聯(lián)網(wǎng)應用程序,能夠在多種不同的目標硬件設備上運行,而不用重新編譯甚至修改應用程序。這里的不同的目標硬件,主要是指CPU指令集,內存大小,外設的接口類(lèi)型,外設的訪(fǎng)問(wèn)方式等等硬件層面的東西。

        ?    ?如果開(kāi)發(fā)語(yǔ)言不是跨硬件平臺的,那么針對一種硬件平臺開(kāi)發(fā)的應用程序,就只能運行在這一種硬件設備上。因為硬件平臺的具體細節情況,都體現在目標程序中。最典型的例子是采用C語(yǔ)言開(kāi)發(fā)的應用程序,必須根據不同的目標CPU指令集,編譯成匹配目標指令集的二進(jìn)制代碼,才能運行。這樣如果切換到另外一種指令集的CPU,則必須重新編譯,甚至要重新修改應用程序。

        ?    ?這在硬件標準化程度非常高的個(gè)人計算機領(lǐng)域,問(wèn)題不大,因為通用的CPU類(lèi)型就那么幾種(Intel,ARM等),而且硬件配置都非常標準,硬盤(pán)等存儲設備,顯示器,鍵盤(pán)/鼠標等輸入設備,USB接口,網(wǎng)絡(luò )接口等等,都是標配。因此針對不同硬件平臺的軟件移植工作量并不大。

        ?    ?但到了物聯(lián)網(wǎng)時(shí)代,這顯然無(wú)法滿(mǎn)足物聯(lián)網(wǎng)硬件碎片化特征的需要。在物聯(lián)網(wǎng)環(huán)境中,目標設備CPU的種類(lèi)是PC時(shí)代的數十倍,同時(shí)硬件配置也各不相同,大部分物聯(lián)網(wǎng)設備的配置都千差萬(wàn)別,因此,如果仍然采用傳統的不能跨硬件的開(kāi)發(fā)語(yǔ)言來(lái)編寫(xiě)物聯(lián)網(wǎng)應用程序,那么對同一種功能的應用程序來(lái)說(shuō),就需要針對不同的CPU類(lèi)型,不同的硬件配置,分別進(jìn)行開(kāi)發(fā)和部署。

        ?    ?這顯然是無(wú)法逾越的困難。而采用跨平臺的編程語(yǔ)言,則可以解決這個(gè)問(wèn)題。比如針對智能攝像頭而言,A廠(chǎng)商的攝像頭個(gè)的配置,可能是ARM的CPU,USB接口,分辨率是1024*768等,而B(niǎo)廠(chǎng)商的攝像頭可能是基于x86的CPU,SPI接口?;跀z像頭編寫(xiě)一個(gè)人臉識別程序,如果采用跨平臺的編程語(yǔ)言,則針對A廠(chǎng)商設備編寫(xiě)的應用程序,可以直接在B廠(chǎng)家的設備上使用。

        ?    ?但是如果編程語(yǔ)言不是跨硬件平臺的,比如C/C++語(yǔ)言,則針對A廠(chǎng)家的攝像頭編寫(xiě)的應用程序,必須經(jīng)過(guò)重新編譯(甚至還需要大量的修改)之后,才能在B廠(chǎng)家的攝像頭上運行。物聯(lián)網(wǎng)設備的碎片化特征,決定了開(kāi)發(fā)語(yǔ)言必須是跨硬件平臺的。采用跨硬件平臺開(kāi)發(fā)語(yǔ)言的另外一個(gè)好處,就是限制錯誤范圍,不會(huì )因為應用程序層面的錯誤,而導致整個(gè)系統崩潰。由于物聯(lián)網(wǎng)設備硬件配置的巨大差異,由硬件與軟件不匹配導致的錯誤會(huì )大大增加。

        ?    ?比如,還是上面的智能攝像頭的例子,如果應用程序通過(guò)人臉識別,發(fā)現可疑人員進(jìn)入某個(gè)特定的范圍,則會(huì )引發(fā)報警。報警的方式有很多種,比如會(huì )給智能攝像頭的后臺發(fā)送告警信息,調用本地的揚聲器發(fā)出警報,甚至在智能攝像頭的屏幕上輸出告警文字等。很可能有的攝像頭沒(méi)有配置本地揚聲裝置,而有的攝像頭則沒(méi)有配置本地顯示器。

        ?    ?這時(shí)候上述應用程序的告警代碼,就會(huì )因為無(wú)法找到硬件而出現錯誤。如果這種錯誤不被有效隔離或者限制范圍,那么可能會(huì )導致整個(gè)系統的崩潰。一般的采用跨平臺編程語(yǔ)言開(kāi)發(fā)的應用程序,都是運行在一個(gè)虛擬機或者解釋引擎之上的。虛擬機或者解釋引擎進(jìn)一步運行在物聯(lián)網(wǎng)設備的操作系統上。應用程序層面的錯誤,會(huì )被虛擬機或者解釋引擎捕獲,并進(jìn)行特定的處理,比如終止應用程序的運行,而不會(huì )把應用層面的錯誤傳播到系統層面。

        ?    ?但是傳統的非跨硬件平臺的編程語(yǔ)言,則無(wú)法限制錯誤范圍。比如,采用C語(yǔ)言開(kāi)發(fā)的應用程序,如果因為堆棧溢出或者指針錯誤而導致內存紊亂,則會(huì )導致整個(gè)系統崩潰,尤其是在內存管理單元(MMU)功能缺失的情況下,而這在物聯(lián)網(wǎng)應用中是非常普遍的??缬布脚_編程語(yǔ)言的一個(gè)不足,就是其運行效率會(huì )比傳統的編譯型語(yǔ)言(C/C++等)要低一些。這是因為大多數跨硬件平臺的語(yǔ)言,都需要一個(gè)虛擬機(VM)或解釋引擎的支持才能正常運行。

        ?    ?虛擬機或者解釋引擎本身是一個(gè)運行在物聯(lián)網(wǎng)操作系統之上的一個(gè)應用程序,它會(huì )讀取應用程序的可執行文件或者源代碼,然后分析解釋?zhuān)D換為目標CPU的指令并啟動(dòng)運行。而傳統的編譯型語(yǔ)言,則直接把源代碼編譯為目標計算機的指令集,可以直接被CPU執行。顯然,這個(gè)中間轉換的過(guò)程,會(huì )降低應用程序的執行效率。但是執行效率降低的程度,與虛擬機或者解釋引擎的實(shí)現強相關(guān)。

        ?    ?有的虛擬機或者解釋引擎,采用一些優(yōu)化算法,并運用諸如“一次解釋?zhuān)啻芜\行”等機制,可以使得這種效率上的損失降到最低。比如Google推出的V8引擎,可以使得JavaScript語(yǔ)言編寫(xiě)的應用程序,能夠基本達到C/C++程序的水平。因此,與跨硬件平臺編程語(yǔ)言配合的VM或者解釋器,也是至關(guān)重要的。

        ?    ?但無(wú)論如何優(yōu)化,JavaScript等跨硬件平臺語(yǔ)言始終無(wú)法真正趕上或者超于C/C++等編譯型語(yǔ)言的效率。因此在一些對實(shí)時(shí)性和執行效率要求及其嚴格的場(chǎng)合,比如飛行控制,比如核電監控等等應用領(lǐng)域,在應用之前必須經(jīng)過(guò)細致詳盡的評估測試。如果跨平臺語(yǔ)言無(wú)法滿(mǎn)足目標場(chǎng)景的應用,那么建議還是采用傳統語(yǔ)言來(lái)進(jìn)行應用程序的開(kāi)發(fā)。

        ?    ?畢竟,采用跨平臺語(yǔ)言的初衷,是為了更好的擴大物聯(lián)網(wǎng)應用程序的運行范圍,能夠降低開(kāi)發(fā)效率和開(kāi)發(fā)難度,快速的形成物聯(lián)網(wǎng)生態(tài)圈。而這類(lèi)要求極高的場(chǎng)景,已超出這個(gè)范疇。因此,對傳統編程語(yǔ)言和編程API的支持,是物聯(lián)網(wǎng)操作系統必須能夠提供的能力。

        ?    ?2. 支持完善的面向對象機制面向對象是一種程序設計方法,或者說(shuō)它是一種程序設計范型,其基本思想是使用對象,類(lèi),繼承,封裝,消息等基本概念來(lái)模擬現實(shí)世界,從而完成程序設計任務(wù)。而在面向對象編程思想出現之前,軟件行業(yè)流行的是模塊化的編程思想,即把一個(gè)大的計算機程序(或者代碼),按照功能拆分為一個(gè)一個(gè)小的源代碼模塊,通過(guò)明確定義的接口(API),把不同的功能模塊組裝在一起,形成最終的計算機程序。而面向對象則是從現實(shí)世界中客觀(guān)存在的事物(即對象)出發(fā)來(lái)構造軟件系統,并在系統構造中盡可能運用人類(lèi)的自然思維方式,強調直接以問(wèn)題域(現實(shí)世界)中的事物為中心來(lái)思考問(wèn)題,認識問(wèn)題,并根據這些事物的本質(zhì)特點(diǎn),把它們抽象地表示為系統中的對象,作為系統的基本構成單位(而不是用一些與現實(shí)世界中的事物相關(guān)比較遠,并且沒(méi)有對應關(guān)系的其它概念來(lái)構造系統)。

        ?    ?這可以使系統直接地映射問(wèn)題域,保持問(wèn)題域中事物及其相互關(guān)系的本來(lái)面貌。面向對象編程方法,可以讓程序員以更接近實(shí)際世界的方式來(lái)理解應用場(chǎng)景,建立程序開(kāi)發(fā)模型,同時(shí)也可以大大加快開(kāi)發(fā)速度。對于大型的軟件,面向對象思想可以簡(jiǎn)化開(kāi)發(fā)維護過(guò)程,降低開(kāi)發(fā)成本。在物聯(lián)網(wǎng)領(lǐng)域,面向對象編程思想更有價(jià)值。因為我們面對的是一個(gè)一個(gè)的“物”,每個(gè)物體都可以抽象為程序開(kāi)發(fā)領(lǐng)域的一個(gè)對象,通過(guò)不同對象(物)之間的消息交互,可以快速完成復雜應用系統的開(kāi)發(fā)。

        ?    ?相比傳統的模塊化編程思想,面向對象編程思想更適合物聯(lián)網(wǎng)應用開(kāi)發(fā)。需要說(shuō)明的是,面向對象編程思想是一種方法,是一種編程的理念,理論上說(shuō),與具體的編程語(yǔ)言是沒(méi)有關(guān)系的。眾所周知,C語(yǔ)言是面向過(guò)程的開(kāi)發(fā)語(yǔ)言,但是完全可以用C語(yǔ)言開(kāi)發(fā)以面向對象思想設計的應用程序。比如HelloX物聯(lián)網(wǎng)操作系統,完全采用面向對象的思想設計,但是在實(shí)現時(shí),確是采用C語(yǔ)言來(lái)實(shí)現的。具體來(lái)說(shuō),就是采用C語(yǔ)言的函數指針,結構體等等語(yǔ)言特性,來(lái)模擬出“對象”,“方法”,“消息”,甚至“繼承”等等面向對象的概念。

        ?    ?另外一個(gè)例子就是,著(zhù)名的Windows NT操作系統內核,是完全按照面向對象思想設計的,但是其實(shí)現,仍然是采用C語(yǔ)言。但如果采用面向對象的語(yǔ)言,以面向對象的方法來(lái)開(kāi)發(fā)物聯(lián)網(wǎng)應用程序,會(huì )更加事半功倍。之所以用傳統的非面向對象語(yǔ)言來(lái)開(kāi)發(fā)應用程序,是一種折中的選擇。因為如果采用C++或者Java等面向對象的語(yǔ)言,則由于語(yǔ)言本身的一些機制,會(huì )給操作系統級的開(kāi)發(fā)帶來(lái)影響。而且采用面向過(guò)程的語(yǔ)言來(lái)仿真面向對象編程語(yǔ)言,也是不徹底的,很多機制根本無(wú)法模仿,比如函數或方法的重載,動(dòng)態(tài)對象類(lèi)型等等。

        ?    ?如果不是系統級的程序開(kāi)發(fā),不是必須要用C或者匯編等這一類(lèi)底層編程語(yǔ)言,那么采用面向對象的編程語(yǔ)言是最好選擇。而物聯(lián)網(wǎng)應用開(kāi)發(fā)則符合這個(gè)前提,它是應用層面的開(kāi)發(fā),不需要對底層硬件進(jìn)行管理和操作,因此不需要C/匯編等底層語(yǔ)言。這樣采用諸如Java,JavaScript,Python等面向對象的語(yǔ)言,并采用面向對象的思想,顯然是最好選擇。

        ?    ?3. 支持事件驅動(dòng)機制與以人為中心的傳統軟件開(kāi)發(fā)模式不同,物聯(lián)網(wǎng)時(shí)代的軟件,都是受“事件”驅動(dòng)的。面向物聯(lián)網(wǎng)的程序,大多數情況下處理的是一個(gè)一個(gè)的外部事件,根據外部事件做出響應。比如一個(gè)火警探測設備,會(huì )針對“探測到起火”等異步事件,做出對應的動(dòng)作。物聯(lián)網(wǎng)軟件開(kāi)發(fā),很多情況下就是編寫(xiě)一個(gè)一個(gè)的事件處理程序,并與事先定義好的事件關(guān)聯(lián)在一起。這樣一旦外部事件發(fā)生,則處理程序就會(huì )被調用。

        ?    ?這種以“事件”為中心的物聯(lián)網(wǎng)編程方法,必須配以能夠支持完善事件驅動(dòng)機制的開(kāi)發(fā)語(yǔ)言。需要說(shuō)明的是,事件驅動(dòng)是一種程序設計的方法,或者機制。很多語(yǔ)言都可以實(shí)現事件驅動(dòng)的編程機制。比如C語(yǔ)言,通過(guò)聯(lián)合運用回掉函數,函數指針等等語(yǔ)言特性,可以實(shí)現復雜的事件驅動(dòng)機制。最典型的Windows操作系統,就是采用C語(yǔ)言實(shí)現了完整的事件驅動(dòng)機制。

        ?    ?但是不同的語(yǔ)言,實(shí)現事件驅動(dòng)機制的難易程度不同。采用C語(yǔ)言實(shí)現事件機制,需要相對復雜的語(yǔ)言特性,而且要設計一套復雜的底層框架來(lái)支持。但有的語(yǔ)言,實(shí)現事件機制則會(huì )相對簡(jiǎn)單。比如JavaScript語(yǔ)言,由于其動(dòng)態(tài)類(lèi)型的特征,以及函數本身就是對象的特點(diǎn),實(shí)現事件驅動(dòng)機制會(huì )非常簡(jiǎn)單。

        ?    ?4. Internet親和性所謂Internet親和性,是指能夠與現有的Internet相關(guān)標準兼容,采用這種語(yǔ)言開(kāi)發(fā)的應用程序,能夠簡(jiǎn)單容易的集成到Internet上。我們認為,物聯(lián)網(wǎng)不會(huì )是一個(gè)全新的網(wǎng)絡(luò ),不會(huì )從零開(kāi)始建立,它必然是基于現有Internet的延伸。支撐Internet的大部分核心協(xié)議,比如IP協(xié)議,TCP/UDP協(xié)議,HTTP/HTTPS協(xié)議,都會(huì )在物聯(lián)網(wǎng)應用中得到重用。同時(shí),Internet上的數據傳輸格式,比如JSON,XML,正則表達式(RegExp),也會(huì )被大量重用到物聯(lián)網(wǎng)中。這樣物聯(lián)網(wǎng)就可以很容易的與現有的Internet互通和集成,重用現有的Internet基礎架構。在此基礎上,再進(jìn)一步擴展和壯大。鑒于此,物聯(lián)網(wǎng)應用程序開(kāi)發(fā)語(yǔ)言,應該能夠有效支持上述Internet已有的協(xié)議和特性。

        ?    ?當然,從理論上說(shuō),任何編程語(yǔ)言通過(guò)有效擴展,都可以實(shí)現上述特性的支持。即使匯編語(yǔ)言,我們對其從底層對其進(jìn)行擴展,比如先實(shí)現一個(gè)基于匯編語(yǔ)言的TCP/IP協(xié)議棧,基于此協(xié)議棧再實(shí)現一系列的協(xié)議,包括HTTP/HTTPS等。對于數據交換格式的支持,我們也通過(guò)匯編語(yǔ)言,實(shí)現完整的JSON,XML等數據格式的封裝和解析,實(shí)現完全的正則表達式。這樣缺少什么,就補充什么,必然能夠達到與Internet完全互通的目的。

        ?    ?但是這種代價(jià)就太大了,從實(shí)現角度,基本上是不可行的。而有的語(yǔ)言,由于在Internet應用開(kāi)發(fā)中被廣泛應用,從而對上述特性有了成熟廣泛的支持。比如JavaScript,大部分的Intrernet前端應用程序(即在瀏覽器內運行的Internet頁(yè)面,腳本,或者插件等)都是采用JavaScript開(kāi)發(fā)。隨著(zhù)Node.js的流行和壯大,導致現在很多Internet的后端應用,都是采用JavaScript開(kāi)發(fā)的。而且在Internet的數據交互中被廣泛采用的JSON標準,也是直接由JavaScript發(fā)展而來(lái)。

        ?    ?JSON,就是JavaScript Object Notation的縮寫(xiě),是JavaScript用于內部標識對象的數據格式。由于這種格式簡(jiǎn)單明了,表示能力強,逐漸替代了廣泛使用的XML,成為Internet事實(shí)上的數據表示標準。因此,如果采用JavaScript作為Internet的應用開(kāi)發(fā)語(yǔ)言,那就會(huì )天然支持Internet已有的協(xié)議和標準,從而與Internet做到最大程度的兼容和親和。

        ?    ?5. 運行環(huán)境緊湊,占用內存少所謂的運行環(huán)境,是指支撐應用程序正常運行的相關(guān)組件,這些組件不屬于某一個(gè)特定的應用程序,是所有采用同一種編程語(yǔ)言開(kāi)發(fā)的應用程序都需要的公共組件。比如針對C/C++語(yǔ)言,C運行庫(clib)和C++運行庫就是運行環(huán)境的一部分,幾乎所有的C/C++應用程序,都需要C運行庫的支持。操作系統在加載應用程序的時(shí)候,同時(shí)要加載這些運行庫組件。

        ?    ?運行庫提供了應用程序所需的最基本函數和功能調用。 ?對于Java或者JavaScript,Python等這一類(lèi)跨平臺的編程語(yǔ)言,除公共代碼庫等組件外,還需要虛擬機或者解釋引擎的支持。對Java語(yǔ)言來(lái)說(shuō),采用Java語(yǔ)言開(kāi)發(fā)的應用程序首先被編譯為Java字節碼,然后被Java虛擬機加載和執行。而對于JavaScript等腳本語(yǔ)言來(lái)說(shuō),則直接被解釋引擎加載和解釋。

        ?    ?從操作系統的視角來(lái)看,虛擬機或者解釋引擎本身就是一個(gè)應用程序。在物聯(lián)網(wǎng)環(huán)境中,如果某一種開(kāi)發(fā)語(yǔ)言的運行環(huán)境太大,在一些資源受限的場(chǎng)合就無(wú)法使用。因此,物聯(lián)網(wǎng)應用開(kāi)發(fā)語(yǔ)言的運行環(huán)境,必須足夠緊湊,占用內存必須足夠少。比如,在最極端的情況下,如果運行環(huán)境對內存的最低要不應該超過(guò)64K字節。

        ?    ? 6. 使用簡(jiǎn)單方便,開(kāi)發(fā)快速物聯(lián)網(wǎng)操作系統的最核心價(jià)值,就是提供一個(gè)公共的物聯(lián)網(wǎng)運行和開(kāi)發(fā)平臺,使得各種各樣的物聯(lián)網(wǎng)應用程序,都可以在這個(gè)平臺上開(kāi)發(fā)和運行。這樣逐漸積累,最終會(huì )形成一個(gè)類(lèi)似移動(dòng)互聯(lián)網(wǎng)領(lǐng)域的生態(tài)鏈,支撐物聯(lián)網(wǎng)的大發(fā)展。而物聯(lián)網(wǎng)應用開(kāi)發(fā)語(yǔ)言是支撐這個(gè)生態(tài)環(huán)境壯大的基礎。

        ?    ?如果物聯(lián)網(wǎng)開(kāi)發(fā)模式依然采用傳統的嵌入式開(kāi)發(fā)模式,采用C或者匯編作為主要的開(kāi)發(fā)語(yǔ)言,需要程序員掌握硬件層面的每一個(gè)細節,包括CPU的指令集,硬件的I/O接口,甚至需要通過(guò)信號分析儀器去分析芯片的管腳輸入和輸出,則是無(wú)法推動(dòng)物聯(lián)網(wǎng)生態(tài)鏈發(fā)展壯大的。這種開(kāi)發(fā)模式的入門(mén)門(mén)檻太高,而且開(kāi)發(fā)效率太低,針對某一個(gè)硬件或者場(chǎng)景開(kāi)發(fā)的代碼,無(wú)法復用到其它的場(chǎng)景中。

        ?    ?因此,物聯(lián)網(wǎng)開(kāi)發(fā)語(yǔ)言和對應的開(kāi)發(fā)模式必須足夠簡(jiǎn)單,足夠方便,把這種傳統的開(kāi)發(fā)門(mén)檻徹底降下來(lái)。理想的目標是,任何一個(gè)具有計算機基礎的人員,經(jīng)過(guò)幾天甚至數小時(shí)的學(xué)習,就可以開(kāi)發(fā)出實(shí)用的物聯(lián)網(wǎng)程序。更理想的是,直接對已有的被廣泛使用的編程語(yǔ)言進(jìn)行改造,使之直接應用于物聯(lián)網(wǎng)應用程序的開(kāi)發(fā)。這樣就可以充分利用已有的人才和代碼積累,“站在巨人的肩膀上”。

        ?    ?比較典型的例子就是移動(dòng)互聯(lián)網(wǎng)領(lǐng)域的Android操作系統,采用Java語(yǔ)言作為應用程序開(kāi)發(fā)語(yǔ)言,這樣直接就繼承了現有的豐富的Java開(kāi)發(fā)資源,把當前數量龐大的Java工程師一下子變成了“Android程序員”。同時(shí),對于開(kāi)發(fā)物聯(lián)網(wǎng)程序的方法和工具,也應該充分降低門(mén)檻。原有的嵌入式開(kāi)發(fā)模式,需要安裝專(zhuān)業(yè)的工具(編譯器,連接器,調試器等),同時(shí)需要復雜的命令來(lái)構筑開(kāi)發(fā)工具鏈。很多對嵌入式開(kāi)發(fā)感興趣的工程師,都因為開(kāi)發(fā)環(huán)境的復雜,工具鏈的繁瑣,而望而卻步。

        ?    ?物聯(lián)網(wǎng)應用開(kāi)發(fā)必須改變這種狀況,對開(kāi)發(fā)人員“足夠友好”。比如,采用單一的工具或集成開(kāi)發(fā)環(huán)境,就可以完成程序的編寫(xiě),編譯,調試,模擬運行等所有開(kāi)發(fā)工作。更簡(jiǎn)單的方式是,直接采用腳本語(yǔ)言,開(kāi)發(fā)人員甚至不需要安裝任何開(kāi)發(fā)工具,直接通過(guò)記事本等文本編輯器編輯代碼,然后直接上傳到物聯(lián)網(wǎng)設備中即可運行。這樣開(kāi)發(fā)門(mén)檻降下來(lái)了,自然會(huì )有大量的程序員加入進(jìn)來(lái)。再建立一種代碼分享機制,就會(huì )形成滾雪球效應,最終促進(jìn)物聯(lián)網(wǎng)生態(tài)環(huán)境的大發(fā)展。

        ?    ?從這個(gè)角度看,傳統的編譯型語(yǔ)言,比如C/C++,已經(jīng)不適合物聯(lián)網(wǎng)應用的開(kāi)發(fā)。而腳本語(yǔ)言,比如JavaScript,則更有優(yōu)勢。二. 常見(jiàn)計算機開(kāi)發(fā)語(yǔ)言對比分析下面對當前常見(jiàn)的計算機程序設計語(yǔ)言進(jìn)行分析,比對物聯(lián)網(wǎng)應用開(kāi)發(fā)對編程語(yǔ)言的要求,看看哪一種編程語(yǔ)言更適合物聯(lián)網(wǎng)的需求。

        ?    ?JavaScript是最適合物聯(lián)網(wǎng)應用開(kāi)發(fā)的。首先,把不能支持“跨硬件平臺”特性的語(yǔ)言排除掉,這樣C/C++語(yǔ)言就被排除出可選范圍。再對比事件驅動(dòng)機制和Internet親和性?xún)蓚€(gè)角度,發(fā)現JavaScript語(yǔ)言最具有優(yōu)勢。對于運行環(huán)境的緊湊程度,Java和JavaScript不相上下,而Python語(yǔ)言目前不具有優(yōu)勢。因此綜合對比下來(lái),JavaScript語(yǔ)言最適合物聯(lián)網(wǎng)應用的開(kāi)發(fā)。

        ?    ?下面對每種語(yǔ)言,進(jìn)行簡(jiǎn)單分析。首先看C語(yǔ)言,這是目前物聯(lián)網(wǎng)和嵌入式領(lǐng)域應用開(kāi)發(fā)的主流語(yǔ)言。但是由于C語(yǔ)言是一種編譯型語(yǔ)言,必須由編譯器根據目標硬件的CPU指令集,把C語(yǔ)言編譯成適應特定硬件的可執行代碼。這樣的問(wèn)題是,必須針對所有的目標硬件,都要對C語(yǔ)言進(jìn)行編譯和鏈接。同時(shí)由于硬件層面的差異性,在一種硬件平臺上開(kāi)發(fā)的C語(yǔ)言應用,在移植到另外一個(gè)硬件平臺上時(shí),必須修改源代碼。這顯然大大限制了C程序的應用范圍。實(shí)際上,現在有大量的C語(yǔ)言代碼,但是這些代碼都是針對特定硬件開(kāi)發(fā)的,因此無(wú)法直接移植。

        ?    ?C++語(yǔ)言的情況與此類(lèi)似。C語(yǔ)言是一種面向過(guò)程的語(yǔ)言,沒(méi)有內置的面向對象機制。這不像C++語(yǔ)言,C++語(yǔ)言提供了完整的面向對象編程語(yǔ)法和機制,比如class關(guān)鍵字,template關(guān)鍵字,類(lèi)的繼承,虛函數和函數重載等。這些豐富的面向對象的語(yǔ)言特性,可以使得C++語(yǔ)言很好的支持面向對象的開(kāi)發(fā)。但C語(yǔ)言就沒(méi)有提供此類(lèi)內置特性,因此不是一種面向對象的編程語(yǔ)言。雖然采用C語(yǔ)言的函數指針,回掉函數,結構體(struct)等語(yǔ)言特性,可以實(shí)現簡(jiǎn)單的面向對象機制和事件驅動(dòng)機制,但是與其它內置這些特性的開(kāi)發(fā)語(yǔ)言相比,實(shí)現起來(lái)非常繁瑣,且有的特性根本無(wú)法實(shí)現。

        ?    ?雖然C語(yǔ)言有這些不足,但是始終無(wú)法否認C語(yǔ)言是“編程語(yǔ)言之王”的崇高地位。正是C語(yǔ)言及C語(yǔ)言開(kāi)發(fā)的軟件,比如UNIX操作系統,Linux操作系統等,奠定了計算機領(lǐng)域的核心軟件基礎。支撐國計民生的核心系統中運行的核心程序,比如電力系統,航空航天系統,鐵路運輸系統,核電控制系統,通信網(wǎng)絡(luò )系統等等,大部分都是采用C語(yǔ)言開(kāi)發(fā)。毫不夸張的說(shuō),是C語(yǔ)言支撐起了當前的計算機和網(wǎng)絡(luò )世界。

        ?    ?其它語(yǔ)言的底層運行環(huán)境,比如Java虛擬機,JavaScript解釋引擎,Python解釋引擎等等,都是采用C語(yǔ)言開(kāi)發(fā)。即使C語(yǔ)言滿(mǎn)足不了我們在這里定義的物聯(lián)網(wǎng)編程語(yǔ)言的要求,但是在一些性能和實(shí)時(shí)性要求極端的場(chǎng)合,C語(yǔ)言仍然是唯一選擇。C++語(yǔ)言的大部分情況與C語(yǔ)言類(lèi)似。但與C語(yǔ)言不同的是,C++提供了豐富完整的面向對象編程機制。但正是這些面向對象機制,使得C++語(yǔ)言的運行環(huán)境變得比C復雜和不確定,在對目標可執行代碼要求嚴格的嵌入式及操作系統領(lǐng)域,C++并不如C語(yǔ)言合適。

        ?    ?比如,為了實(shí)現C++語(yǔ)言的對象構造函數和析構函數,異常機制,虛函數等特性,C++語(yǔ)言編譯器在編譯的目標代碼中,植入了程序員不可見(jiàn)的代碼。這對系統級的編程是非常致命的,因為這些不可見(jiàn)的內置代碼,系統程序員無(wú)法感知,出了問(wèn)題也無(wú)從查起。但是由于C++語(yǔ)言的面向對象及編譯型語(yǔ)言的高效快速等特征,使得C++語(yǔ)言非常適合對性能要求較高的應用程序開(kāi)發(fā),比如游戲應用,Internet瀏覽器等性能要求較高的大型應用程序。

        ?    ?但是由于C++語(yǔ)言不能跨硬件平臺,因此不適合物聯(lián)網(wǎng)應用開(kāi)發(fā)。Java作為一種面向對象和跨平臺語(yǔ)言,是比較適合物聯(lián)網(wǎng)應用對開(kāi)發(fā)語(yǔ)言的要求的。但是由于Java語(yǔ)言的開(kāi)放程度并不如其它語(yǔ)言高,涉及到一些知識產(chǎn)權的糾葛。同時(shí)Oracle公司對Java的支持力度越來(lái)越低,因此Java語(yǔ)言呈現出逐漸式微的態(tài)勢。同時(shí),在Internet親和性及事件驅動(dòng)機制的支持力度上,Java并不如JavaScript,因此在我們的對比中,Java也被淘汰出局。Python語(yǔ)言也是一種被廣泛應用的腳本編程語(yǔ)言,尤其是在大數據分析,數學(xué)處理領(lǐng)域,得到廣泛應用。

        ?    ?但是其Internet親和性并不如JavaScript,同時(shí)截至目前,Python解釋器并沒(méi)有被優(yōu)化到可以支持資源受限系統應用的水平,因此Python仍然不如JavaScript。綜合比對下來(lái),在物聯(lián)網(wǎng)應用開(kāi)發(fā)領(lǐng)域,JavaScript最終勝出。接下來(lái),我們對JavaScript語(yǔ)言進(jìn)行更加詳細的闡述。需要說(shuō)明的是,這僅僅是在“物聯(lián)網(wǎng)應用”開(kāi)發(fā)領(lǐng)域,JavaScript具備優(yōu)勢。

        ?    ?在對性能和可靠性要求極度苛刻的物聯(lián)網(wǎng)系統級開(kāi)發(fā)場(chǎng)景,JavaScript仍然不適合,C語(yǔ)言仍然是這種場(chǎng)景的唯一選擇。還有其它一些比較流行的語(yǔ)言,比如C#,VB,VBScript,GO,Delphi,Object-C等編程語(yǔ)言,我們并沒(méi)有進(jìn)行重點(diǎn)分析和比對。這是因為有些語(yǔ)言的開(kāi)放性不足,比如C#或者Object-C,都只能在廠(chǎng)商特定的平臺或工具上開(kāi)發(fā),還有一些語(yǔ)言的應用場(chǎng)景比較局限,因此暫時(shí)不作為重點(diǎn)分析對象。

        ?    ?因此,綜上所述,就目前來(lái)說(shuō),我們認為JavaScript是比較適合物聯(lián)網(wǎng)應用開(kāi)發(fā)的編程語(yǔ)言。隨著(zhù)物聯(lián)網(wǎng)的發(fā)展,未來(lái)或許有更加合適的編程語(yǔ)

    相關(guān)推薦

      92视频在线精品国自产拍_乱色熟女综合一区二区_国产精品毛片久久久久久久_久天啪天天久久99久孕妇
      <ruby id="66w77"><video id="66w77"></video></ruby>
      <ruby id="66w77"><option id="66w77"><thead id="66w77"></thead></option></ruby>
    • <ruby id="66w77"><table id="66w77"></table></ruby>

    • <ruby id="66w77"><table id="66w77"></table></ruby>
      <strong id="66w77"></strong>