Source-to-Source Compiler — bir dasturlash tilidagi source kodni shu tilning boshqa ko‘rinishiga yoki boshqa yuqori darajali til source’iga aylantiradigan compiler. Transpiler atamasi ham keng qo‘llanadi.
Tarjima pipeline’i
Pipeline parser orqali AST quradi, semantic ma’lumotni bog‘laydi, transformatsiya qiladi va target til kodi generatorini ishga tushiradi. Oddiy matn almashtirish scope, precedence va comment kabi kontekstlarni ishonchli saqlamaydi.
Amaliy misollar
TypeScriptdan JavaScriptga tushirish type annotationlarni olib tashlaydi va yangi syntaxni eski runtime qo‘llaydigan konstruktsiyaga aylantirishi mumkin. High-level parallel til C yoki GPU kernel source’iga tarjima qilinishi ham source-to-source compilationdir.
Source map
Source map hosil qilingan kod pozitsiyasini original fayl va satrga bog‘laydi. Debugger, stack trace va coverage shu xaritaga tayanadi. Transformatsiya bir original expression uchun ko‘p target statement yaratsa mapping segmentlari aniq yuritiladi.
Semantik farqlar
Target til semantikasi source til bilan to‘liq teng bo‘lmasligi mumkin. Integer overflow, evaluation order, exception, async va module tizimi farqlari runtime helper yoki cheklov talab qiladi. Unsupported feature aniq compile xatosi beradi.
Codemodlar
Formatterga o‘xshash codemod ayni til ichida API migration qiladi. Lossless syntax tree comment va whitespace’ni saqlashga yordam beradi. Idempotence talab qilingan transformatsiyada ikkinchi ishga tushirish kodni yana o‘zgartirmasligi kerak.
Testlash
Testlar original va generated dastur observable natijasini solishtiradi, source map stackini tekshiradi va target formatter/parser round-tripini bajaradi. Golden file test faqat matnni emas, semantik holatlarni ham qamrab oladi.
Transpiler generated faylga generator versiyasi va source hashni yozishi mumkin, biroq deterministik outputni buzadigan vaqt tamg‘asidan qochadi. Source map va generated code bir release atomik artefakt sifatida tarqatiladi.
+## Amaliy boshqaruv
Source-to-Source Compiler bilan ishlaydigan vosita kirishni faqat sintaktik jihatdan qabul qilmaydi. U operator precedence, helper code va identifier scope bo‘yicha boundary, ownership va version shartlarini tekshiradi. Xato topilganda umumiy muvaffaqiyatsizlik o‘rniga qaysi komponent, qaysi qiymat va qaysi qoida mos kelmagani ko‘rsatiladi. Bunday diagnostika build logini qisqartiradi va muammoni source, toolchain yoki deployment qatlamiga to‘g‘ri ajratadi.
Muhim xato sinfi — target til semantikasi yoki mappingni yo‘qotish. Bunday holatda vosita optimistik taxmin bilan davom etmaydi: zarur bo‘lsa sekinroq, lekin xavfsiz yo‘l tanlanadi yoki aniq diagnostika bilan jarayon to‘xtatiladi. Xatoni qayta ishlab bo‘ladigan qilish uchun target, optionlar, kirish identifikatori va tegishli metadata qayd etiladi. Foydalanuvchi ma’lumoti xom shaklda loglanmaydi; hash, build-id yoki cheklangan kontekst yetarli bo‘lgan joyda shular ishlatiladi.
Sifat nazorati differential execution va source-map stack testi orqali bajariladi. Testlar normal misol bilan cheklanmay, bo‘sh kirish, minimal va maksimal o‘lcham, mos kelmaydigan versiya, yo‘qolgan komponent hamda parallel holatlarni qamraydi. Natijaning to‘g‘riligi performance o‘lchovidan alohida baholanadi. Keyin vaqt, xotira, artefakt hajmi yoki runtime kechikishi kabi mavzuga mos metrikalar baseline bilan solishtiriladi. Regressiya topilsa, minimal takrorlanuvchi holat saqlanib, keyingi release uchun doimiy testga aylantiriladi.
Target printer versiyasi generated source talab qiladigan minimal til versiyasini metadata’da ko‘rsatadi. Consumer eski targetni tanlasa unsupported syntax chiqarmasdan transform yoki aniq error beradi; helper library versiyasi ham generated kod bilan birga pin qilinadi.
Bog‘liq tushunchalar
transpiler, AST transformation, source map, code generation, codemod, semantic equivalence