整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

2 Python与其他语言比较、Python解释器的

2 Python与其他语言比较、Python解释器的其他实现

ython与其他语言比较

  • Perl:脚本语言,优势在于字符串模糊匹配,远超标准shell脚本,拥有强大的正则表达式引擎。使Perl主要应用于过滤、识别和抽取字符串。之前一直是开发Web服务器CGI(Common Gateway Interface)网络程序的语言。Python的正则表达式很多程度参考了Perl。Perl语言晦涩,对符号过度依赖,学习曲线高。由于语法复杂,要完成相同的任务,实现方式有多种,引起程序员之间的分歧。具体内容可以参考下述网页。

https://pleac.sourceforge.net/pleac_python/

https://www.garshol.priv.no/download/text/perl.html

  • Java:Java与Python都有类似的面向对象的语法及特性。Java尽管比C++简单得多,但依旧繁琐,但Java提供了更加快速炖大鹅开发环境。而Python更加简洁纯粹,但性能较Java略低。在Python和Java关系上,曾经有Jython这样一个产品。Jython是一个完全用Java开发的Python解释器,可以在JVM中运行Python程序。在Jython环境中,可以熟练的处理Java对象,Java还可以与Python对象进行交互,可以访问自己Javade标准类库,如同Java一直是Python环境中的一部分。不过Jython在2.7以后就停滞不前,Python3.*的程序无法兼容。具体差异,参考下述网页。

https://dirtsimple.org/2004/12/python-is-not-java.html

  • Ruby,由于Ruby on Rails曾经红极一时,Ruby也经常拿来与Python比较。Ruby完全面向对象,而Python有字节码解释器,Ruby没有。Python有多种编程范式混合,易读性更强。相对于Rails,Python也有自己的Web应用框架,Django、Turbogears等。
  • Tcl,是一种曾经与Python可以相提并论的脚本语言。Tcl是最易于使用的脚本语言之一,程序员可以像访问系统调用一样对Tcl语言进行扩展。不过,它有更多的局限性,如:有限的数据类型;没有类、模块、包机制;通常需要与它的图形工具Tk一起工作。Python则有丰富的数据类型;有类、模块、包机制可以编写大型程序;目前Tk已经一直到Python中(Tkinter)。
  • Lisp,函数化编程语言,它的lambda、map、filter、reduce等机制,一直在被Python借鉴。Python虽然有一点点函数化编程(functional programming,FP)的结构,但并不是纯粹的函数化编程语言。
  • JavaScript与Python相似的面向对象脚本语言。JavaScript是基于原型系统的,而Python则遵循传统的面向对象系统。

Python解释器的其他实现

  1. Jython:完全用Java写成。尽管与Python解释器存在细微差别,但两者还是比较接近,而且启动环境完全相同。Jython的优势如下:
    • 只要有JVM,就能运行Jython;
    • 拥有访问Java包与类库的能力;
    • 为Java开发环境提供脚本引擎;
    • 能够很容易的测试Java类库;
    • 提供访问Java原生异常处理能力;
    • 继承了JavaBeans特性和内省能力;
    • 鼓励Python到Java或Java到Python的开发;
    • GUI开发人员可以通过AWT/Swing库;
    • 利用Java GC原生垃圾收集器。

