🧠 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ TinyCC

TinyCC (TCC) β€” это свСрхбыстрый, минималистичный C‑компилятор, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ѐабрисом Π‘Π΅Π»Π»Π°Ρ€ΠΎΠΌ. Основная Ρ†Π΅Π»ΡŒ β€” компиляция C-ΠΊΠΎΠ΄Π° Π½Π° Π»Π΅Ρ‚Ρƒ, Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ. TCC Π½Π΅ стрСмится ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с GCC ΠΈΠ»ΠΈ Clang ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ прямо Π² прилоТСния.

Π Π°Π·ΠΌΠ΅Ρ€ исходников TCC β€” мСньшС ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π°, Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ β€” порядка 200–300β€―ΠšΠ‘. Он ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ любой ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ C‑код ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ JIT‑рСТим ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ встроСн Π² interpreter ΠΈΠ»ΠΈ VM.

βš™οΈ ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ

  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° стандартов C89 ΠΈ частично C99
  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ELF‑бинарников ΠΈ static linking
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° x86, x86_64, ARM, RISCV
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ выполнСния скомпилированного ΠΊΠΎΠ΄Π° сразу ΠΈΠ· памяти (tcc -run)
  • ВстраиваСмый API: ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ JIT-компилятор Π² своём ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅
  • ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ зависимостСй: Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Β«ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈΒ»

βœ… ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

  • Быстрая компиляция: ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для скриптов, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², мСта‑инструмСнтов
  • НСбольшой Ρ€Π°Π·ΠΌΠ΅Ρ€: Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ, ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² embed‑срСдах
  • ΠŸΡ€ΠΎΡΡ‚Π°Ρ сборка самого сСбя: ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для self‑hosting
  • Π£Π΄ΠΎΠ±Π΅Π½ Π² ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈ тСстировании low-level‑концСпций
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ inline‑компиляции Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°Ρ…, REPL ΠΈ sandbox‑окруТСниях

❌ НСдостатки

  • ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ слоТных ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ
  • НС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС Ρ„ΠΈΡ‡ΠΈ C99/C11
  • НС годится для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½-сборки слоТных систСм
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Π°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с соврСмСнными Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ

βš™οΈ Π“Π΄Π΅ примСняСтся

  • Π‘Π±ΠΎΡ€ΠΊΠ° одностраничных Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΎΠ² ΠΈ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠ²
  • OSDev ΠΈ экспСримСнты с userspace
  • ΠžΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ срСды, Π³Π΄Π΅ Π²Π°ΠΆΠ½Π° простота ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ
  • Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ компиляторы Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, JIT для DSL)

πŸ”— Π’Ρ‹Π²ΠΎΠ΄

TinyCC β€” ΠΈΠ΄Π΅Π°Π»Π΅Π½ для ситуаций, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ΅Π½ C, Π½ΠΎ Π½Π΅Ρ‚ мСста для GCC ΠΈΠ»ΠΈ Clang. Он Π½Π΅ замСняСт «большиС» компиляторы, Π½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ арсСнал систСмного Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. TCC β€” это ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΠ·ΠΌ, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ, вострСбованныС Π² тСстах, embed‑устройствах, эксплойтах ΠΈ рантайм‑срСдах.