python为什么被称为胶水语言_为什么只有python成了胶水语言?
Python成为胶水语言有一个发展过程,并不是一步实现的。Python设计初期就面向科研人员,降低编程难度,提高编程效率。在现代也有其他按照这个思路发展的语言,比如R和Matlab。也有一些思路有些许相似的玩法,比如面向特定领域的语言,像Lua、JavaScript。在与C库的互操作性方面也是个重要的问题。
任何编程语言发展初期都会遇到标准库如何构建的问题。而每种语言的发展思路却有所不同。
C和C++的思路类似,就是提供一个较小的标准库,这使得标准库在各个平台的移植过程工作量较小。但也这个思路也带来一个问题,就是标准库一直保持较小的状态,就会导致一些必要的功能需要第三方库甚至用户自己去实现,这些实现之间又不兼容,就导致了很多悲剧。比如一些常见的数据结构,buffer、stack、queue。在C/C++的各种第三方库里几乎都有各自的buffer实现,stack和queue也有多种实现。C++为部分解决此问题,提供了STL库来实现更多的功能,以及Boost库提供更大范围但支持程度更低的实现。C/C++得益于几十年的发展,各种库还是非常丰富的,而且每当有新的领域兴起时,C/C++也几乎总是最早一批提供支持的。比如GPU编程等等。
R和Matlab一类的面向科研人员的语言,其设计目标就是降低编程难度,但在编程的通用型方面不足,难以出圈成为通用编程语言。另外就是在性能方面弃疗的也有些难堪。
Lua则是一开始就面向嵌入其他系统里的应用,比如早期的网络游戏,近些年的运营规则引擎,交换机策略等等。JavaScript从早期在浏览器里运行也发展到现在可以在一些环境里脱离浏览器,嵌入其他系统应用。Lua和JS的特征是很像的,就是面向很短的脚本应用,为了在这些短脚本里用的方便,语言上缺少大规模应用的良好支持。比如变量的作用域、模块、面向对象等,在Lua和JS里都缺少通用的实现,一些库和和应用需要自己去选择某种实现策略,这就导致了应用之间的兼容性困难。同时缺少这些功能也使得编写较大的Lua/JS程序时存在一些痛苦,项目越大就越需要大量trick来控制复杂度。
Python早期在面对缺少第三方库问题时,用的是那个时代的常见作法,即实现与C的高度互操作性。Python可以方便的编写C模块来调用各类C函数库,把一些结构体等封装成Python对象来进行更好的组织。在80-90年代这种思路是很常见的作法,那个时代的语言基本都会确保自己编译出来的obj文件可以与C的obj文件能链接(link)成一个可执行文件。Python没有编译过程,但至少是非常重视与C的互操作性问题的。
但进入90年代以后,Java的出现对与C的互操作性是非常不屑的。因为Java最初设计目标是用于嵌入式编程的,而引入与C的调用后,可能影响Java运行时的稳定性,因此Java在很长时期都不允许与C互相操作。在Java出现近10年后,才出现了JNI用于操作C库。自Java的思路以后,新出现的部分语言就不再开发与C库对接的API了。这导致了一段时期这些语言只能用其自身开发各类第三方库,进而影响了发展速度。
Python的C API本身设计的是不错的,相比其他多种脚本语言,我见过唯一比Python C API设计的更好的只有Lua了。这就使得一些新的领域出现以后,C/C++第一时间支持,之后在提高可编程性方面的第一选择了就是用Python C API来封装出给Python的接口。最近十几年的CUDA、OpenCL、OpenCV等,都是官方同时提供C++和Python的接口,使得应用质量上有很好的支持。
这里不得不提及的一个关键结点是numpy库。numpy库本身定义的数组(np.array)实际上成了多种Python高性能计算库的通用数据结构。numpy建立的多维数组,可以不经过转换就交给OpenCV做下一步计算,以及再交给CUDA做算法加速。加之numpy本身底层的BLAS经过了SIMD指令集加速,提供了非常高的性能,在常见密集计算里能提供比纯C/C++(没使用SIMD优化)还高几倍的计算性能。进而使得Python在最近几年的大数据、深度学习领域,能够同时获得易于编程和高性能的优势,自然也就成了更好的胶水。
过去这些年我意识到Python与C结合的强大威力后,就翻译了Python官方文档里《使用C/C++扩展Python》一文,并贴在了惊帆之静默 " Blog Archive " 使用C/C++扩展Pythongashero.yeax.com
最近一年多,Python开始组织文档翻译计划时,我也加入其中,并开始按照官方规范来进行更加严格的翻译工作。当前Python官方文档里的《扩展和嵌入Python解释器》就是我在翻译和维护,希望能为大家更好的应用Python与C的互操作提供帮助,相关技术问题也欢迎讨论。如下是Python2和Python3的中文版《扩展和嵌入Python解释器》的链接。扩展和嵌入 Python 解释器docs.python.org扩展和嵌入 Python 解释器docs.python.org
python为什么被称为胶水语言_为什么只有python成了胶水语言?相关推荐
- 浅谈python语言_浅谈Python语言基础知识点!
一.Python 语言的简述 Python语言是一种解释型.面向对象的编程语言,是一种开源语言. Python属于动态类定义语言,也是一种强调类型语言. 二.Python 语言的特点 1.简单.高级 ...
- python怎么学习一门语言_如何学习Python这一门语言
Python现在非常火,语法简单而且功能强大,很多同学都想学Python! 如果你选择了自学,我想给你提几点建议: 找浅显易懂,例程比较好的教程,从头到尾看下去.不要看很多本,专注于一本.把里面的例程 ...
- 哪个专业学python语言_想学Python编程?你真的适合吗?
原标题:想学Python编程?你真的适合吗? 有的人说我想学什么.我想干什么,很多时候都是头脑发热,单凭一腔热血,可是这样的路即便走上去你又能坚持多久呢?所以,每每有人问我学Python编程怎么样,我 ...
- python和c和java难度_浅谈:Java和C语言各自的学习难度
许多初学者在编程入门之前,都会在编程语言的选择上犹豫不决.一般来讲,Java和C语言是编程小白最青睐的两种编程语言.那么,Java和C语言哪个学习难度更大呢?虽然两者的区别挺大的,但是学习难度上并不能 ...
- 学python后做什么工作好_学习完Python课程后可以做什么工作?
Python作为人工智能.大数据的首选编程语言,也是进入编程世界的理想选择,已经成为了大家都在追求学习的语言,那么学习Python之后到底可以做什么呢?为您详细的介绍一下. 什么是Python?Pyt ...
- python中继承是什么意思_如何理解Python中的继承?python入门
如何理解Python中的继承?如今,python编程语言深受企业和个人的喜爱.python开发工程师是近年来互联网行业非常热门的职业岗位之一.学习python的人除了零基础的,还有一部分是在职运维.在 ...
- python意外缩进引发逻辑错误_如何编写 Python 程序
如何编写 Python 程序 从今以后,保存和运行 Python 程序的标准步骤如下: 对于 PyCharm 用户 打开 PyCharm. 以给定的文件名创建新文件. 输入案例中给出的代码. 右键并运 ...
- python初学者用什么编辑器好_新人学 python 选什么编辑器比较好呢??
点击上方蓝字关注我们 ↑关注 + 星标 ,每天学Python新技能 后台回复[大礼包]送你Python自学大礼! 新手学Python用什么编辑器比较好?工欲善其事必先利其器,选好工具学习更高效.市面上 ...
- python做一个单项选择题系统_(完整版)python选择题word打印版
Python 单选题库 一. python 语法基础 1 . Python 3.x 版本的保留字总数是 A.27 B.29 C.33 D.16 2. 语言保留字的是 Python 不是 , 以下选项中 ...
- 基于python的智能文本分析 书_推荐一本Python数据分析必备工具书
身处大数据领域,我们每天都不得不与各种各样的数据打交道,无论是围绕数据去进行计算还是分析,它们都分属大数据领域的一个细分领域.在数据分析领域,Python语言一直一枝独秀,本文作者在数据分析领域深耕多 ...
最新文章
- java 发送邮件
- 【转】Eclipse的Debug调试技巧大全
- JAVA调用C语言写的SO文件
- 一文看懂Python(九)-----可变参数函数
- k-modes算法mysql_第十一章 K-Means(K均值)算法模型实现(中)
- java中 怎么获取bean_java普通类如何得到spring中的bean类
- 一文看懂卷积神经网络
- 期盼数月的召唤|PaddlePaddle中文文档利剑来袭
- 【BZOJ1417】Pku3156 Interconnect
- 在CLR中自动本地化正在运行的.NET窗口
- 数学建模层次分析法例题及答案_数学建模之层次分析法
- 使用Aria2+AriaNG+FileManager来进行离线BT下载及在线播放
- 使用极大似然法对逻辑回归中的参数进行估计的数学原理
- 这4款浏览器必装插件,让浏览器使用体验上升100%
- java学籍管理系统部分代码_java学籍管理系统源代码
- 咏红梅花——曹雪芹_ywyuan_新浪博客
- [CF_GYM102900L]Traveling in the Grid World
- easyexcel实现导出
- 服务器托管是什么?和租用有什么区别?
- 2022年成都粘胶纤维产业申报条件、材料、流程