由于Jython的开发者被微软挖去做IronPython,导致Jython开始没落,至Jython2.7之后就没有再进行过更新。

  1. py4j,作为Jython替代,Java 程序中调用 Python 函数,并且在 Python 程序中访问 Java 对象。Py4J 是一个 Java 库和 Python 模块。它可以被用于构建混合语言应用程序、数据科学项目,以及其他需要结合 Java 和 Python 的场景。具有如下特点:
    • 易用性:Py4J 提供了简单的 Java API 和 Python API,使得在 Java 和 Python 之间进行交互变得非常容易。
    • 高性能:由于 Py4J 是基于 Java 实现的,因此它的性能表现通常会优于其他 Python-Java 框架。
    • 安全性:Py4J 支持安全模式,可以在不信任的环境中运行 Python 代码。
    • 广泛的适用性:Py4J 可以在各种操作系统和 JVM 上运行,并且支持多种 Java 版本。
  1. IronPython,用C#语言实现,适用于.NET和Mono。可以在.NET应用程序正好IronPython解释器来访问.NET对象。IronPython的扩展可以用C#或VB.NET编写。另外还有一种名为Boo的.NET、Mono语言。
  2. Stackless,解决CPython没改Python函数调用都会产生一个C函数调用,这样会限制函数调用,用户无法实现线程库和复杂递归应用。Stackless允许一个C栈帧可以拥有任意数量的Python栈帧。这样可以几乎无穷的进行函数调用,并支持巨大数量的线程。Stackless唯一的问题是它要对现有的CPython解释器做重大修改,所以它几乎是一个独立的分支。

新智元导读】有着20年编程经验的资深程序员,以自己多年来的经历,总结出程序员的编程语言切换规律,做了一个主流编程语言的进阶流程图,展示不同编程语言之间的承接关系、程序员选择编程语言的方向和路径。

铁打的程序员,流水的编程语言。时代在发展,编程语言也与时俱进,不断有新的、更好或者更时髦的语言出现,程序员也会或主动、或被动去学习一门新的、”更好“的编程语言。

Tailscale_io联合创始人Avery Pennarun,一位有着20年编程经验的资深程序员,以自己多年来的经历,总结出程序员的编程语言切换规律,做了一个主流编程语言的进阶流程图,展示不同编程语言之间的承接关系、程序员选择编程语言的方向和路径。

Avery这个人,很像是小说、人物报道里的典型程序员,有点偏执,喜欢搞怪。曾经做过7年的Debian开发,或许这段经历能够说明一些问题。因为Avery资历深涉猎广,我们也能够从这篇文章中,了解到编程语言发展过程的一些有趣的历史传承。

注:本文观点带有强烈的主观倾向,新智元的读者中,可能有人会持有不同意见,赞同也好反对也好,欢迎大家留言提出自己的看法!

我们看到,图中总共有4条主线,分别是:

  1. 低级语言,即汇编和C那一支
  2. 商用或者教学用语言,即BASIC那一支
  3. 专为数学和科学开发的语言,即R那一支
  4. 脚本、胶水语言,即Shell那一支

或许有人会说这张图里缺少了HTML、CSS、Haskell和Lisp,这不重要,因为Avery并没打算展开去讲它们。

Avery提到,最初的时候,4类语言有一个比较明确的边界。低阶语言编程的程序员使用C,汇编或者Turbo Pascal,商用大型程序员使用VB(当然那个时候的“大型”,和现在的“大型”完全不在一个量级),数值计算人员使用Fortran,R或MATLAB,胶水编程使用Shell或Perl。

程序员不会用Perl来写操作系统,也不会用VB写大数相乘。现代语言则模糊了相互之间的边界,很多R写的程序,也可以用Python实现。语言之间的转换主要在于挑选不同的风格。

低级编程语言

先来看看传说中的汇编。用汇编写程序是相当困难的,但即使在人工智能蓬勃发展的今天,某些场景下汇编仍然是不可替代的最佳编程语言,而且,所有编译语言的代码都会被转成汇编或者机器语言。

从汇编开始出现了3个分支,在风格上有明显的差异,不过我们先看C这一支。Pascal特点是有"begin...end";而C是用{}。花括号的风格影响了后世很多语言,虽然讨厌花括号的程序员群体也不在少数。

而且C有一种魔力,一旦你开始使用就很容易形成一种习惯,不管最终的效率高低,你总会想用C去实现一切。而且C也是为数不多的能合理实现所有上述四类编程问题的语言之一,而且速度也还可以。

