高性能 Python 编译器 -- Codon

news2025/1/16 0:52:09

众所周知,Python 是一门简单易学、具有强大功能的编程语言,在各种用户使用统计榜单中总是名列前茅。相应地,围绕 Python,研究者开发了各种便捷工具,以更好的服务于这门语言。
编译器充当着高级语言与机器之间的翻译官,不同版本的 Python 编译器已被开发出来,下面将介绍一款新的高性能 Python 编译器:Codon。该项目上线短短几天,已收获 2.2k 星。
项目地址:https://github.com/exaloop/codon
作为高性能 Python 编译器,Codon 可将 Python 代码编译为本机机器代码,而无需任何运行时开销。在单线程上,Python 的典型加速大约为 10-100 倍或更多。Codon 的性能通常与 C/C++ 的性能相当。与 Python 不同,Codon 支持本机多线程,这可以使速度提高很多倍。Codon 可通过插件基础结构进行扩展,它允许用户合并新的库、编译器优化甚至关键字。
Codon 框架是完全模块化和可扩展的,允许无缝集成新模块、编译器优化、领域特定语言等,并积极为生物信息学和量化金融等多个领域开发新的 Codon 扩展。
在这里插入图片描述
这个一经发布就疯狂揽星的编译器效果如何呢?下面来看看一些基准测试结果。

基准测试

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

在这里插入图片描述

在这里插入图片描述

Python、PyPy、Codon 的对比

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Python、PyPy、C++ 、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)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1016480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一封来自江苏省电力设计院的表扬信

近日,中新赛克海睿思收到了一封来自江苏省电力设计院公司(以下简称“江苏院”)的表扬信。 海睿思与江苏院自达成合作以来,双方团队经过共同努力,克服了项目交付过程中的诸多困难。不仅通过数据工程的整体咨询帮助江苏院…

pt26django教程

admin 后台数据库管理 django 提供了比较完善的后台管理数据库的接口,可供开发过程中调用和测试使用 django 会搜集所有已注册的模型类,为这些模型类提拱数据管理界面,供开发者使用 创建后台管理帐号: [rootvm mysite2]# python3 manage.…

什么是函数重载?作用是什么?如何使用?

函数重载是指在同一个作用域内,允许存在多个同名函数,但这些函数的参数列表必须不同。根据传入的参数类型、数量或顺序的不同,编译器可以区分调用哪个函数。 函数重载的作用主要有以下几点: 提高代码的可读性和可维护性&#xff…

openlayers-17-卷帘对比

实现卷帘对比功能,没有进一步测试版本兼容问题,不错从ol的官网来看,ol6之前的版本的示例与ol6及其之后的版本示例并不相同 ol5 示例https://openlayers.org/en/v5.3.0/examples/layer-swipe.html?qlayerswipeol6示例 https://openlayers.org…

GIS跟踪监管系统

GIS跟踪监管系统 系统架构功能模块1. 基本功能2. 仓库管理3. 物资查询 系统采用B/S架构,前端使用的技术为HTMLCSSJavaScript(Leaflet、jQuery、bootstrap等),后台采用.NET框架。 系统架构 救援物资跟踪监管系统的架构如图所示&am…

Matplotlib入门

基本使用 基本用法 import matplotlib.pyplot as plt import numpy as npxnp.linspace(-1,1,50) y2*x1plt.figure()#定义一个图像窗口 plt.plot(x,y)#画(x,y)曲线 plt.show()#显示图像figure图像 import matplotlib.pyplot as plt import …

nat的基础配置(动态nat,nat server)

目录 1.静态nat 2.动态nat (1)配置公网地址池 (2)配置acl,匹配做nat转换的源 (3)将源转换为公网地址,其中no-pat表示不做端口转化,只做一对一的地址转换 3.nat ser…

《向量数据库指南》——向量数据库Milvus Cloud为什么选择开源?

开源对我们来说是一种信仰。从最早开始研发向量数据库的时候,我们就相信应该让更多人了解并使用优秀的技术,这是我们选择做开源的原因。 无论是在 AI 领域还是其他领域,我们希望技术不会被少数大公司垄断。在向量数据库问世之前,阿…

python:优化一EXCEL统计用类封装一下

# encoding: utf-8 # 版权所有 2023 涂聚文有限公司 # 许可信息查看: # 描述: # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 311 # Datetime : 2023/9/17 5:40 # User : geovindu # Product : PyCharm # Proj…

JSON和全局异常处理

目录 1️⃣JSON 一、什么是json? 二、与javascript的关系 三、语法格式 四、注意事项 五、总结 六,使用json 1导入pom.xml依赖 2.配置spring-mvc.xml 3. ResponseBody注解使用 创建一个web层控制器 编写ClazzBiz 实现接口 测试: …

C#,数值计算——Hashfn2的计算方法与源程序

1 文本格式 using System; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Hashfn2 { private static ulong[] hashfn_tab { get; set; } new ulong[256]; private ulong h { get; set;…

【2023年11月第四版教材】第13章《资源管理》(第三部分)

第13章《资源管理》(第部分) 4 管理过程4.1 数据表现★★★4.2 资源管理计划★★★4.2 团队章程★★★ 5 估算活动资源 4 管理过程 组过程输入工具和技术输出规划1.规划资源管理1.项目章程2.项目管理计划(质量管理计划、范围基准&#xff09…

elasticsearch5-RestAPI操作

个人名片: 博主:酒徒ᝰ. 个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。 本篇励志:三人行,必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud…

Python 布尔类型和比较运算符

视频版教程 Python3零基础7天入门实战视频教程 布尔( bool)表达现实生活中的逻辑,即真和假,True表示真,False表示假。 实例: # 布尔类型定义 b1 True b2 False print(f"b1{b1},类型是{type(b1)}") prin…

分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-LSTM-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-LSTM-Attention数据分类预测,运行环境Matlab2021b及以…

Vue3+Ts+Vite项目(第十五篇)——tailwindcss安装及使用详解,css原子化如何实现

文章目录 一、装包二、初始化2.1 终端执行如下命令2.2 postcss.config.js 文件中2.3 tailwind.config.js 文件中 三、样式文件3.1 新建 tailwind.css 文件3.2 main.ts 中引入 四、使用4.1 写入类名即可4.2 简单讲解 五、插件5.1 安装 Tailwind CSS IntelliSense5.2 使用效果 六…

系统架构设计高级技能 · 构件与中间件技术

点击进入系列文章目录 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 系统架构设计高级技能 构件与中间件技术 一、构件的定义二、构件系统架构特性三…

Vue ——09、路由模式,404和路由勾子

路由嵌套,参数传递及重定向 一、路由模式(有#号,跟没#号)二、404三、路由勾子四、在钩子函数中使用异步请求————————创作不易,如觉不错,随手点赞,关注,收藏(* ̄︶…

STM32 CubeMx教程 -- 基础知识及配置使用教程

文章目录 前言一、STM32CubeMx 界面介绍File 界面Windows 界面Help 界面Updater Settings 界面 二、STM32CubeMx 使用教程新建工程配置RCC时钟参数配置SYS参数配置时钟树Project(工程设置)Code Generator(代码生成器)工程创建 三、…

Day46:项目-购物车案例

购物车案例 准备工作 首页默认加载,其余页面懒加载 调用defineStore方法构建store 入口main做对应配置,找指南,快速开始,把elementplus引入进来 import { createApp } from "vue"; import { createPinia } from &qu…