· kaynak dev.to (home feed)
Vercel'in ScriptC'si TypeScript'i Node.js olmadan bağımsız native binary'lere derliyor
Vercel Labs, TypeScript'i bağımsız native çalıştırılabilir dosyalara ayrıca C, LLVM IR ve WebAssembly'ye çeviren deneysel bir derleyici olan ScriptC'yi açık kaynak yaptı; böylece bir JavaScript runtime'ı taşımaya gerek kalmıyor.

Vercel Labs, TypeScript ve JavaScript'i bağımsız native çalıştırılabilir dosyalara çeviren deneysel bir derleyici olan ScriptC'yi açık kaynak yaptı. Projeyi tanıtan dev.to makalesine göre araç, ayrıca tipli bir ara temsil (intermediate representation), okunabilir C, LLVM IR ve WebAssembly üretebiliyor; depo GitHub'da Apache-2.0 lisansıyla yer alıyor.
ScriptC'nin hedeflediği sorun
TypeScript web ön yüzlerine, backend servislerine ve CLI araçlarına yayıldı ama hâlâ bir JavaScript runtime'ı üzerinde çalışıyor. Günümüzde bir TypeScript CLI'sini veya mikro servisi dağıtmak, kodun yanına Node.js, Deno veya Bun paketlemek demek. dev.to makalesi bunu üç yinelenen maliyet olarak çerçeveliyor: JIT motorları, kullanıcı kodu çalışmadan önce başlamak için onlarca milisaniyeye ihtiyaç duyuyor; tek dosyalık bundler'lar V8 ve Node runtime'ını içerdikleri için düzenli olarak 40–90 MB aralığında çalıştırılabilir dosyalar üretiyor; ve küçük yardımcı araçlar veya serverless fonksiyonlar, tek bir satır iş mantığı çalışmadan önce onlarca megabayt taban bellek harcıyor. ScriptC, TypeScript'i öndeden derlenebilen bir dil olarak ele alıp bu maliyetleri tamamen aşmayı hedefleyen bir girişim.
Resmî derleyici üzerine kurulu çok aşamalı bir boru hattı
ScriptC yeni bir dil icat etmiyor. Ayrıştırma ve tip kontrolü için resmî TypeScript derleyicisini yeniden kullanıyor, ardından ortaya çıkan ağacı giderek daha düşük seviyeli katmanlara indirgiyor. Kaynak kod önce tipli bir JSON ara temsiline dönüştürülüyor; bu da okunabilir C, metinsel LLVM IR veya WASI Preview 1'i hedefleyen WebAssembly'ye çevrilebiliyor. C ve LLVM yolları, son çalıştırılabilir dosyaya bağlanmadan önce native assembly ve object dosyalarına kadar iniyor.
Her aşama --emit bayraklarıyla — ir, c, llvm, asm ve obj — incelenebiliyor; makaleye göre bu, indirgeme sürecini bir kara kutu olmaktan çıkarıp şeffaf kılıyor.
Node API'leri sistem çağrılarına eşleniyor
Saf hesaplamanın ötesinde ScriptC, standart Node.js API'lerini native olarak uyguluyor. node:http ile yazılmış ve scriptc build ile derlenmiş bir HTTP sunucusu, olay döngüsünü V8 üzerinden yönlendirmek yerine doğrudan native socket primitive'lerine bağlıyor. Tamamen statik bir build'de binary, yalnızca bellek yönetimi ve temel primitive'ler için minimal bir runtime paketi bağlar — Node.js yok, V8 yok, JIT yok. Makale, böyle binary'lerin mikrosaniyeler içinde başladığını ve ihmal edilebilir bellek kullandığını iddia ediyor; ancak bu rakamlar bağımsız benchmark'lar değil, projenin kendi konumlandırması.
Tanılama ve dinamik bir geri dönüş yolu
TypeScript kod tabanları çoğu zaman dinamik desenlere dayandığından, her şey öndeden statik olarak derlenemiyor. ScriptC bir kapsama aracıyla geliyor: scriptc coverage app.ts çalıştırmak, AST'nin yüzde kaçının statik olarak derlendiğini raporluyor ve reflection gerektirecek dinamik noktalar için tanılama kodları üretiyor.
İndirilemeyen kod için — üçüncü taraf npm paketleri veya any-ağır kod tabanları dahil — --dynamic bayrağı, ultra hafif bir JavaScript motoru olan QuickJS-NG'yi doğrudan çalıştırılabilir dosyanın içine gömüyor. Bu, tam bir Node runtime'ını içeri çekmeden mevcut ekosistemle uyumluluğu koruyor.
Cross-compile hedefi olarak WebAssembly
Zig'i bir cross-target linker sürücüsü olarak kullanarak ve SCRIPTC_CC=zigcc ile yapılandırarak ScriptC, TypeScript'i wasm32-wasi modüllerine cross-compile edebiliyor. Bu çıktılar herhangi bir WASI destekli runtime'da veya edge worker'da çalışabiliyor ve aynı kaynak koda iki dağıtım yolu sunuyor: doğrudan metal üzerinde native binary'ler ve taşınabilir wasm.
Denemek için
Derleyici sürücüsünün kendisi Node.js 24 veya daha yenisini gerektiriyor ve npm install -g scriptc ile global olarak kuruluyor. Temel bir iş akışı tek bir komut: scriptc build hello.ts -o hello, Node.js kurulu olmayan uyumlu makinelerde çalışan bir çalıştırılabilir dosya üretiyor. Genç her araştırma projesinde olduğu gibi kaba kenarlar bekleyin.
Neden önemli
ScriptC açıkça deneysel bir araştırma çabası olarak konumlandırılıyor ve tek bir dev.to yazısı yetenekleri hakkında mevcut tek kaynak — binary boyutu, başlama süresi ve bellek rakamları kesinleşmiş sonuçlar değil, doğrulanması gereken iddialar olarak okunmalı. Yine de yön önemli. TypeScript'i JavaScript runtime'ından ayırmak, CLI'ların, mikro servislerin ve edge fonksiyonlarının nasıl inşa edilip dağıtıldığını yeniden şekillendirirdi: daha küçük artefaktlar, daha hızlı cold start'lar ve daha düşük bellek tabanları. Kapsama araçları ve QuickJS geri dönüşü, sıfırdan projeler talep etmek yerine mevcut kodu taşımanın gerçekçi bir yolunu da gösteriyor. Yaklaşım olgunlaşırsa, TypeScript yorumlanması gereken bir katman olmaktan çıkıp kendi başına bir sistem dili haline geliyor.
- #typescript
- #compilers
- #vercel
- #webassembly
- #native-binaries