π§ Π§ΡΠΎ Π·Π½Π°ΡΠΈΡ Β«Π»ΡΡΡΠΈΠΉΒ» ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ C
ΠΡΠ±ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ΅Π»Π΅ΠΉ: ΠΊΡΠΎΡΡβΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΡ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ, ΡΠ±ΠΎΡΠΊΠ° ΠΏΠΎΠ΄ Bare Metal ΠΈΠ»ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° C β Π΅ΡΡΡ Π½Π°Π±ΠΎΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ Π·Π°Π΄Π°Ρ.
βοΈ ΠΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ
GCC (GNU Compiler Collection)
ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ, ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ, Ρ ΡΠΈΡΠΎΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ² C89βC23 ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ (x86, ARM, MIPS, RISC-V). ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΡ, Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠ±ΠΎΡΠΊΡ ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½βΡΠΈΡΡΠ΅ΠΌΡ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Linux Kernel, GNU libc, Buildroot
- Π§Π°ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠΌ Π² Unix-ΡΡΠ΅Π΄Π°Ρ
Clang
Π€ΡΠΎΠ½ΡΠ΅Π½Π΄ LLVM: Π±ΡΡΡΡΡΠΉ, ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΉ, Ρ ΡΡΡΠΊΠΈΠΌΠΈ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ Π»ΡΡΡΠ΅ΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ Ρ IDE (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ΄ macOS). ΠΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΊΠΎΠ΄Π°, ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Xcode, Android NDK
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΡ Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ C23
TinyCC (TCC)
Π‘Π²Π΅ΡΡ Π±ΡΡΡΡΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π±ΠΈΠ½Π°ΡΡ. ΠΡΠ»ΠΈΡΠ΅Π½ Π΄Π»Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΡΠ΅Π΄, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ Π½Π° Π»Π΅ΡΡ, JIT-ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π². ΠΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ ΡΠΈΡΠΈ C99/C11, Π½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, ΡΠ΅ΡΡΠΎΠ², ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΈ embedded.
SDCC
ΠΠΈΡΠ΅Π²ΠΎΠΉ, Π½ΠΎ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡΠΉ Π² ΠΌΠΈΡΠ΅ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² β ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ 8051, Z80, STM8 ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ°ΡΡΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. ΠΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ embeddedβΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π³Π΄Π΅ Π²Π°ΠΆΠ΅Π½ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌ RAM/ROM.
β ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° GCC
- ΠΡΠΎΠ²Π΅ΡΠ΅Π½Π½Π°Ρ Π±Π°Π·Π°
- ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ»Π°Π³ΠΎΠ² ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ (
-O0
β¦-Ofast
) - ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° OpenMP, LTO, Sanitizers
β ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Clang
- ΠΡΡΡΡΠ°Ρ ΡΠ±ΠΎΡΠΊΠ°
- Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Static Analysis ΠΈ Clang-Tidy
β ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° TCC
- ΠΠ³Π½ΠΎΠ²Π΅Π½Π½Π°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ
- ΠΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ JIT ΠΈΠ»ΠΈ embed
- ΠΡΠΎΡΡΠ°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ
β ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ
- GCC ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Β«ΡΡΠΆΡΠ»ΡΠΌΒ» Π΄Π»Ρ ΠΌΠΈΠ½ΠΈβΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²
- Clang Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° embeddedβΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ
- TCC Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π°
- SDCC ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°Ρ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ°Ρ ΡΠ·ΡΠΊΠ°
π ΠΡΠ²ΠΎΠ΄
ΠΠ»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ΄ΡΠ° β GCC.
ΠΠ»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΠ΄ Π΄Π΅ΡΠΊΡΠΎΠΏ/ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° β Clang.
ΠΠ»Ρ embed ΠΈ ΠΌΠΈΠ½ΠΈ-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² β TinyCC ΠΈΠ»ΠΈ SDCC.
ΠΠ΄Π΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π½Π΅Ρ β Π²ΡΠ±ΠΈΡΠ°ΠΉ ΠΏΠΎΠ΄ Π·Π°Π΄Π°ΡΡ.