TypePHP Nedir?
TypePHP, Swoole ekibinin geliştirdiği Ahead-of-Time (AOT) derleyicidir. PHP kaynak kodunu önce C++17'ye, ardından doğrudan CPU'nun çalıştırdığı native makine koduna dönüştürür. Bytecode cache veya JIT gibi bir sanal makinede yorumlama yapmaz — derleme önceden tamamlanır, runtime'da PHP yorumlayıcısına ihtiyaç duyulmaz.
PHP'nin tanıdık sözdizimini korurken derleme zamanı tip bilgisi ekler. Bu sayede derleyici yoğun kod yolları için optimize edilmiş, statik tipli C++ üretebilir.
Nasıl Çalışır?
Derleme akışı:
PHP kaynak kodu + .stub.php bildirimleri
↓
Sembol modeli oluştur, doğrula
↓
Fonksiyon gövdelerini C++17'ye dönüştür
↓
Native derleyici → çalıştırılabilir / PHP eklentisi / kütüphane
Benchmark: Ne Kadar Hızlı?
PHP'nin kendi kaynak ağacıyla gelen resmi benchmark'ları (bench.php ve micro_bench.php) -O3 ile derlenerek ölçüldü:
- bench.php: PHP 5.034 s → TypePHP 0.603 s — yaklaşık 8× hız artışı
- micro_bench.php: PHP 13.045 s → TypePHP 2.021 s — yaklaşık 6.5× hız artışı
Dizilerde daha çarpıcı: 10.000 × 100.000 eleman güncelleme döngüsünde std::array (TypePHP AOT), PHP dizisinden (JIT dahil) yaklaşık 10× daha hızlı ve C++ std::vector ile neredeyse aynı performansta çalışıyor.
Üç Derleme Modu
- bin (varsayılan): Bağımsız native çalıştırılabilir dosya — PHP CLI gerektirmez
- ext: Yüklenebilir PHP eklentisi — mevcut PHP SAPI'sine derlenmiş kodu dahil et
- lib: Paylaşımlı kütüphane — başka projelerden çağrılabilir TypePHP API'si
Öne Çıkan Özellikler
- Native tip sistemi:
int,float,booldoğrudan C++ skaler tiplerine (int64_t,double,bool) map edilir. Sayısal hesaplamalar sıradan CPU komutlarına derlenir. - Güçlü tipli konteynerler:
std::array,std::vector,std::map— derleme zamanında element tipleriyle. PHP dizilerinden 10× hızlı. - Yüksek hassasiyetli tipler:
bigInt(GMP),decimal(libmpdec),bigFloat(MPFR) — taşma olmadan. - Karışık C++/PHP: Performans kritik çekirdekler C++ ile yazılıp PHP'den çağrılabilir.
- Platformlar arası: Linux, Windows, macOS; x64 ve ARM64; ayrıca WASM çıktısı.
- Kaynak kodu koruması: Kaynak PHP dosyaları yerine native binary gönderilir.
Kısıtlamalar: Her PHP Kodu Derlenemiyor
TypePHP, PHP sözdiziminin AOT derlemeyle uyumlu bir alt kümesini destekler. Bazı önemli kısıtlamalar:
- Global kapsamda sadece bildirimler; çalıştırılabilir ifadeler mutlaka bir fonksiyon içinde olmalı
- Binary modda mutlaka bir
main()fonksiyonu gerekir - Bazı dinamik reflection, closure ve referans kalıpları desteklenmiyor
- Mevcut projeyi olduğu gibi alıp derleyemezsin — uyumsuzluk listesini kontrol etmek gerekir
Kim Kullanmalı?
TypePHP şu anda v0.7.0 (pre-1.0) sürümündedir ve aktif geliştirme altındadır. Şu durumlar için uygundur:
- Sayısal yoğun hesaplama gerektiren CLI araçları
- Kaynak koruması kritik olan ticari PHP uygulamaları
- PHP sözdizimini kullanarak native performanslı kütüphaneler yazmak isteyenler
Mevcut büyük web uygulamaları için henüz erken. Ama geliştirme hızına bakılırsa önümüzdeki 1-2 yılda ciddi bir araç haline gelebilir. Kaynak kod: github.com/swoole/typephp.
Performans gerektiren PHP uygulamalarını çalıştırmak için cloud sunucu veya web hosting paketlerimize göz atabilirsin.
TypePHP, PHP'nin kendi JIT'inden ne farkı var?
PHP'nin JIT'i çalışma zamanında (runtime) sık çalıştırılan kod yollarını optimize eder; hâlâ Zend sanal makinesi içinde çalışır ve warm-up süresine ihtiyaç duyar. TypePHP ise derlemeyi önceden (AOT) tamamlar — çalışma zamanında yorumlayıcı yoktur, PHP VM yoktur. Sonuç: JIT'e kıyasla çok daha öngörülebilir ve deterministik performans.
TypePHP ile mevcut Laravel uygulamasını derleyebilir miyim?
Henüz hayır. TypePHP, dinamik PHP özelliklerinin tamamını desteklemiyor ve global kapsamda çalıştırılabilir kod yasak. Laravel'in bootstrap katmanı bu kısıtla çatışır. TypePHP'nin hedef kitlesi şu an PHP sözdizimini kullanan yeni, statik yapılı projeler ve CLI araçları. Olgunlaştıkça büyük framework desteği de gelebilir.
TypePHP, Swoole'dan bağımsız mı?
Evet. TypePHP, Swoole ekibinin geliştirdiği ayrı bir proje. Swoole'un async/coroutine framework'üne bağımlılığı yok. Derlenmiş binary mode'da PHP CLI bile gerekmez — native çalıştırılabilir dosya CPU'da doğrudan koşar. Extension mode Zend runtime'ı kullanır ama Swoole gerekmez.