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

来源:https://www.cnblogs.com/iron2222/archive/2022/07/16/16483518.html
-Advertisement-
Play Games

寫在前面: 幾十年來,大家普遍的認為C與C++才是標準的嵌入式語言,那麼現在大火的Python算是一種嵌入式語言嗎? 在給出我的答案之前我們要先明確幾個問題? 什麼是Python? 編程語言的定義? 編程語言(英語:programming language),是用來定義電腦程式的形式語言。它是一種 ...


寫在前面:

幾十年來,大家普遍的認為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

寫在最後:

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文主要介紹crudapi三種API認證方式,基於Spring Security框架實現, 包括Cookie,Basic Auth,JWT令牌Token。 ...
  • 1.mybatis攔截器介紹 攔截器可在mybatis進行sql底層處理的時候執行額外的邏輯,最常見的就是分頁邏輯、對結果集進行處理過濾敏感信息等。 public ParameterHandler newParameterHandler(MappedStatement mappedStatement ...
  • AbpVnext 本地事件匯流排 補充知識 發佈訂閱 概念 應用場景 本地事件匯流排允許服務發佈和訂閱進程內事件,這意味著如果兩個服務>(發佈者和訂閱者)在同一個進程中運行,那麼它是合適的 完整示例 DDD開發規範: 先定義好介面層、後實現層、暴露介面 對於要更新的實體 //領域層的實體 public ...
  • IdentityServer4 實現鑒權、授權,AspNetCore Identity實現資料庫用戶管理表直接生成。 ps:IdentityServer4文檔上最後給的例子是 // 配置使用記憶體存儲用戶信息,但使用 EF 存儲客戶端和資源信息, 我初步要實現的是 //資料庫存儲用戶信息 記憶體存儲資源 ...
  • 二、Docker相關命令 2.1、Docker 服務相關命令 systemctl命令是系統服務管理器指令 2.1.1、啟動docker服務 命令 systemctl start docker 2.1.2、停止docker服務 命令 systemctl stop docker 2.1.3、重啟dock ...
  • 痞子衡嵌入式半月刊: 第 58 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • 1. 簡介 中國廣電正式放號了,為了支持廣電700MHz的5G基站,需要換用新的5G模組.移遠通信的RM500U模組正好可以滿足我們的使用要求; 選用該模組的原因:雙卡單待 支持SIM卡熱插拔 支持中國廣電700MHz基站 版本升級方便 具體參數請到公司官網查看吧> https://www.quec ...
  • RX8025 自建溫補晶振, 精度與 DS3231 相當, 一個性價比非常高的型號. RX8025有多個衍生型號, RX-8025T 與 RX-8025SA/NB 的 Pin不相容, 寄存器也不完全相同. 本文介紹RX8025T的基本信息, 寄存器說明和如何使用STC8H驅動RX8025T ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...