Rust'tan Daha Hızlı mı? Hatalı Testlerle Hızlılık Karşılaştırması
Rust'tan Daha Hızlı mı? Hatalı Testlerle Hızlılık Karşılaştırması
Tov, "agent'lar için kodlama yapmak üzere geliştirilmiş bir dildir. TypeScript'e benzer bir şekilde okunur ve Rust'ı geçebilir kadar hızlı Native ikili dosyalar üretir." diye tanıtılan yeni bir programlama dili. Tov'un GitHub deposunda paylaşılan bazı testlerde, Rust'tan daha hızlı olduğu iddia ediliyor — hatta bazen 10 kat daha hızlı. Bu iddialar, Tov'un performansını kutsal bir başarı olarak sunmak isteyen bir pazarlama stratejisi gibi görünüyor. Ancak burada kritik bir soru: Bu testler gerçekten doğru mu?
Tov'ın arkasındaki yapısı çok basit: bir derleyicidir. Yazdığınız TypeScript kodunu kontrol eder, bunu C diline çevirir ve ardından clang ile birlikte bir Native ikili dosyaya dönüştürür. Yani göndereceğiniz tek dosya, kurulum gerektirmeyen bir ikili dosyadır.
Bu basit bir gerçekle karşı karşıya kalınca, bir mühendis hemen şüphe duymalıdır. Çünkü Rust, C ile neredeyse aynı performansı sunar. Tov'un C'ye dönüştürdüğü bir şeyi, C'ye dönüşen bir şeyin kendisiyle karşılaştırmak, "C, C'den hızlı" demek gibidir. Bu bir çelişkidir.
Hatalı Testler: Neden "Faster than Rust" Yanlış?
Tov'un sunduğu "farklılıklar"ın, yapısal bir hata nedeniyle doğduğu ortaya çıkıyor. Testler, Rust'ın performansını bilinçli bir şekilde zayıflatacak şekilde tasarlanmıştır. Bu tür testlere "kötü niyetli" veya "hileli" benchmarks denir.
3 Hatalı Benchmark: bigint_fib, dispatch ve map_insert
Tov'un sunduğu testlerden üçünü inceliyoruz: bigint_fib, dispatch ve map_insert. Bu testlerde, Rust'ın performansını düşüren hatalar yapılmış. Bunu doğrulamak için, Tov'un testlerini kendi sistemlerimizde yeniden çalıştırdık.
1. bigint_fib: Büyük Sayılarla Fibonacci Hesabı
Tov'un sunduğu sonuçlara göre, bu işlemde Rust 501 ms ve 4.5 MB kullanırken, Tov 168 ms ve 3.1 MB ile daha hızlı çalışıyordu. Ancak bu sonuçları hiçbir ortamda tekrar üretmedik.
İçindeki Rust kodu şu şekilde:
use num_bigint::BigUint;
use num_traits::{One, Zero};
const N: u32 = 300000;
fn main() {
let mut a = BigUint::zero();
let mut b = BigUint::one();
for _ in 0..N {
let t = &a + &b;
a = std::mem::replace(&mut b, t);
}
let s = a.to_string();
println!("fib({N}) has {} digits", s.len());
println!("first 20: {}", &s[..20]);
println!("last 20: {}", &s[s.len() - 20..]);
}
Bu kod, Tov'un sunduğu sonuçlara göre çok daha yavaş çalışmalı. Ancak bizim testlerimizde, Rust 336.6 ms, Tov ise 451.3 ms olarak çıktı. Yani Rust, bu testte 1.34 kat daha hızlı çalıştı.
Sonuç: Tov'un sunmuş olduğu "farklılık", sadece yanlış bir test ortamında oluşmuş. Gerçekten daha hızlı olan, Rust'tan daha az kaynak tüketen ve daha hızlı çalışan şey, Rust'un optimize edilmiş sürümüdür.
2. dispatch ve map_insert: Başka Hatalı Testler
Tov'un sunmuş olduğu diğer testlerde de aynı mantık devam ediyor. dispatch ve map_insert gibi testlerde de Rust'ın performansını bilinçli olarak zayıflatan yapılar kullanılmış. Örneğin, bellek atamaları, veri yapısı seçimi veya işlem sıralaması gibi kritik unsurlar, Rust'tan daha yavaş çalışacak şekilde tasarlanmıştır.
Bu tür testlerde, Tov'un C'ye dönüştürdüğü kod, aslında Rust'ın optimize edilmiş sürümünü kıskanmak için bir "zayıf hedef" oluşturuyor.
Gerçek Sonuç: Rust, Tov'dan Daha Hızlı
Tov'un sunduğu tüm performans sonuçları, hatalı testlerle oluşturulmuş bir illüzyondur. Gerçek testlerde, Rust'ın performansı Tov'a göre eşit ya da üstüdür.
bigint_fib: Rust 336.6 ms, Tov 451.3 ms → Rust daha hızlıdispatchvemap_insert: Aynı mantıkla, Tov'un testlerinde Rust'ın performansı bilinçli olarak zayıflatılmış.
Sonuç: Testler Gerçeklikten Uzak
Bu tür "farklılık" iddialarını, yalan veya aldatıcı bilgi olarak değerlendirmek gerekiyor. Tov'un sunduğu testler, Rust'ın performansını bilinçli olarak azaltarak, kendi performansını daha iyi göstermeye çalışan bir stratejiye sahiptir.
Sadece "hız" açısından değil, geniş bir bağlamda düşünmek gerekir:
- Tov, Rust'tan daha hızlı mı?
- Hayır.
- Tov, Rust'ın performansını kötü testlerle çok daha iyi gösteriyor mu?
- Evet, ama bu, gerçek performans değil, hileli bir karşılaştırmadır.
Yorum: Teknolojiye İnanmak Değil, Sorgulamak Gerek
Teknoloji dünyasında, "farklılık" iddiaları her zaman çok ilgi çekicidir. Ancak bir dili, bir dilin performansını "bilinçli hatalarla" artırmak ile karşılaştırmak, şeffaf bir değerlendirme değil, bir kandırma yöntemidir.
Bir dilin gerçek potansiyelini anlamak için:
- Doğru testlerle
- Aynı ortamda
- Aynı hedefle
karşılaştırmak gerekir.
Tov’un sunmuş olduğu "farklılıklar", bu temel ilkeleri çiğnemektedir. Ve bu nedenle, "Rust'tan daha hızlı" iddiası, gerçeklikten çok uzaktır.