您现在的位置是:首页 >学无止境 >codon也将py程序加速了90倍了,C/C++调用codon网站首页学无止境
codon也将py程序加速了90倍了,C/C++调用codon
我的苹果笔记本比较老旧了,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
foo
:
$ ./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 字段结构
|