π ForgeZero v1.9.0 β Β«ΠΡΡ ΠΈΡΠ΅ΠΊΡΠΎΡΒ»: LSP-ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ, ΠΊΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½Π°Ρ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΡ
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ Π½Π° C ΠΈ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π²ΡΡΡΠ½ΡΡ Π³ΠΎΠ½ΡΠ΅ΡΠ΅ gcc ΠΈΠ»ΠΈ ΡΡΡΠ°Π΄Π°Π΅ΡΠ΅ Ρ Makefile β ΡΠ°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ForgeZero (fz). ΠΡΠΎ zero-config build tool Π΄Π»Ρ C, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
Π Π²Π΅ΡΡΠΈΠΈ 1.9.0 β ΡΠ΅ΡΡΡΠ΅ Π±ΠΎΠ»ΡΡΠΈΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ: ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° IDE ΡΠ΅ΡΠ΅Π· LSP, Π½Π°ΡΠΈΠ²Π½Π°Ρ ΠΊΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π±Π°Π³-ΡΠΈΠΊΡ ΠΈ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΡΠΎΡΡ ΠΏΠΎΠΊΡΡΡΠΈΡ ΡΠ΅ΡΡΠ°ΠΌΠΈ.
1. LSP ΠΈ IDE β ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Π½Π°ΠΊΠΎΠ½Π΅Ρ Π²ΠΈΠ΄ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ
ΠΠ΄ΠΈΠ½ ΡΠ»Π°Π³ fz -compile-commands Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ compile_commands.json β Compilation Database, ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΠ°ΡΡ Π²ΡΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ: clangd, ccls ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
Π§ΡΠΎ ΡΡΠΎ Π΄Π°ΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅: Neovim + clangd β ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΏΠΎΠΈΡΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΉ. VSCode + clang β ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π±Π΅Π· ΡΡΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. CLion, Helix, Emacs β Π»ΡΠ±ΠΎΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Ρ LSP-ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΏΠΎΠ΄Ρ Π²Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
ΠΠΎ ΡΡΠΎΠ³ΠΎ fz Π±ΡΠ» Π±ΡΡΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠΎΠ±ΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ. Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½Π°Ρ ΡΡΠ΅Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ β ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Π²ΠΈΠ΄ΠΈΡ Π²Π΅ΡΡ Π³ΡΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ°ΡΡ Π²ΡΠ°ΡΡ ΠΏΡΠΎ Β«Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ»Β».
2. ΠΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ β ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΠΎΠ΄ ARM Ρ x86-ΠΌΠ°ΡΠΈΠ½Ρ
ΠΠΎΠΌΠ°Π½Π΄Π° fz -target arm-linux-gnuebihf β ΠΈ Π²ΡΡ. fz ΡΠ°ΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡ Π½ΡΠΆΠ½ΡΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΈ Π»ΠΈΠ½ΠΊΠ΅ΡΡ, Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΡΡΠΈ ΠΊ ΡΡΠ»ΡΠ΅ΠΉΠ½Ρ Π²ΡΡΡΠ½ΡΡ. Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡ target triple, ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ fz Π±Π΅ΡΡΡ Π½Π° ΡΠ΅Π±Ρ.
Π Π°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ arm-linux-gnuebihf (ARMv7 hard-float: Raspberry Pi, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΎΠ΄Π½ΠΎΠΏΠ»Π°ΡΠ½ΠΈΠΊΠΎΠ²) ΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ GNU-ΡΡΠΈΠΏΠ»Π°. ΠΠ΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° β Π±ΠΈΠ½Π°ΡΡ Π΄Π»Ρ ARM Π³ΠΎΡΠΎΠ², Π½Π΅ Π²ΡΡΠ°Π²Π°Ρ Ρ x86-ΠΊΡΠ΅ΡΠ»Π°.
3. ΠΠ°Π΄ΡΠΆΠ½ΠΎΡΡΡ β ΡΠΊΡΡΠ½Π°Ρ ΡΠ°ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²Π°ΠΆΠ½Π°
ΠΠΎΠΊΡΡΡΠΈΠ΅ Π»ΠΈΠ½ΠΊΠ΅ΡΠ° Π²ΡΡΠΎΡΠ»ΠΎ Ρ 48% Π΄ΠΎ 60%+. ΠΠΈΠ½ΠΊΠ΅Ρ β ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ°ΠΌΡΡ ΡΡΠΌΠ½ΡΡ ΠΌΠ΅ΡΡ Π² Π»ΡΠ±ΠΎΠΌ build tool. ΠΠΎΠΊΡΡΠ»ΠΈ ΡΠ°ΠΌΡΠ΅ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ: ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΠΈ Π»ΠΎΠ²ΡΡΡΡ ΡΠ΅ΡΡΠ°ΠΌΠΈ, Π° Π½Π΅ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡ Π² CI Π² 3 Π½ΠΎΡΠΈ.
ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π±Π°Π³: ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΈΠΌΡΠ½ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². Π ΠΌΡΠ»ΡΡΠΈ-ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΡΠ°ΠΉΠ»Ρ ΠΈΠ· ΡΠ°Π·Π½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΈΠΊΠ° β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, _.o. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ: ΡΠΈΡ ΠΎΠ΅ Π·Π°ΡΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΡΡΠ³ΠΈΠΌ, ΠΈ ΡΠ±ΠΎΡΠΊΠ° Π»ΠΈΠ±ΠΎ ΠΏΠ°Π΄Π°Π΅Ρ, Π»ΠΈΠ±ΠΎ β ΡΡΠΎ Ρ ΡΠΆΠ΅ β ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π½ΠΎ ΠΌΠΎΠ»ΡΠ°.
ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅: ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ ΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΡ. ΠΡΠ»ΠΎ: src/utils/log.c β _.o. Π‘ΡΠ°Π»ΠΎ: src/utils/log.c β src_utils_log.o. ΠΡΠ»ΡΡΠΈ-ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ Π±Π΅Π· ΡΡΡΠΏΡΠΈΠ·ΠΎΠ².
4. UX ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°
Π£ΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ ΠΎΡΠΊΠ°ΡΠΎΠΌ. Π Π°Π½ΡΡΠ΅ fz -update ΠΏΡΠΎΡΡΠΎ ΡΠΊΠ°ΡΠΈΠ²Π°Π»Π° Π½ΠΎΠ²ΡΠΉ Π±ΠΈΠ½Π°ΡΡ ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ»Π° ΡΡΠ°ΡΡΠΉ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΡΡΠ°ΡΠ°Ρ Π²Π΅ΡΡΠΈΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² /usr/local/bin/fz.old. ΠΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ β ΠΎΡΠΊΠ°Ρ Π² ΠΎΠ΄Π½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅.
Π’Π΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°. fz ΡΠΌΠ΅Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ. Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠΎ ΠΏΠΎΠΊΡΡΡΠΎ ΡΠ΅ΡΡΠ°ΠΌΠΈ: ΠΏΠ°ΡΡΠΈΠ½Π³ ΠΊΠΎΠΌΠ°Π½Π΄ (SplitCommand), ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (CmdSet), Π·Π°ΠΏΡΡΠΊ ΡΠ±ΠΎΡΠΊΠΈ ΠΈΠ· ΡΠ΅Π»Π»Π° (CmdBuild). ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π΄Π΅ΡΠΆΠΈΡΡΡ Π½Π° ΡΠ΅ΡΡΠ½ΠΎΠΌ ΡΠ»ΠΎΠ²Π΅.
5. Π‘ΡΡΠΎΠ³ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΡ ΠΊΠΎΠ΄Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
ΠΠΎ Π²ΡΠ΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ JSON-ΠΊΠΎΠ½ΡΠΈΠ³Π°Ρ fz ΡΠ΅ΠΏΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΠ»Π°Π³ΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: -Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion.
ΠΡΠΎ Π½Π΅ ΠΏΡΠΈΡ ΠΎΡΡ. ΠΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π±Π΅Π· ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Ρ ΡΡΠΈΠΌΠΈ ΡΠ»Π°Π³Π°ΠΌΠΈ β Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΡΡΡΠΉ ΠΊΠΎΠ΄. fz Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠΈΡΠ°ΡΡ Π»ΡΡΡΠ΅. ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ β ΡΡΠΎ Π½Π΅ ΠΏΠ°ΡΠ°Π½ΠΎΠΉΡ, ΡΡΠΎ Π³ΠΈΠ³ΠΈΠ΅Π½Π°.
ΠΡΠΎΠ³ΠΎ: ΡΡΠΎ Π²ΠΎΡΠ»ΠΎ Π² v1.9.0
-compile-commands β Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ compile_commands.json Π΄Π»Ρ LSP/IDE ΠΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ β -target Ρ Π°Π²ΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ»ΡΠ΅ΠΉΠ½Π° Π€ΠΈΠΊΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΈΠΊΠΎΠ² β ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ .o-ΡΠ°ΠΉΠ»Ρ, ΠΌΡΠ»ΡΡΠΈ-ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΠΎΠΊΡΡΡΠΈΠ΅ Π»ΠΈΠ½ΠΊΠ΅ΡΠ° β 48% β 60%+ Π£ΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ β fz -update Π±ΡΠΊΠ°ΠΏΠΈΡ ΡΡΠ°ΡΡΠΉ Π±ΠΈΠ½Π°ΡΡ Π² fz.old Π’Π΅ΡΡΡ ΡΠ΅Π»Π»-ΡΠ΅ΠΆΠΈΠΌΠ° β SplitCommand, CmdSet, CmdBuild ΠΏΠΎΠΊΡΡΡΡ ΡΠ΅ΡΡΠ°ΠΌΠΈ Π€Π»Π°Π³ΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ β -Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ Β«ΠΡΡ ΠΈΡΠ΅ΠΊΡΠΎΡΒ» Π²ΡΠ±ΡΠ°Π½ΠΎ Π½Π΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ. v1.9.0 Π·Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ fz Π² ΡΠ΅ΡΡΡΠ·Π½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ β ΠΎΡ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π΄ΠΎ ΠΌΡΠ»ΡΡΠΈ-ΡΠ°ΡΠ³Π΅ΡΠ½ΡΡ embedded-ΡΠΈΡΡΠ΅ΠΌ.
ΠΠΎΠΏΡΠΎΡΡ, Π±Π°Π³ΠΈ, ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡ β ΠΏΠΈΡΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ .
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ - https://github.com/forgezero-cli/forgezero