Python究竟屬不屬於嵌入式語言?

2022-07-16 12:01:39

寫在前面:

幾十年來,大家普遍的認為C與C++才是標準的嵌入式語言,那麼現在大火的Python算是一種嵌入式語言嗎?

在給出我的答案之前我們要先明確幾個問題?

什麼是Python?

程式語言的定義?

程式語言(英語:programming language),是用來定義計算機程式的形式語言。它是一種被標準化的交流技巧,用來向計算機發出指令,一種能夠讓程式設計師準確地定義計算機所需要使用資料的計算機語言,並精確地定義在不同情況下所應當採取的行動。

最早的程式語言是在電腦發明之前產生的,當時是用來控制提花織布機及自動演奏鋼琴的動作。在電腦領域已發明了上千不同的程式語言,而且每年仍有新的程式語言誕生。很多程式語言需要用指令方式說明計算的程式,而有些程式語言則屬於宣告式程式設計,說明需要的結果,而不說明如何計算。

程式語言的分類?

程式語言主要分為編譯型和解釋型,靜態語言和動態語言,強型別和弱型別,混合語言等。

編譯型語言

通過編譯器把原始碼編譯(compile)成機器語言,在經過連結(linker)將原始碼中所使用的庫串聯起來生成可執行二進位制檔案,這樣執行時計算機可以直接以機器語言來執行程式。

優點:執行效率高。
缺點:編譯之後如果需要修改程式碼需要重新編譯整個模組。
編譯的時候根據對應的執行環境生成機器碼,不同的作業系統之間移植就會有問題,需要根據執行的作業系統環境編譯不同的可執行檔案
代表語言:C,C++,Objective-C等。

直譯語言

不需要編譯,只在程式執行時才逐條翻譯成機器語言。這種程式語言需要利用直譯器,在執行期,動態將程式碼逐句解釋為機器程式碼,或是已經預先編譯為機器程式碼的子程式,之後再執行。
優點:跨平臺支援比較好,
缺點:程式執行效率會比較慢。
如:python,php,Perl等。

Python

Python是一種廣泛使用的解釋型、高階和通用的程式語言。

Python支援多種程式設計範型,包括函數式、指令式、反射式、結構化和物件導向程式設計。
它擁有動態型別系統和垃圾回收功能,能夠自動管理記憶體使用,並且其本身擁有一個巨大而廣泛的標準庫。它的語言結構以及物件導向的方法旨在幫助程式設計師為小型的和大型的專案編寫清晰的、合乎邏輯的程式碼。
Python開發者的哲學是「用一種方法,最好是隻有一種方法來做一件事」。

Python優缺點

優點:

  • 1、python的定位是「優雅」、「明確」、「簡單」,所以python程式看上去總是簡單易懂,對於初學者容易入門。
  • 2、開發效率高,python有非常強大的第三方庫,基本上你想通過計算機實現任何功能,python官方庫裡都有相應的模組進行支援,直接下載呼叫後,在基礎庫的基礎上進行開發,大大降低開發週期,避免重複造輪子。
  • 3、高階語言,當使用python語言編寫程式時,無需考慮如何管理記憶體等底層細節。
  • 4、可移植性,由於它開源的本質,python已經被移植在許多平臺上,如果你小心的避免使用依賴於系統特性,那麼你的所有python程式無需修改就幾乎可以在市場上所有的系統平臺執行。
  • 5、可延伸性,如果你需要你的一段關鍵程式碼執行得更快或者希望某些演演算法不公開,可以把部份程式用C或C++編寫庫,然後用python呼叫。

缺點:

  • 1、速度慢,由於是解釋型所以執行速度相比編譯型語言要慢,跟Java相比也要慢一些。
  • 2、程式碼不能加密,因為python是直譯語言,它的原始碼都是以明文形式存放的,所以如果專案要求原始碼必須保密或者加密,那一開始就不應該考慮用python來實現。
  • 3、強制縮排,單行語句不用寫分號對於習慣了C/C++使用者可能不是太習慣。

小結

從上面的資訊可以看出,Python與標準的C/C++還是有很大的不同的,這些不同甚至從該語言的設計之初就決定了。

