codon也将py程序加速了90倍了,C/C++调用codon

文章介绍了如何使用Codon来优化Python中的斐波那契数列计算,展示了Codon在调试、性能优化和生成可执行文件方面的功能。尽管Codon不是Python的完全替代品,但对于混合使用Python和C/C++的场景,它提供了便利,允许从C/C++调用Python代码并实现函数导出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的苹果笔记本比较老旧了,2016款的Pro。

from time import time

def fib(n):
    return n if n < 2 else fib(n - 1) + fib(n - 2)

t0 = time()
ans = fib(40)
t1 = time()
print(f'Computed fib(40) = {ans} in {t1 - t0} seconds.')

运行起来,够意思的。

$ python fib.py
Computed fib(40) = 102334155 in 33.47038793563843 seconds.
$ codon run -release fib.py
Computed fib(40) = 102334155 in 0.370345 seconds.


codon run myprogram 

默认编译和运行模式为 debug ( -debug )。使用 -release 选项编译并运行优化:

codon run -release myprogram

还可以产生可执行文件:

codon build -exe fib.py

-rwxr-xr-x  1 xinnianwang  staff  116992 May  9 07:39 fib
-rw-r--r--  1 xinnianwang  staff     181 May  9 07:30 fib.py

$ ./fib
Computed fib(40) = 102334155 in 0.566732 seconds.

竟然比上面的慢了80%,不过能生成可执行文件,这个可不简单啊。文件有点大,117k了。

虽然Codon支持几乎所有的Python语法,但它不是一个直接的替代品,大型代码库可能需要修改才能通过Codon编译器运行。例如,Python的一些模块尚未在Codon中实现,并且不允许使用Python的一些动态功能。codon编译器生成详细的错误消息,以帮助识别和解决任何不兼容性。

codon还得升级来适配python。

但是这玩意到底有啥用?

不急,这里可以使用C/C++来调用python却是很方便的,所以一手C/C++一手python,天下我有。

使用 from C import 从 Codon 调用 C/C++ 非常容易,但也可以从 C/C++ 代码调用 Codon。要使codon函数在外部可见,只需使用 @export 对其进行注释:

@export
def foo(n: int):
    for i in range(n):
        print(i * i)
    return n * n

编译:odon build -o libfoo.so foo.codon

现在我们可以从 C 程序调用 foo
#include <stdint.h>
#include <stdio.h>
int64_t foo(int64_t);
int main() {
printf("%llu\n", foo(10));
}
编译:
gcc -o foo -L. -lfoo foo.c

 $ ./foo
0
1
4
9
16
25
36
49
64
81
100

转换类型

Codon
C/C++
int
long or int64_t
float
double
bool
bool
byte
char or int8_t
str
{int64_t, char*} (length and data)
{int64_t, char*} (长度和数据)
class
Pointer to corresponding tuple 指向相应元组的指针
@tuple
Struct of fields 字段结构
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caridle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值