π§ Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ 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βΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ , ΡΠΊΡΠΏΠ»ΠΎΠΉΡΠ°Ρ ΠΈ ΡΠ°Π½ΡΠ°ΠΉΠΌβΡΡΠ΅Π΄Π°Ρ .