Kodon adalah implementasi Python berkinerja tinggi yang dikompilasi ke kode mesin asli tanpa overhead runtime. Speedup khas atas vanilla python berada di urutan 10-100x atau lebih, pada satu utas. Kinerja kodon biasanya setara dengan (dan kadang -kadang lebih baik dari) yaitu C/C ++. Tidak seperti Python, kodon mendukung multithreading asli, yang dapat menyebabkan speedup berkali -kali lebih tinggi.
Pikirkan kodon saat Python ditata ulang untuk kompilasi statis yang statis, dibangun dari bawah ke atas dengan kinerja terbaik dalam pikiran.
Penggantian drop-in untuk cpython: kodon bukan penggantian drop-in untuk cpython. Ada beberapa aspek python yang tidak cocok untuk kompilasi statis - kami tidak mendukung ini dalam kodon. Ada cara untuk menggunakan kodon dalam basis kode Python yang lebih besar melalui dekorator JIT atau backend ekstensi Python. Kodon juga mendukung panggilan modul Python apa pun melalui interoperabilitas Python -nya. Lihat juga "Perbedaan dengan Python" di Dokumen.
Sintaks dan konstruksi bahasa baru: Kami mencoba menghindari menambahkan sintaks, kata kunci atau fitur bahasa lainnya sebanyak mungkin. Sementara kodon memang menambahkan beberapa sintaks baru di beberapa tempat (misalnya untuk mengekspresikan paralelisme), kami mencoba menjadikannya sama akrab dan intuitif mungkin.
Binari pra-dibangun untuk Linux (x86_64) dan macOS (x86_64 dan ARM64) tersedia di samping setiap rilis. Unduh dan instal dengan:
/bin/bash -c " $( curl -fsSL https://exaloop.io/install.sh ) "
Atau Anda dapat membangun dari sumber.
Kodon adalah bahasa yang kompatibel dengan Python, dan banyak program Python akan bekerja dengan sedikit jika ada modifikasi:
def fib ( n ):
a , b = 0 , 1
while a < n :
print ( a , end = ' ' )
a , b = b , a + b
print ()
fib ( 1000 )
Kompiler codon
memiliki sejumlah opsi dan mode:
# compile and run the program
codon run fib.py
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
# compile and run the program with optimizations enabled
codon run -release fib.py
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
# compile to executable with optimizations enabled
codon build -release -exe fib.py
./fib
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
# compile to LLVM IR file with optimizations enabled
codon build -release -llvm fib.py
# outputs file fib.ll
Lihat dokumen untuk lebih banyak opsi dan contoh.
Anda dapat mengimpor dan menggunakan paket Python apa pun dari kodon. Misalnya:
from python import matplotlib . pyplot as plt
data = [ x ** 2 for x in range ( 10 )]
plt . plot ( data )
plt . show ()
(Ingatlah untuk mengatur variabel lingkungan CODON_PYTHON
ke perpustakaan bersama cpython, seperti yang dijelaskan dalam dokumen.)
Contoh penghitungan utama ini menampilkan dukungan OpenMP kodon, diaktifkan dengan penambahan satu baris. Anotasi @par
memberi tahu kompiler untuk memparalelkan yang berikut for
-loop, dalam hal ini menggunakan jadwal dinamis, ukuran chunk 100, dan 16 utas.
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 )
Kodon mendukung penulisan dan melaksanakan kernel GPU. Berikut adalah contoh yang menghitung set mandelbrot:
import gpu
MAX = 1000 # maximum Mandelbrot iterations
N = 4096 # width and height of image
pixels = [ 0 for _ in range ( N * N )]
def scale ( x , a , b ):
return a + ( x / N ) * ( b - a )
@ gpu . kernel
def mandelbrot ( pixels ):
idx = ( gpu . block . x * gpu . block . dim . x ) + gpu . thread . x
i , j = divmod ( idx , N )
c = complex ( scale ( j , - 2.00 , 0.47 ), scale ( i , - 1.12 , 1.12 ))
z = 0j
iteration = 0
while abs ( z ) <= 2 and iteration < MAX :
z = z ** 2 + c
iteration += 1
pixels [ idx ] = int ( 255 * iteration / MAX )
mandelbrot ( pixels , grid = ( N * N ) // 1024 , block = 1024 )
Pemrograman GPU juga dapat dilakukan dengan menggunakan sintaks @par
dengan @par(gpu=True)
.
Silakan lihat docs.exaloop.io untuk dokumentasi mendalam.