脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - 高性能Python编译器Codon开源 速度百倍提升

高性能Python编译器Codon开源 速度百倍提升

2022-12-12 20:38机器之心 Python

编译器充当着高级语言与机器之间的翻译官,不同版本的 Python 编译器已被开发出来,下面我们将为大家介绍一款新的高性能 Python 编译器:Codon。该项目上线短短几天,已收获 2.2k 星。

众所周知,Python 是一门简单易学、具有强大功能的编程语言,在各种用户使用统计榜单中总是名列前茅。相应地,围绕 Python,研究者开发了各种便捷工具,以更好的服务于这门语言。

编译器充当着高级语言与机器之间的翻译官,不同版本的 Python 编译器已被开发出来,下面我们将为大家介绍一款新的高性能 Python 编译器:Codon。该项目上线短短几天,已收获 2.2k 星。

高性能Python编译器Codon开源 速度百倍提升

 

项目地址:https://github.com/exaloop/codon

作为高性能 Python 编译器,Codon 可将 Python 代码编译为本机机器代码,而无需任何运行时开销。在单线程上,Python 的典型加速大约为 10-100 倍或更多。Codon 的性能通常与 C/C++ 的性能相当。与 Python 不同,Codon 支持本机多线程,这可以使速度提高很多倍。Codon 可通过插件基础结构进行扩展,它允许用户合并新的库、编译器优化甚至关键字。

Codon 框架是完全模块化和可扩展的,允许无缝集成新模块、编译器优化、领域特定语言等,并积极为生物信息学和量化金融等多个领域开发新的 Codon 扩展。

高性能Python编译器Codon开源 速度百倍提升Codon Pipeline

这个一经发布就疯狂揽星的编译器效果如何呢?下面我们来看看一些基准测试结果。

基准测试

以下是来自 Codon 基准测试套件的结果,比较了 Python、PyPy、C++ 和 Codon 在一系列任务和应用程序上的表现。

基准测试在以下设置上运行:

高性能Python编译器Codon开源 速度百倍提升

高性能Python编译器Codon开源 速度百倍提升

Python、PyPy、Codon 的对比

高性能Python编译器Codon开源 速度百倍提升

高性能Python编译器Codon开源 速度百倍提升

高性能Python编译器Codon开源 速度百倍提升

高性能Python编译器Codon开源 速度百倍提升

高性能Python编译器Codon开源 速度百倍提升

高性能Python编译器Codon开源 速度百倍提升

高性能Python编译器Codon开源 速度百倍提升

Python、PyPy、C++ 、Codon 的对比

 

 

 

高性能Python编译器Codon开源 速度百倍提升

高性能Python编译器Codon开源 速度百倍提升

高性能Python编译器Codon开源 速度百倍提升

几种语言的具体对比如下:

Codon 尽可能地遵循 CPython 语法、语义和 API,但在一些特殊情况下,考虑性能原因,Codon 与 CPython 会有些不同,例如 Codon 为 64 位 int,CPython 是任意宽度 int。在性能方面,CPython 的加速通常是 10-100 倍的加速。

虽然 Codon 确实提供了一个类似于 Numba 的 JIT 装饰器,但 Codon 通常是一个提前(ahead-of-time)编译器,可以将端到端程序编译为本机代码。它还支持编译更广泛的 Python 构造和库集。

PyPy 的目标是成为 CPython 的简易替代品,而 Codon 在一些地方有所不同,这些不同主要体现在消除动态运行时或虚拟机上,从而获得更好的性能。

Codon 通常生成与等效的 C 或 C++ 程序相同的代码,有时可以生成比 C/C++ 编译器更好的代码。原因有很多,例如更好的容器实现,Codon 不使用目标文件和内联所有库代码,或者不使用 C 执行的特定于 Codon 的编译器优化或 C++。

Codon 的编译过程实际上更接近 C++ 而不是 Julia。Julia 是一种动态类型语言,它执行类型推断作为优化,而 Codon 类型是提前检查整个程序。Codon 还试图通过采用 Python 的语法和语义来规避新语言的学习曲线。

常见问题解答

虽然 Codon 几乎支持 Python 的所有语法,但它并不是一个简单的替代品,大型代码库可能需要修改才能通过 Codon 编译器运行。例如,一些 Python 的模块还没有在 Codon 中实现,一些 Python 的动态特性是不允许的。Codon 编译器会生成详细的错误消息,以帮助识别和解决任何不兼容问题。Codon 支持无缝的 Python 互操作性,以处理需要特定 Python 库或动态性的情况。

我想使用 Codon,但我有一个大型 Python 代码库且不想移植,怎么办?

