Performans — C Ligi, Sürprizsiz

19 Temmuz 2026 · MELP v1.0 · Intel Core i7-10750H · Linux x86-64

Ne iddia ediyoruz, ne etmiyoruz. MELP "C'den hızlı" iddiasında değildir. Hedefi sürprizsiz, ölçülebilir, C ligi performansıdır — aynı asimptotik sınıf, bilinen sabit fark. MELP LLVM/clang ile derlenir; bu yüzden en adil kıyas, C'nin de aynı backend'le (clang -O2) derlenmesidir — böylece tek değişken dilin kendisi olur.

Protokol  — denetlenebilirlik için

Makine Intel Core i7-10750H @ 2.60GHz · 12 thread · Linux x86-64
Derleyiciler MELP v1.0  ·  clang 22.1.8 (-O2)  ·  gcc 14.2 (-O2)  ·  rustc 1.93.0 (-O)  ·  go 1.25.7
Yöntem Her test 5 kez koşuldu, en iyi değer raporlandı (soğuk-başlangıç gürültüsü elenir). Tüm diller aynı makinede, aynı turda.
Adillik Her dilin kaynağı depoda açıktır (benchmark/*.{mlp,c,rs,go}). C referansı deyimseldir — örneğin string100k.c uzunluğu bir değişkende tutar, her turda strlen çağıran saman-adam değildir.

Çalışma süresi  (ms)  — düşük daha iyi

fib(40) özyinelemeli Fibonacci — katlanamaz, gerçek CPU işi
C (clang -O2)
232 ms
MELP
234 ms
Rust (-O)
277 ms
Go
429 ms

Okuma: MELP ile C pratikte özdeştir (234 ≈ 232) — aynı LLVM backend'i kullanıldığında dil katmanı ölçülebilir bir kayıp getirmiyor. Bu tablonun asıl söylediği budur. MELP bu testte Rust ve Go'nun da önünde çıkmıştır; bu tek satırlık bir sonuçtur, manşet değildir.

Dipnot: Aynı C kaynağı gcc -O2 ile derlendiğinde 171 ms'de koşar. Bu, gcc'nin bu özyineleme örüntüsündeki kod üretiminin LLVM'inkinden iyi olduğunu gösterir — dillerin değil, backend'lerin farkıdır. Kıyas tablosunda clang kullanılmasının nedeni budur.

string concat 100K 100 000 birleştirme — karmaşıklık sınıfı doğrulaması
C / Rust
~1 ms
MELP
9 ms
Go
378 ms

Okuma: MELP C/Rust ile aynı karmaşıklık sınıfındadır — O(n). Sabit katsayıda C ve Rust öndedir (~9x). Bu, kabul edilen ve bilinen bir farktır; daha önce bu test O(n²) davranıyordu ve 1758 ms sürüyordu.

Hız tablosuna girmeyenler

loop 100M optimize-edilebilirlik göstergesi — hız ölçümü değil

Yan etkisi olmayan 100 milyonluk boş döngü, LLVM tarafından derleme zamanında katlanır (induction variable elimination) — yani döngü hiç koşmaz. Böyle bir testte çıkan "2 ms" değeri CPU hızını değil, ölü kod elemenin ne kadar agresif olduğunu ölçer. MELP'in ürettiği IR'ın LLVM tarafından katlanabilecek kadar temiz olması olumlu bir işarettir; ancak bu bir hız sonucu değildir ve karşılaştırma tablosuna alınmaz. Aynı döngü GCC'de katlanmadığı için ortaya çıkan devasa fark, geçmişte "MELP C'den 65 kat hızlı" gibi yanlış bir sonuca yol açmıştı.

Kendi Testinizi Yapın

Benchmark kaynakları depoda açıktır — aynı testleri kendi makinenizde koşabilirsiniz.