C再往下,是C++和Python 2。C++虽然名字看起来好像是C的进阶,然而风格却大不相同。Avery吐槽”用C++是因为很多做商用大型程序开发的程序员别无选择“。

而胶水编程就好办多了,直接上手Python 2。虽然Python很慢,同时代的Perl也有不少簇拥。但作为一名C语言选手,Avery认为Perl的语法风格只能用怪诞来形容。相比之下,更接近C的Python显然是更好的选择。

不需要花费太多精力就能很快适应Python的语法;在Python里调用C函数的成本比Java以及其他语言低多了!唯一的缺点就是慢,但你可以调用C模块来缓解啊。

后来Java出现了,大批C和C++程序员迅速投入Java怀抱,以至于很长一段时间Java都霸占着编程语言No 1的位子

Java的缺点是运行时很慢,然而相比C++超慢的编译速度、让人头大的header文件、超弱的跨平台性…这点缺点不算什么了。

Go刚出现的时候,有人称其为C++和Java的终结者,结果并没有。Avery说,想当年Go最辉煌的那阵子是因为Python 2程序员发现它跑的比Python快,RAM占用比Python少,写代码的难度相当。

虽然现在认为Go是一门“系统”语言,但Avery认为本质上,Go其实还是一个胶水儿语言。

商用编程语言

BASIC是基于让“新手能够轻松掌握”的目的开发的,但是学院派发现有BASIC编程经验的学生,很难教好他编程,这实在是有点讽刺。当然他们也没选择C,而是选择了更适合教学用的Pascal。

后来微软将BASIC转变成Visual Basic,这可能是JS出现之前最受欢迎的编程语言了。选择我们仍然在Excel中使用VB,只不过它改名叫宏。

后来Turbo Pascal的作者创建了一门新的语言Delphi,口碑很不错,再后来还开发了C#。相反,VB.NET则可以说是非常失败了。

Avery还不忘给出很有杀伤力一击:我其实很想在VB后面再加一个箭头,但不好意思,我的确不知道这帮程序员后来去哪儿了。可能转行做网页了?或者去搞Excel的宏?

胶水编程语言

Avery说,胶水语言的鼻祖要数Unix的Shell。Unix的设计哲学倡导一次只做一件事,并将其做到极致。这些功能单一、但是极致好用的小模块,通过pipeline链接起来,就能合力完成一件复杂的“大任务”,颇有点蚂蚁群的味道。

理想虽然美好,无奈败给了现实,这样看成完美的小程序模块很难实现。于是有了awk,一个和C语法相似的解释语言。

接下来有了Perl,Perl对互联网的兴起起到了非常大的推动作用,同时也借助互联网Perl收获了超赞的口碑。人们使用Perl来运行web的CGI脚本,接受HTML请求,然后进行解析。

你知道Perl最让人印象深刻的是什么吗?让人眼花缭乱的标点符号!

当然,你之砒霜可能是他人之良药。有人觉得Perl语法丑陋(比如Avery),那么他可能之后会选择使用Python;相反,有人爱死Perl的风格,那么可能会选择Ruby。

所以,如果你还在用Perl写Web CGI脚本,那么请继续吧;或者,你可以考虑一下“全世界最好的语言”PHP。

前端编程语言

JavaScript是一门编程语言,现在应该已经是一个不争的事实了。然而,Avery指出,正因为JS是一个大杂烩,把HTML、CSS、面向对象、函数式编程、动态语言、JIT等等所有涉及到HTML请求的概念,统统囊括进来,导致这个语言特别

而且你能相信一门在20多年前,仅仅花了10天时间就做出来的语言吗?显然它存在着很大的缺陷和一些无法修复的严重错误。

我们回头再看这张图,注意一下右下角Python 3和JS:

你会看到Python和JS形成了一个循环。为什么会这两个会出现纠缠反复呢?Avery说因为用JS久了容易变得不正常,需要通过Python治疗一下。(hmmmm...)

接下来的TypeScript,可能因为作者是Delphi的开发者,Avery对TypeScript给予了很高的评价。

