C/C++ Hızına İhtiyacınız Varsa Python Derleyicisi Codon Göz Atın

Codon, herhangi bir çalışma zamanı ek yükü olmadan Python kodunu yerel makine koduna derleyen yüksek performanslı bir Python derleyicisidir. Python üzerindeki tipik hızlanmalar, tek bir iş parçacığında (single thread) 10-100x veya daha fazladır. Codon'un performansı tipik olarak C/C++ ile eşittir (ve bazen ondan daha iyidir). Python'dan farklı olarak Codon, daha da fazla hızlanmalara yol açabilen yerel çoklu iş parçacığını (native multithreading) destekler.

Bununla birlikte, Codon tüm Python'u desteklemez ve dinamik tür manipülasyonunu ve çalışma zamanı yansımasını atlar, bu da kodun analiz edilmesini ve optimize edilmesini zorlaştırır. Bununla birlikte, statik olarak yazılan bir derleyici motoru ve esnek ara gösterim (IR) ile eskisinden daha hızlı kod üretir.

Codon başlangıçta Python'da yüksek performanslı etki alanına özgü diller (dsl'ler) oluşturmak için tasarlandı. Dsl'ler, Python veya C gibi genel amaçlı dillerin aksine, belirli amaçlara odaklanan dillerdir. Biyoinformatik ve genetik için bir DSL olan Seq'de kökleri olan Codon, Python 3 ile büyük ölçüde uyumlu bir dil derleyicisine dönüşmüştür.

Codon'un "Python'un sözdizimini ve anlambilimini ek alana özgü özellikler ve IR optimizasyonları ile birlikte paylaşan dsl'lerin geliştirilmesine olanak sağladığını" açıkladılar." Python çalışma zamanı yükü olmadan yerel makine kodunu çıkararak Codon, Python komut dosyalarıyla C benzeri bir performans elde eder.

Python kodunun derlendikten sonra hız karşılaştırmasına göz atalım.

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.')
$ python3 fib.py
Computed fib(40) = 102334155 in 17.979357957839966 seconds.

$ codon run -release fib.py
Computed fib(40) = 102334155 in 0.275645 seconds.

Python ve Codon ile arasında hız farkını bariz bir şekilde görebiliyoruz.