你可以通过 @codon.jit 装饰器来使用 Codon,这将只编译带注释的函数,并自动处理与 Codon 之间的数据转换。它还允许使用任何特定于 Codon 的模块或扩展,例如多线程。

与其他语言和框架的互通性如何?

互通性是 Codon 的优先事项。我们不希望使用 Codon 使用户无法使用现有的其他优秀框架和库。Codon 支持与 Python 和 C/C++ 的完全互通。

Codon 是否使用垃圾收集?

是的,Codon 使用了 Boehm 垃圾收集器。

Codon 不支持 Python 模块 X 或函数 Y?

虽然 Codon 涵盖了 Python 标准库的一个相当大的子集,但它还没有涵盖每个模块的每个函数。请注意,仍然可以通过 Python 调用缺少的函数 from python import。许多缺少 Codon 本地实现的函数(例如 I/O 或 OS 相关功能)通常不会实现 Codon 的实质性加速。

对于我的应用程序,Codon 并不比 Python 快?

大部分时间用在 C 语言实现的库代码中的应用程序通常不会在 Codon 中看到实质性的性能提升。同样地,受 I/O 或网络限制的应用程序在 Codon 中也会遇到相同的瓶颈。

对于我的应用程序,Codon 比 Python 慢?

如果是这样,请将 Codon 明显比 Python 慢的情况报告给问题跟踪器。

Codon 是免费的吗?

对于非生产用途,Codon 始终是免费的。用户可以免费将 Codon 用于个人、学术或其他非商业应用。

Codon 是开源的吗?

Codon 是根据商业源代码许可证 (BSL) 获得许可的,它的源代码是公开可用的,并且可以免费用于非生产用途。BSL 在技术上不是「开源」许可证,尽管在许多情况下你仍然可以像对待任何其他开源项目一样对待 Codon。重要的是,根据 BSL,每个版本的 Codon 都会在 3 年后转换到实际的开源许可证(特别是 Apache)。

原文地址:https://mp.weixin.qq.com/s/p29go0yNMaWJfSxXRLGe9g

延伸 · 阅读

精彩推荐
  • PythonPandas中的宝藏函数-rank()

    Pandas中的宝藏函数-rank()

    排序会改变原来的数据结构,且不会返回名次,这一点区别需要弄明白。初学的时候容易弄混淆。本文将通过一个实例,讲清楚Pandas中rank()排名函数的应用...

    AI入门学习10442021-09-03
  • Pythondjango2+uwsgi+nginx上线部署到服务器Ubuntu16.04

    django2+uwsgi+nginx上线部署到服务器Ubuntu16.04

    这篇文章主要介绍了django2+uwsgi+nginx上线部署到服务器Ubuntu16.04,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    雪落忆海5842021-03-10
  • Pythonpython实战练习之最新男女颜值打分小系统

    python实战练习之最新男女颜值打分小系统

    前几天不是出过一期Python美颜相机嘛?不知道大家现在还记不记得?这一期的话题还是紧接着那一期颜值方面来走,对大家的学习或工作具有一定的价值,...

    顾木子吖9282022-01-12
  • Python通过Python爬虫代理IP快速增加博客阅读量

    通过Python爬虫代理IP快速增加博客阅读量

    本文主要对通过Python爬虫代理IP快速增加博客阅读量的方法进行分析介绍。具有很好的参考价值,需要的朋友一起来看下吧...

    Data&Truth2042020-09-14
  • PythonPyTorch实现线性回归详细过程

    PyTorch实现线性回归详细过程

    本文介绍PyTorch实现线性回归,线性关系是一种非常简单的变量之间的关系,因变量和自变量在线性关系的情况下,可以使用线性回归算法对一个或多个因变...

    心️升明月10762022-10-28
  • Python2行Python就能实现“文本文件”差异比较,太强了!

    2行Python就能实现“文本文件”差异比较,太强了!

    比如,我们在过去的某个时候写了一段代码。后来,我们由于业务需求,对代码做了部分改动。一段时间过去了,我们想不起来这段代码,究竟改动了哪里...

    菜鸟学Python12412021-09-15
  • PythonPython简单的GUI程序示例详解

    Python简单的GUI程序示例详解

    这篇文章主要为大家详细介绍了Python简单的GUI程序示例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够...

    软件开发技术爱好者11812022-09-24
  • PythonSelenium爬取b站主播头像并以昵称命名保存到本地

    Selenium爬取b站主播头像并以昵称命名保存到本地

    这篇文章主要介绍了使用Selenium自动化爬取b站主播头像并以昵称命名保存到本地的方法,代码简单完整,对于大家练习Selenium自动化有一定的帮助,需要的朋友...

    拿头来坚持5612021-10-14