在node.js出现之前,JS被认为就是一门前端语言。而现在成为了一门前端+后端+命令行的一条龙语言。

最后,Avery也没放过Python 3。他说在Python 3中编写系统程序,你会发现自己经常搞乱unicode转换,甚至连文件名都会搞乱!

善有善报,恶有恶报。

参考链接:

https://apenwarr.ca/log/20190318

作者 | JEAN-LUC AUFRANC
译者 | 弯月
出品 | CSDN(ID:CSDNnews)
提到编程语言,人们第一时间想到的无非是:哪个编程语言简单易学,亦或是最挣钱等。但是编程语言功耗问题却被很多人忽视。那么作为程序员的我们如何选择编程语言,使其以低能耗高功效地工作呢?
2017年,葡萄牙大学的研究人员团队曾发表过一篇题为《各种编程语言的能耗》的论文,他们比较了各个编程语言(及其编译器/解释器)的能耗,为此他们研究了 27 种知名编程语言的运行时、内存使用情况以及能耗。最后,C 成为了无可争议的赢家,其能耗最低,而 Python 和 Perl 则处于最末位。

据悉,这项研究采用了多种方法论和多个基准测试。每种语言使用十个编程问题来进行调查,帮助研究人员获得更具有可比性、代表性和广泛性的程序,以及编译/执行选项和编译器版本。


C /C++能耗最低且最快


尽管人们普遍认为程序运行速度更快时能源消耗会随之降低,但论文中明确指出“更快的语言并不总是最节能的”,强调这并不像 E(nergy)=T(ime) x P(ower) 的物理定律那么简单。

比如在他们的一项基准测试中,Chapel 程序的执行时间比用 Pascal 编写的等效程序少 55%——但 Pascal 程序使用的能量少 10%。

在人们传统印象中,编译语言“往往”是最节能、运行速度最快的。首先我们来看一看编译语言在二叉树测试上的结果。

不出意料,这项研究得出的结论为:编译语言是最快和最节能的语言。C 和 C++ 语言是能耗最低且最快的语言。Go 是编译语言中表现最差的语言,甚至比依赖虚拟机的 Java 或 Erlang 等还要糟糕,至少在二叉树的测试中是这样。

Perl、Lua 和 Python能耗高

下面看一下解释型语言在速度与能耗方面的表现,由测试可知解释型语言才是能耗最高的语言,比如 Perl、Lua 和 Python。

而5 种最慢的语言也是解释型语言,如:Lua、Python、Perl、Ruby 和 Type。但在使用正则表达式操作字符串时,5 种最节能的语言中有三种解释型语言,分别是 TypeScript、JavaScript 和 PHP。

请注意,所有测试都是在如下环境运行:Intel Core i5-4460 Haswell CPU @ 3.20GHz,16GBRAM,Ubuntu Server 16.10 操作系统和Linux 4.8.0-22。考虑到如今 MicroPyhon 可以在各种微控制器上运行,猜它在体积更小的设备上的表现可能不会那么糟糕。
此外,这项研究还根据时间、内存和能耗参数的不同目标组合,对每种语言进行了排名,而在这些指标中 C 语言始终名列前茅。这与人们长久以来的认知相同,如果你想优化程序,提高续航时间,降低功耗,则 C 语言绝对是最佳选择、汇编语言、SIMD 指令或加速器的自定义指令优化某些例程。
参考链接:
  • https://www.cnx-software.com/2021/11/18/save-the-planet-program-in-c-avoid-python-perl/


为助力云原生开发者更好迎接即将到来的“黄金十年”,CSDN 特别发起《2021中国云原生开发者调查报告》,围绕“云原生开发者画像、人才和技术分布版图、一线开发者的技术实践、场景与应用分析、云原生的技术未来”等五大方面进行深度调查和解析。

本次问卷调查共 10 个问题,可能占用您 3-5 分钟时间,感谢您的倾力支持。