İçeriğe geç
Belgeler · Ölçümler

Yöntem ne kadar hızlı?

Yöntem'in üç çalışma biçiminin elle yazılmış C++, JavaScript ve Python ile karşılaştırıldığı ölçümün yöntemi, kapsamı ve sonuçları.

Özet

Aynı algoritmalar dört dilde yazıldı ve aynı bilgisayarda ölçüldü. Açılış süresi çıkarıldığında, sekiz hesaplama testinin geometrik ortalamasına göre Yöntem'in ürettiği C++ kodu elle yazılmış C++'tan 1,9 kat, JavaScript'e derlenen Yöntem 29 kat yavaş çalıştı. Python yorumlayıcısı öğrenme ve başvuru amaçlıdır; hız için tasarlanmamıştır.

OrtamKat
C++ (g++ -O2)1,0×
Yöntem → C++1,9×
Node.js4,0×
Python 323,6×
Yöntem → JavaScript29,0×
Yöntem, Python yorumlayıcısı1673×

Ölçümün kapsamı ve sınırları

  • Ölçüm 2026-11-09 tarihinde, Yöntem 0.5.0 ile tek bir Linux bilgisayarında (x86-64) yapıldı. Başka donanımda oranlar değişebilir.
  • "Yöntem → C++" satırı, gömülü arka ucun ürettiği C++ kodunun bilgisayarda g++ -O2 ile derlenmiş hâlidir. ESP32 kartında ölçüm yapılmadı; bu sayılar kart üzerindeki hızı göstermez.
  • Dokuz testten biri (bos) yalnızca açılış süresini ölçer ve oranlardan çıkarılır; oranlar kalan sekiz testten hesaplanır.
  • Her test ısınmadan sonra 7 kez çalıştırıldı ve ortanca süre alındı. Çıktısı beklenenle birebir aynı olmayan ölçüm geçersiz sayılır.
  • Testler küçük hesaplama çekirdekleridir; dosya, ağ ya da arayüz ağırlıklı programlar için bir şey söylemez.
OrtamSürüm
Node.jsv22.23.4
Python3.13.18
C++ derleyicisig++ (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
YöntemYöntem 0.5.0 (JavaScript)

Testler

TestNe ölçer?
bosaçılış süresi (boş program)
fannkuchfannkuch (N=8): tamsayı dizileri
fibözyinelemeli Fibonacci(27): fonksiyon çağrısı
ikili_agactam ikili ağaçlar (derinlik 14): nesne oluşturma
matris100×100 matris çarpımı: ondalık aritmetik, dizi erişimi
nbodybeş cisim, 20000 adım: ondalık aritmetik
siralama30000 sayıyı hızlı sıralama: karşılaştırma, takas
sozcuk_sayma40000 sözcüğü sayma: metin ve sözlük
spektralspektral norm (N=120): fonksiyon çağrısı, ondalık

C++'a göre kaç kat yavaş?

Açılış süresi çıkarılmış oranlar; 1,0× elle yazılmış C++'tır.

TestYöntem → C++Yöntem → JavaScriptYöntem, Python yorumlayıcısıC++ (g++ -O2)Node.jsPython 3
fannkuch1,5×32,2×2859×1,0×3,0×42,6×
fib1,5×17,9×3399×1,0×3,9×23,1×
ikili_agac1,5×20,0×473×1,0×2,8×6,3×
matris2,3×59,4×4709×1,0×6,2×99,5×
nbody5,8×100×6783×1,0×4,5×95,1×
siralama1,4×21,5×1047×1,0×4,3×11,6×
sozcuk_sayma1,2×7,5×89,4×1,0×3,2×3,2×
spektral2,6×46,0×4456×1,0×5,7×43,9×

Ortanca süreler

Açılış süresi dahil, olduğu gibi ölçülen süreler.

TestYöntem → C++Yöntem → JavaScriptYöntem, Python yorumlayıcısıC++ (g++ -O2)Node.jsPython 3
bos1,6 ms63,2 ms32,8 ms1,0 ms32,6 ms13,7 ms
fannkuch6,2 ms0,159 sn8,579 sn4,0 ms41,6 ms0,141 sn
fib3,1 ms81,1 ms3,432 sn1,4 ms36,5 ms36,8 ms
ikili_agac11,4 ms0,195 sn3,146 sn7,5 ms50,8 ms55,3 ms
matris5,1 ms0,153 sn7,181 sn2,5 ms42,0 ms0,165 sn
nbody13,6 ms0,269 sn13,991 sn3,0 ms41,8 ms0,209 sn
siralama7,6 ms0,154 sn4,484 sn5,2 ms51,0 ms63,1 ms
sozcuk_sayma10,7 ms0,119 sn0,699 sn8,4 ms56,4 ms37,7 ms
spektral6,2 ms0,142 sn7,703 sn2,7 ms42,5 ms89,3 ms

Ölçümü kendiniz yinelemek

Test programları, beklenen çıktılar ve ölçüm betiği Yöntem deposunun benchmark/ klasöründedir. Node.js, Python 3 ve g++ (ya da clang++) kurulu bir bilgisayarda:

cd js && npm install && npm run build && cd ..
python3 benchmark/calistir.py

Sonuçlar benchmark/sonuclar/ klasörüne yazılır: rapor.md (bu sayfadaki tablolar), rapor.json (ham ölçümler) ve rapor.svg (grafik). Kendi ölçümünüzde farklı bir sonuç görürseniz topluluk sayfasındaki yoldan bildirebilirsiniz.