Python究竟属不属于嵌入式语言?
写在前面:
几十年来,大家普遍的认为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
Python究竟属不属于嵌入式语言?的更多相关文章
- python究竟要不要使用多线程
在总结concurrent.futures库之前先来弄明白三个问题: (1)python多线程究竟有没有用? (2)python虚拟机机制如何控制代码的执行? (3)python中多进程处理原理是怎么 ...
- Python (一) 简介、安装
一.简介 Python:是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 那么Python 究竟是来做什么的? 首 ...
- [转]我为什么要学习python
我为什么要学习python 引言:学习python近两年,谈谈我对于python的一点小理解,也从一些方面谈谈自己微薄的想法,也就是我为什么学习python 这里我不讨论python的一些有用的库 ...
- Python __dict__属性详解
本文转载自 https://www.cnblogs.com/alvin2010/p/9102344.html 感谢 //偏执 大佬 我们都知道Python一切皆对象,那么Python究竟是怎么管理对象 ...
- Python这么强大, 怎样才能快速入坑?
作为一种年轻的编程语言,Python为何能在短短几年的时间内就以迅雷不及掩耳之势驰骋编程界?答案很简单,在人工智能时代,AlphaGo 都在使用的 Python语言,是最接近 AI 的编程语言. 随着 ...
- 0基础的人如何入门 Python ?Python难么?
人生苦短,我用Python,为啥这么说,因为我们自动化测试有金句:学完Python,便可上天 ~ 废话不多说,相信很多人都听过之前的Python进入小学课本.Python进入浙江省高考等新闻,有这么多 ...
- python安全编程
##入门 这将是第一个一系列关于python编程的博客文章.python是一门非常强大的语言,因为它有信息安全社区的支撑.这意味着很多工具都是由python编写并且可以在脚本中调用很多模块.使用模块的 ...
- Effective Python之编写高质量Python代码的59个有效方法
这个周末断断续续的阅读完了<Effective Python之编写高质量Python代码 ...
- 编写高质量Python代码的59个有效方法
Python学习资料或者需要代码.视频加Python学习群:960410445 1. 用Pythonic方式思考 第一条:确认自己使用的Python版本 (1)有两个版本的python处于活跃状态,p ...
随机推荐
- JAVA IDEA连接mysql遇到的问题
Mysql-connector-java驱动问题 因为缺乏驱动而无法成功连接数据库 下载驱动(教程) 相关网址 安装驱动 简单图示
- Linux文本工具-cat-cut-paste;文本分析-sort-wc-uniq
1.1 查看文本文件内容 cat 1.1.1 cat可以查看文本内容 cat [OPTION]... [FILE]... 常见选项 -E: 显示行结束符$ -A: 显示所有控制符 -n: 对显示出的 ...
- Linux启动故障排查和修复技巧
一个执着于技术的公众号 我发现Linux系统在启动过程中会出现一些故障,导致系统无法正常启动,我在这里写了几个应对单用户模式.GRUB命令操作.Linux救援模式的故障修复案例帮助大家了解此类问题的解 ...
- 优化 Docker 镜像大小常见方法
平时我们构建的 Docker 镜像通常比较大,占用大量的磁盘空间,随着容器的大规模部署,同样也会浪费宝贵的带宽资源.本文将介绍几种常用的方法来优化 Docker 镜像大小,这里我们使用 Docker ...
- zipper题解
-请奆佬们洁身自好,好好打代码从我做起 - 题目大意: 给三个字符串,判断C字符串是否由A B字符串顺序组成, 题意分析: 很容易想到的是,A的长度加上B的长度为C的长度 其实进一步想,这 提供了一个 ...
- Nacos源码系列—订阅机制的前因后果(上)
点赞再看,养成习惯,微信搜索[牧小农]关注我获取更多资讯,风里雨里,小农等你,很高兴能够成为你的朋友. 项目源码地址:公众号回复 nacos,即可免费获取源码 前因 我们在了解Nacos订阅机制之前, ...
- 好客租房7-React脚手架的使用
3.3在脚手架中使用React //第一步导入react import React from "React" import ReactDOM from "react-do ...
- ajax与python后端交互
目录 ajax简介 前后端传输数据编码格式 ajax发送json格式数据 ajax携带文件数据 回调机制处理策略 ajax简介 ajax可以在页面不刷新的情况下可以与后端进行数据交互,异步提交,局部刷 ...
- 编程语言与python与pycharm的下载
目录 编程语言的发展史 编程语言的分类 python解释器 python解释器的下载与安装 环境变量 执行python程序方式 pycharm编辑器 编程语言的发展史 机器语言是最开始的编程语言,之后 ...
- ApeForms | WinForm窗体UI美化库(Metro扁平风格)演示与安装
ApeForms系列① 快速上手 @ 目录 ApeForms系列① 快速上手 前言 演示视频 快速上手 安装及使用 Demo下载 联系开发者 加入我们 建议与咨询 前言 ApeForms是一套基于Wi ...