C/C++編程語言在嵌入式系統(tǒng)編程中占據(jù)主導地位,盡管它們有許多缺點。另一方面,Python有許多優(yōu)點,使其成為嵌入式開發(fā)的優(yōu)秀語言。讓我們看看每一個利弊,以及為什么你應該考慮Python作為嵌入式編程。
C/C++是編譯語言,而Python是解釋語言。C/C++已經(jīng)存在了很多年;C是1969首次開發(fā)的,1983是C++。Python比Guido
van
Rossum在1989年創(chuàng)建的Python更年輕。從那時起,它就成為最流行的開源編程語言之一。所有Python版本都是開源的,可以自由使用和分發(fā),即使對于商業(yè)項目也是如此。
Python的情況
據(jù)相關研究表明,超過95%的嵌入式開發(fā)中代碼是用C/C++編寫的。對于Python來說,嵌入式系統(tǒng)上的這種遺留問題可能很難克服,但它的屬性和用Python編寫代碼的人數(shù)可能有助于它在未來超越C/C++。
雖然C/C++編寫速度慢,容易出錯,而且經(jīng)常不可讀,但Python以其可寫性、減少錯誤和可讀性而聞名??勺x性的重要性無論怎樣強調都不為過:當在團隊中工作時,可讀性對于維護代碼至關重要。除非你愿意花更多的時間和金錢在調試和質量保證上,否則它必須很容易理解。Python的設計重用遠遠超過了C/C++,在當今的敏捷環(huán)境中,設計重用是保持領先還是落后于競爭對手的區(qū)別。
嵌入式算法變得越來越復雜。簡單的控制循環(huán)正被神經(jīng)網(wǎng)絡和其他幫助Python站穩(wěn)腳跟的復雜過程所取代。雖然Theano主要是用C/C++編寫的,但Python用于以人性化的方式與高性能庫進行接口。Python庫正在蓬勃發(fā)展PyPI,Python包索引,有超過80000個模塊,這些龐大的匯編讓嵌入式開發(fā)人員可以選擇跳過幾個步驟,在自己的代碼中使用已經(jīng)建立的函數(shù),從而極大地提高了生產率。
C/C++的情況
C/C++的情況非常明顯:它創(chuàng)建了更緊湊、更快的運行時代碼,并且它已經(jīng)是95%嵌入式系統(tǒng)代碼的首選語言。雖然Python在運行時的效率可能不如C/C++,但在開發(fā)過程中它的效率要高得多。解釋器讀取每一行代碼,解析它,執(zhí)行運行時檢查和調用例程,以便執(zhí)行代碼中的操作。這比運行C/C++代碼要活躍得多,在C/C++代碼中,同一行代碼可能只編譯成兩條指令。這會導致Python運行速度變慢,能耗增加。
提高Python的速度
因此,與C/C++相比,Python的主要缺點是它的運行速度,但是有幾種方法可以優(yōu)化代碼,使其運行更高效。除了像Theano這樣的庫之外,還有像Cython這樣的Python優(yōu)化擴展,具有靜態(tài)類型和關鍵字,可以更快地運行數(shù)學,輕松地編譯為C/C++并以C/C++的速度運行。JIT編譯器是提高Python運行速度的另一個好方法,這個編譯器與Python的解釋器并行工作,為循環(huán)中的代碼生成已編譯的機器指令,使解釋器的后續(xù)傳遞執(zhí)行得更快。pypyjit編譯器能夠將Python的執(zhí)行速度提高近兩倍。但是,JIT編譯器應該只在有足夠空間的情況下使用,而嵌入式開發(fā)系統(tǒng)通常不會有太多的空閑空間。最好的優(yōu)化是使用更好的數(shù)據(jù)結構和算法,但這是軟件設計和實現(xiàn)中最困難的任務,因此最好使用上述工具之一,具體取決于你的技能水平。
使用Python與嵌入式系統(tǒng)通信
當Python被用作用戶和他們正在使用的嵌入式系統(tǒng)之間的通信中間時,它可能是最強大的。通過Python向嵌入式系統(tǒng)發(fā)送消息或從嵌入式系統(tǒng)發(fā)送消息允許用戶自動化測試。Python腳本可以將系統(tǒng)置于不同的狀態(tài),設置配置,并測試各種真實世界的用例。Python還可用于接收可存儲用于分析的嵌入式系統(tǒng)數(shù)據(jù)。然后,程序員可以使用Python開發(fā)參數(shù)和其他分析數(shù)據(jù)的方法。
目前,關于Python和C/C++優(yōu)點的主要爭論歸結為對您的團隊更重要的東西:開發(fā)速度還是運行時速度。不過,在未來,可能不需要Python程序員來證明它在嵌入式系統(tǒng)中的應用,而需要嵌入式開發(fā)人員來考慮如何適應Python不斷增長的流行。