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

寫在前面:

幾十年來,大家普遍的認為C與C++才是標準的嵌入式語言,那麼現在大火的Python算是一種嵌入式語言嗎?
image.png
在給出我的答案之前我們要先明確幾個問題?

什麼是Python?

編程語言的定義?

編程語言(英語:programming language),是用來定義計算機程序的形式語言。它是一種被標準化的交流技巧,用來向計算機發出指令,一種能夠讓程序員準確地定義計算機所需要使用數據的計算機語言,並精確地定義在不同情況下所應當採取的行動。
image.png
最早的編程語言是在電腦發明之前產生的,當時是用來控制提花織布機及自動演奏鋼琴的動作。在電腦領域已發明了上千不同的編程語言,而且每年仍有新的編程語言誕生。很多編程語言需要用指令方式說明計算的程序,而有些編程語言則屬於宣告式編程,說明需要的結果,而不說明如何計算。

編程語言的分類?

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

編譯型語言

通過編譯器把源代碼編譯(compile)成機器語言,在經過鏈接(linker)將源代碼中所使用的庫串聯起來生成可執行二進制文件,這樣運行時計算機可以直接以機器語言來運行程序。

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

解釋型語言

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

Python

Python是一種廣泛使用的解釋型、高級和通用的編程語言。
image.png
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++還是有很大的不同的,這些不同甚至從該語言的設計之初就決定了。
image.png
但我們僅從前後兩者不同就能簡單的得出結論嗎?顯然不合適,所以我們還需要知道什麼是嵌入式語言?

什麼是嵌入式語言?

什麼是嵌入式?

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

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

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

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

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

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

嵌入式語言有哪些要求?

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

小結

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

Python屬於嵌入式語言嗎?

通過上文的一些關於定義方面的解釋,似乎,Python很難稱得上一門標準的嵌入式語言。
但有一點大家不要忘記,我們學的這些編程語言,最終只有一個目的,那就是應用。
近些年,隨着Python越來越多的被應用於嵌入式和邊緣系統,IEEE(電氣電子工程師學會)早已經Python歸為嵌入式語言了。(網址:IEEE
image.png
這不僅代表了樹莓派所帶來的影響,還表明了連接到雲端的邊緣系統也需具備智能的事實。
我這幾天也在學習一個很有趣的嵌入式AI的框架PYNQ。
PYNQ是Python On Zynq的縮寫,它是一個軟件開發框架,指導硬件層、驅動層和應用層之間的接口設計。
image.png
底層硬件用的是FPGA,驅動內核使用的是Linux,上層一些智能算法(比如語音識別,人臉識別等)靠的是Python提供API接口。(感興趣的同學可以去這個網址:PYNQ

寫在最後:

雖然不想承認,但時代總是再向前發展的,一些固定領域的技術框架,終會被新生的技術所影響,但只要明確一點:一切以應用為導向,就沒有什麼可以影響到我們。
加油!!!!!!
(上海這兩天終於下雨了,不聊了,寫完博客該剪視頻去了)。
對了,我最近再整理個人知識庫,感興趣的朋友們關注一波啊~
//www.yuque.com/aiyanjiudexiaohutongxue
image.png
參考文獻:
維基百科
//t.csdn.cn/BxEsY
//www.cnblogs.com/iron2222/p/15640242.html
//juejin.cn/post/6844904196819386376
//zhuanlan.zhihu.com/p/294255155