1
0
mirror of https://github.com/exaloop/codon.git synced 2025-06-03 15:03:52 +08:00
A. R. Shajii e1016f9e9a
Upgrade to LLVM 15 (#56)
* Upgrade to LLVM 15 (WIP)

* Call `setPresplitCoroutine()` on coro LLVM funcs

* Use new pass manager

* Update deps

* Update docs

* Fix exceptions on M1

* Add libunwind

* Use Orc and JITLink for "codon run"

* JITLink integration

* Fix callback

* Fix strbuf, fix GC root registration

* Fix test init

* Fix llvm function

* Fix pickle, float atomics

* Add TargetLibraryAnalysis

* Use new LLVM pass manager in GPU codegen

* Fix libunwind linking

* Fix libunwind

* Fix GPU passes

* Don't link libunwind explicitly

* Bump version

* Update plugins for new pass manager

* Fix bash error

* Fix GPU GV extraction

* Move simd module to experimental folder

* Update file read

* Add benchmark programs

* Add dynamic tuple

* Fix parser tuple slicing bug

* Make DynamicTuple interoperable with Tuple

* Fix DynamicTuple GPU interop

* Dockerize builds

* Simplify CMake

* Revert "Simplify CMake"

This reverts commit 08d2920349b5033750b54b4fb7aaa9bac264b750.

Co-authored-by: Ibrahim Numanagić <ibrahimpasa@gmail.com>
2022-10-14 09:31:10 -04:00
2022-10-14 09:31:10 -04:00
2022-10-14 09:31:10 -04:00
2022-10-14 09:31:10 -04:00
2022-10-14 09:31:10 -04:00
2022-10-14 09:31:10 -04:00
2022-10-14 09:31:10 -04:00
2022-10-14 09:31:10 -04:00
2022-10-14 09:31:10 -04:00
2021-09-27 14:02:44 -04:00
2022-08-02 14:55:25 -04:00
2021-10-03 11:18:57 -04:00
2022-07-26 16:06:00 -04:00
2022-07-26 16:08:42 -04:00
2022-10-14 09:31:10 -04:00
2021-09-27 14:02:44 -04:00
2021-10-05 10:12:56 -05:00
2022-07-26 16:08:42 -04:00

Codon

Build Status Discord

What is Codon?

Think of Codon as a strongly-typed and statically-compiled Python: all the bells and whistles of Python, boosted with a strong type system, without any performance overhead.

Codon is a high-performance Python compiler that compiles Python code to native machine code without any runtime overhead. Typical speedups over Python are on the order of 10-100x or more, on a single thread. Codon's performance is typically on par with (and in many cases better than) that of C/C++. Unlike Python, Codon supports native multithreading, which can lead to speedups many times higher still.

Codon is extensible via a plugin infrastructure. For example, Seq is a domain-specific language for genomics and bioinformatics, built on Codon, that can outperform hand-optimized C code by 2-10x (more details in the Seq paper).

What isn't Codon?

While Codon supports nearly all of Python's syntax, it is not a drop-in replacement, and large codebases might require modifications to be run through the Codon compiler. For example, some of Python's modules are not yet implemented within Codon, and a few of Python's dynamic features are disallowed. The Codon compiler produces detailed error messages to help identify and resolve any incompatibilities.

Codon supports seamless Python interoperability to handle cases where specific Python libraries or dynamism are required:

@python
def hello():
    import sys
    print('Hello from Python!')
    print('The version is', sys.version)

hello()
# Hello from Python!
# The version is 3.9.6 (default, Jun 29 2021, 06:20:32)
# [Clang 12.0.0 (clang-1200.0.32.29)]

Examples

Codon is a Python-compatible language, and many Python programs will work with few if any modifications:

def fib(n):
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()
fib(1000)

This prime counting example showcases Codon's OpenMP support, enabled with the addition of one line. The @par annotation tells the compiler to parallelize the following for-loop, in this case using a dynamic schedule, chunk size of 100, and 16 threads.

from sys import argv

def is_prime(n):
    factors = 0
    for i in range(2, n):
        if n % i == 0:
            factors += 1
    return factors == 0

limit = int(argv[1])
total = 0

@par(schedule='dynamic', chunk_size=100, num_threads=16)
for i in range(2, limit):
    if is_prime(i):
        total += 1

print(total)

Install

Pre-built binaries

Pre-built binaries for Linux and macOS on x86_64 are available alongside each release. We also have a script for downloading and installing pre-built versions:

/bin/bash -c "$(curl -fsSL https://exaloop.io/install.sh)"

Build from source

See Building from Source.

Documentation

Please see docs.exaloop.io for in-depth documentation.

Description
A high-performance, zero-overhead, extensible Python compiler using LLVM
Readme Apache-2.0 26 MiB
Languages
Python 66.2%
C++ 32.1%
C 0.9%
CMake 0.5%
Shell 0.2%