Codon เป็นการใช้งาน Python ที่มีประสิทธิภาพสูงซึ่งรวบรวมไปยังรหัสเครื่องเนทีฟโดยไม่มีค่าใช้จ่ายใด ๆ การเร่งความเร็วโดยทั่วไปผ่าน Vanilla Python อยู่ในลำดับที่ 10-100x หรือมากกว่าในเธรดเดียว ประสิทธิภาพของ Codon มักจะเทียบเท่ากับ (และบางครั้งก็ดีกว่า) ของ C/C ++ ซึ่งแตกต่างจาก Python, Codon รองรับ multithreading ดั้งเดิมซึ่งสามารถนำไปสู่การเร่งความเร็วที่สูงขึ้นหลายเท่า
คิดว่า Codon เป็น Python ที่ได้รับการปรับปรุงใหม่เพื่อการรวบรวมแบบคงที่ก่อนเวลาที่สร้างขึ้นจากพื้นดินด้วยประสิทธิภาพที่ดีที่สุดในใจ
Drop-In แทนที่ CPYTHON: codon ไม่ใช่การแทนที่แบบดรอปอินสำหรับ cpython มีบางแง่มุมของ Python ที่ไม่เหมาะสำหรับการรวบรวมแบบคงที่ - เราไม่สนับสนุนสิ่งเหล่านี้ใน codon มีวิธีการใช้ codon ในรหัสฐาน Python ที่ใหญ่กว่าผ่านทาง Decorator JIT หรือ Backend Extension Python Codon ยังรองรับการเรียกโมดูล Python ใด ๆ ผ่านการทำงานร่วมกันของ Python ดูเพิ่มเติมที่ "ความแตกต่างกับ Python" ในเอกสาร
การสร้างไวยากรณ์และภาษาใหม่: เราพยายามหลีกเลี่ยงการเพิ่มไวยากรณ์ใหม่คำหลักหรือคุณสมบัติภาษาอื่น ๆ ให้มากที่สุด ในขณะที่ Codon เพิ่มไวยากรณ์ใหม่ในสถานที่สองแห่ง (เช่นเพื่อแสดงความเท่าเทียมกัน) เราพยายามทำให้มันคุ้นเคยและใช้งานง่ายที่สุดเท่าที่จะทำได้
ไบนารีที่สร้างไว้ล่วงหน้าสำหรับ Linux (X86_64) และ MacOS (X86_64 และ ARM64) มีให้บริการควบคู่ไปกับการเปิดตัวแต่ละครั้ง ดาวน์โหลดและติดตั้งด้วย:
/bin/bash -c " $( curl -fsSL https://exaloop.io/install.sh ) "
หรือคุณสามารถสร้างจากแหล่งที่มา
Codon เป็นภาษาที่เข้ากันได้กับงูหลามและโปรแกรม Python จำนวนมากจะทำงานกับการดัดแปลงไม่กี่รายการ:
def fib ( n ):
a , b = 0 , 1
while a < n :
print ( a , end = ' ' )
a , b = b , a + b
print ()
fib ( 1000 )
คอมไพเลอร์ codon
มีตัวเลือกและโหมดจำนวนมาก:
# 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
ดูเอกสารสำหรับตัวเลือกและตัวอย่างเพิ่มเติม
คุณสามารถนำเข้าและใช้แพ็คเกจ Python จาก Codon ตัวอย่างเช่น:
from python import matplotlib . pyplot as plt
data = [ x ** 2 for x in range ( 10 )]
plt . plot ( data )
plt . show ()
(อย่าลืมตั้งค่าตัวแปรสภาพแวดล้อม CODON_PYTHON
เป็นไลบรารีที่ใช้ร่วมกันของ cpython ตามที่อธิบายไว้ในเอกสาร)
ตัวอย่างการนับหลักนี้แสดงการสนับสนุน OpenMP ของ Codon ซึ่งเปิดใช้งานด้วยการเพิ่มหนึ่งบรรทัด คำอธิบายประกอบ @par
บอกให้คอมไพเลอร์ขนานกับสิ่งต่อไปนี้ for
-loop ในกรณีนี้โดยใช้กำหนดการแบบไดนามิกขนาดก้อน 100 และ 16 เธรด
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 )
Codon รองรับการเขียนและดำเนินการเมล็ด GPU นี่คือตัวอย่างที่คำนวณชุด 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 )
การเขียนโปรแกรม GPU สามารถทำได้โดยใช้ @par
Syntax ด้วย @par(gpu=True)
โปรดดู docs.exaloop.io สำหรับเอกสารเชิงลึก