HolyJit: Yeni Bir Umut !

Bir Jit yazmanın daha güvenli ve kolay bir yol olduğuna inanıyoruz.
Bugün, tüm tarayıcıların Jitlerinde benzer bir tasarım paylaşılıyor. Bu tasarım, özellikle güvenlik sorunlarından kaçınırken, dilin uzatılmasını veya performansını artırarak zaman alıcı ve karmaşık hale getirir.

Örneğin, bu yazı hazırlanırken, Jit, ~ 15000 satırlık dikkatle hazırlanmış, elle yazılmış montaj koduna (Chromium’un v8’de ~ 36000) dayanıyor. Jit dizini, Firefox’un tüm C ++ kodunun% 5’ini temsil eder ve elle yazılmış en büyük 20 Firefox dosyasından 3’ünü içerir.

İlginçtir ki, bu dosyaların tümü, Tercüman’dan elle türetilen ve JavaScript motorunun yerleşik işlevlerinin sınırlı bir setini içerir. Ama süreci otomatikleştirip zaman ve riski azalttığımızda neden elle yapıyorsun? HolyJit bu olasılığı araştırıyor.

HolyJit’i tanıtmak (prototip)
Bu hafta, JS Ekibi buluşması sırasında, HolyJit adında bir Rust meta-Jit derleyicisinin ilk prototipini kanıtladık. Denememiz başarıyla sonuçlanırsa, HolyJit tabanlı bir stratejinin kullanılmasının birçok potansiyel böcekten kaçınmamıza ve stratejik konularda yoğunlaşmamıza izin verileceğine inanıyoruz. Bu, JavaScript özelliklerini hızlı bir şekilde uygulamak ve Jit hızımızı daha da artırmak için daha fazla zaman demektir.

HolyJit
HolyJit

Örneğin, yakın zamanda yapılan bir değişiklikle optimizasyon desteğini Array.prototype.push’a genişlettik. Güvenlik açısından kritik olan koda dalmak ve 135 satırlık kod eklemek ve yanlışlıkla değişmeyenleri kırmadığımızı kontrol etmek için daha fazla kod okumak için önemsiz bir değişiklik yapılması gerekiyordu.

HolyJit ile, önemsiz bir değişiklik olması için gereken şey, aslında önemsiz bir değişiklik olabilirdi. HolyJit ile kurulmuş varsayımsal bir JS Jit için aşağıdaki değişiklik , önceki yama ile tamamen aynı şeyi yapar , yani Jit’in Array.prototype.push işlevini birden fazla bağımsız değişkenle çağırıldığında satır içine sokmasına izin verir.

 fn array_push (args: & CallArgs) -> Sonuç <JSValue, Error> {
- jit_inline_if! (args.len () == 1);
+ jit_inline_if! (args.len ()> = 1);
     ...
 }

Değişiklikleri kendine yeten ve basitleştirerek, HolyJit’in Jit motorumuzun güvenliğini artıracağını ve optimizasyonlara odaklanmamızı umuyoruz.

HolyJit Deposu: https://github.com/nbp/holyjit

Yorum yapın