您现在的位置是:首页 >技术教程 >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 字段结构 
                     
                   | 
            




U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结