Ana içeriğe geç

Yan yana

DerleyicivsTranspiler

Derleyici (compiler) ile transpiler arasındaki fark nedir?

Güncellendi 2 dk okuma6 fark

Kısaca

Derleyici kodu makinenin ya da VM'in çalıştıracağı alt seviye bir biçime çevirir; transpiler ise başka bir üst seviye dile, örneğin TypeScript'i JavaScript'e.

Derleyici

Derleyici, bir programlama dilinde yazılmış kaynak kodu, bilgisayarın çalıştırabileceği makine kodu gibi daha alt seviyeli bir biçime çeviren programdır.

Derleyici sayfasını oku

Transpiler

Transpiler, kaynak kodu bir dilden ya da dil sürümünden benzer soyutlama düzeyindeki bir başkasına, örneğin TypeScript'ten JavaScript'e çeviren araçtır.

Transpiler sayfasını oku

Derleyici ve Transpiler karşılaştırması

ÖzellikDerleyiciTranspiler
ÇıktıDaha alt seviyeli kod: makine kodu ya da bytecodeBaşka bir üst seviye dilde kaynak kod
SeviyeDonanıma doğru aşağı inerAşağı yukarı aynı seviyede kalır
Okunabilir çıktıPek değil; makineler için yazılırEvet; genellikle okunabilir JavaScript ya da CSS
Asıl işiOptimize etmek ve çalışan bir program üretmekÖzellikleri diller ya da sürümler arasında eşlemek
Sonucu çalıştıranİşlemci ya da bir sanal makineTarayıcı ya da Node.js gibi başka bir çalışma ortamı
ÖrneklerGCC, Clang, rustc, javactsc, Babel, SWC, Sass

Fark, açıklamalı

İkisi de kaynak kodu okuyup çevrilmiş bir sürümünü yazar. Derleyici genellikle bir seviye aşağı iner: C ya da Rust bir işlemcinin makine koduna, Java da Java sanal makinesinin bytecode'una dönüşür. Kaynaktan kaynağa derleyici (source-to-source compiler) anlamına gelen transpiler ise yana doğru gider: çıktısı başka bir üst seviye dilde ya da aynı dilin başka bir sürümünde, insanların hâlâ okuyabileceği koddur.

Fark hedeftedir. Derleyici doğrudan çalışan bir şey üretir ve emeğinin büyük kısmını satır içine alma (inlining) ya da yazmaç atama (register allocation) gibi optimizasyonlara harcar. Transpiler başka bir aracın çalıştıracağı kaynak kodu üretir; bu yüzden özellikleri doğru eşlemeye odaklanır: TypeScript tiplerini kaybedip JavaScript'e dönüşür, Babel modern JavaScript'i eski tarayıcılar için yeniden yazar, Sass da kendi sözdizimini CSS'e çevirir.

Pratikte sınır bulanıktır; transpiler aslında bir tür derleyicidir. TypeScript aracının adı zaten TypeScript derleyicisi, tsc'dir; ilk C++ derleyicisi de dahil bazı derleyiciler C kodu üreterek çalışırdı. Gündelik işte önemli olan, transpile edilmiş kodun yine de tarayıcı ya da Node.js gibi bir çalışma ortamına ihtiyaç duyması ve hataların asıl dosyayı göstermesi için genellikle kaynak haritalarıyla (source map) birlikte gelmesidir.

Sık yapılan bir yanlış, transpile etmenin kodu hızlandırdığı ya da çalışırken denetlediği düşüncesidir. Transpiler kodun ne yaptığını değil, biçimini değiştirir: TypeScript'in tipleri çıktıdan silinir, transpile edilmiş JavaScript de JavaScript motorunun hızında çalışır.

Hangisini kullanmalısınız?

Derleyici şu durumlarda doğru seçim:

  • Doğrudan makinede ya da bir sanal makinede çalışan bir program istiyorsunuz.
  • Hız ve derleme anındaki optimizasyonlar önemli.
  • C, C++, Rust, Go ya da derlenen başka bir dille yazıyorsunuz.

Transpiler şu durumlarda doğru seçim:

  • Tarayıcılarda çalışması gereken TypeScript, JSX ya da modern JavaScript yazıyorsunuz.
  • Hedef platformunuzun desteklediğinden daha yeni dil özelliklerini kullanmak istiyorsunuz.
  • Sass gibi bir kaynak dili CSS gibi başka bir dile çeviriyorsunuz.

Sık sorulan sorular

TypeScript derlenir mi, transpile mi edilir?

İki ifade de kullanılır. tsc resmî olarak TypeScript derleyicisidir; ama çıktısı aynı seviyede JavaScript olduğu için ona transpiler demek de doğrudur.

Babel bir derleyici mi?

Babel kendini bir JavaScript derleyicisi olarak tanımlar. Yaptığı iş, modern JavaScript'i ve JSX'i eski tarayıcıların ve araçların anladığı sürümlere transpile etmektir.

Transpiler, yorumlayıcının yerini alır mı?

Hayır. Transpile edilmiş kodu yine de bir şeyin çalıştırması gerekir; örneğin tarayıcının JavaScript motoru, ki o da kodu yorumlayabilir ya da derleyebilir.

Daha fazla

Ayarlar