相关文章推荐
失眠的烤红薯  ·  python qt textBrowser ...·  1 月前    · 
帅气的领带  ·  【Pyspark ...·  2 周前    · 
近视的橙子  ·  python ...·  1 周前    · 
腼腆的烈马  ·  [Anaconda]——Linux下cond ...·  4 天前    · 
眉毛粗的电梯  ·  python ...·  3 天前    · 
玩命的小虾米  ·  SQL Server ...·  5 月前    · 
开朗的烈酒  ·  自定义 Webex Meetings 和 ...·  11 月前    · 
正直的荔枝  ·  D2HNet: Joint ...·  1 年前    · 
[特別篇] Python高性能編譯器-Codon

[特別篇] Python高性能編譯器-Codon

9 个月前 · 来自专栏 Cython/PyPy编程技术

Codon是繼PyPy、Cython、Numba之後又一個第三方的高性能Python編譯器

什么是Codon?

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

Codon對Python代碼的兼容性?

至少我看來,Codon對Python代碼的兼容性是不如Cython,進步的空間很大。雖然 Codon 幾乎支持 Python 的所有語法,但它並不是直接替代品,大型代碼庫可能需要修改才能通過 Codon 編譯器運行。例如,一些 Python 的模塊還沒有在 Codon 中實現,一些 Python 的動態特性是不允許的。 Codon 編譯器會生成詳細的錯誤消息,以幫助識別和解決任何不兼容問題。 Codon 支持無縫處理需要特定 Python 庫或動態性的情況。

  • 與CPython比較? Codon 尝试尽可能地遵循 CPython 的语法、语义和 API,除了 Codon 出于性能原因与 CPython 不同的少数情况(一个例子是 Codon 的 64 位 int 与 CPython 的任意宽度 int)。 在性能方面,會比CPython 快通常在 10-100 倍左右。
  • 與Numba對比? 虽然 Codon 确实提供了一个类似于 Numba 的 JIT 装饰器,但 Codon 通常是一个提前编译器,可以将端到端程序编译为本机代码。 它还支持编译范围更广的 Python 结构和库。
  • 與PyPy相比? PyPy 的目標是努力成为 CPython 的有效替代品,而 Codon 在几个地方有所不同,以消除任何动态运行时或虚拟机,从而获得更好的性能。
  • 與C++相比呢? Codon 通常生成与等效的 C 或 C++ 程序相同的代码。 Codon 有时可以生成比 C/C++ 编译器更好的代码,原因有很多,例如更好的容器实现,Codon 不使用目标文件和内联所有库代码的事实,或者不使用 C 执行的特定于 Codon 的编译器优化 或 C++
  • 與Julia比較? Codon 的编译过程实际上更接近 C++ 而不是 Julia。 Julia 是一种动态类型语言,它执行类型推断作为优化,而 Codon 类型提前检查整个程序。 Codon 还试图通过采用 Python 的语法和语义来规避新语言的学习曲线。

我想使用 Codon,但我有一個大型 Python 代碼庫,我不想移植。

您可以通過 以每個函數為基礎使用 Codon,它可以在 Python 代碼庫中使用。 這將只編譯帶註釋的函數並自動處理與 Codon 之間的數據轉換。 它還允許使用任何 Codon 特定的模塊或擴展,例如多線程。

與其他語言和框架的互操作性如何?

互操作性現在是並將繼續是 Codon 的優先事項。 我們不希望使用 Codon 使您無法使用現有的所有其他優秀框架和庫。 Codon 支持與 Python 和 C/C++ 的完全互操作性。

Codon是否使用垃圾收集?

是的,Codon 支持Boehm垃圾回收機制

Codon 支持 任意Python 模塊 或內置函數嗎?

雖然 Codon 涵蓋了 Python 標準庫的一個相當大的子集,但它還沒有涵蓋每個模塊的每個函數。 請注意,仍然可以通過 Python 通過 from python import 調用缺少的函數。 許多缺少 Codon 本地實現的功能(例如 I/O 或 OS 相關功能)通常也不會看到 Codon 的實質性加速。

對於我的應用程序,Codon 並不比 Python 快。

將大部分時間花在 C 實現的庫代碼中的應用程序通常不會在 Codon 中看到實質性的性能改進。 同樣,受 I/O 或網絡限制的應用程序在 Codon 中也會遇到相同的瓶頸。

Codon 是開源的嗎?

Codon 是根據 許可的,這意味著它的源代碼是公開的,並且可以免費用於非生產用途。 BSL 在技術上不是“開源”許可證,儘管在許多情況下您仍然可以像對待任何其他開源項目一樣對待 Codon。 重要的是,根據 BSL,每個版本的 Codon 都會在 3 年後轉換為實際的開源許可證(特別是 )。


原文faq,請參考鏈接 https://docs.exaloop.io/codon/general/faq

编辑于 2022-12-13 09:13 ・IP 属地中国香港

文章被以下专栏收录

    Cython/PyPy编程技术

    Cython/PyPy编程技术

    全知乎只专注于高性能Python编程技术的专题