但我們僅從前後兩者不同就能簡單的得出結論嗎?顯然不合適,所以我們還需要知道什麼是嵌入式語言?

什麼是嵌入式語言?

什麼是嵌入式?

嵌入式,英語是 embedded,表示「嵌入式的,植入的,內含的」。
首先,嵌入式有不少組合名詞,例如嵌入式系統,嵌入式軟體,Linux 嵌入式,Android 嵌入式,嵌入式 Web,等等。
IEEE電氣工程師學會:

嵌入式系統是控制、監視或輔助機器和裝置執行的裝置。

從這裡可以看出,老外們是特別看重應用的,一切講究實際,不抽象,直接就是硬剛。
再來看看咱們國家的:

嵌入式系統是指以應用為中心,以計算機技術為基礎,軟、硬體可剪裁,適應應用系統對功能、可靠性、成本、體積和功耗嚴格要求的專用計算機系統。

講究的就是一個面面俱到。
所以,按我的理解,嵌入式就是:

  • 小電腦
  • 可長期執行
  • 執行特定功能
  • 低功耗、高可靠、小體積
  • 可客製化,軟硬體都是

嵌入式語言有哪些要求?

對於嵌入式語言來講最重要的一點就是:面向硬體程式設計。
這個面向硬體有兩層含義:
第一是說需要了解硬體特性,然後通過程式設計來存取硬體。
例如通過讀寫暫存器完成對外設的控制,簡單如GPIO,複雜一些像Ethernet控制器,除了瞭解硬體的操作邏輯,也需要了解引腳、電平、IO複用、、硬體快取、DMA這些概念。
第二是說硬體資源帶來的限制。
這是由於嵌入式產品通常針對具體系統,涉及的技術約束大概有計算能力,IO介面,記憶體,體積,功耗,等方面的約束,在這些約束下進行技術選型和系統設計,很多時候硬體選微控制器,ARM,PowerPC,軟體使用裸機,RTOS或經過裁剪的linux是比較合適的選擇,就是合適,我們也可以用牛刀殺雞,但是沒必要。
第二個重要的要求就是:足夠的效率。
不能因為語言本身佔過多資源,這個時候需要虛擬機器器或直譯器的語言就不太合適,而C/C++通過指標(地址)存取硬體的操作最自然不過,也可以做到較少的資源消耗。

小結

從傳統的嵌入式語言的定義來看,Python似乎從各個方面都算不上一個標準的嵌入式語言。

Python屬於嵌入式語言嗎?

通過上文的一些關於定義方面的解釋,似乎,Python很難稱得上一門標準的嵌入式語言。
但有一點大家不要忘記,我們學的這些程式語言,最終只有一個目的,那就是應用。
近些年,隨著Python越來越多的被應用於嵌入式和邊緣系統,IEEE(電氣電子工程師學會)早已經Python歸為嵌入式語言了。(網址:IEEE

這不僅代表了樹莓派所帶來的影響,還表明了連線到雲端的邊緣系統也需具備智慧的事實。
我這幾天也在學習一個很有趣的嵌入式AI的框架PYNQ。
PYNQ是Python On Zynq的縮寫,它是一個軟體開發框架,指導硬體層、驅動層和應用層之間的介面設計。

底層硬體用的是FPGA,驅動核心使用的是Linux,上層一些智慧演演算法(比如語音識別,臉部辨識等)靠的是Python提供API介面。(感興趣的同學可以去這個網址:PYNQ

寫在最後:

雖然不想承認,但時代總是再向前發展的,一些固定領域的技術框架,終會被新生的技術所影響,但只要明確一點:一切以應用為導向,就沒有什麼可以影響到我們。
加油!!!!!!
(上海這兩天終於下雨了,不聊了,寫完部落格該剪視訊去了)。
對了,我最近再整理個人知識庫,感興趣的朋友們關注一波啊~
https://www.yuque.com/aiyanjiudexiaohutongxue

參考文獻:
維基百科
http://t.csdn.cn/BxEsY
https://www.cnblogs.com/iron2222/p/15640242.html
https://juejin.cn/post/6844904196819386376
https://zhuanlan.zhihu.com/p/294255155