ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ForgeZero 1.9.0 (fz) β ΠΊΠΎΠ½ΡΠΎΠ»Π΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π½Π° C, C++ ΠΈ assembler (NASM, GAS, FASM). ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Makefile ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° ΠΎΡΠ½ΠΎΠ²Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Go ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ MIT Π»ΠΈΡΠ΅Π½Π·.
ForgeZero ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠΈΠΏΠ° Π½Π° ΡΠ°ΠΉΠ»Π° ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΈΠ·Π±ΠΈΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ Π±Π΅ΠΊΠ΅Π½Π΄. ΠΡΠ΅ΠΊΠΈ ΡΠ°ΠΉΠ» Ρ ΠΊΠΎΠ΄ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° Π² ΠΎΠ±Π΅ΠΊΡΠ΅Π½ ΡΠ°ΠΉΠ», ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ Π΄ΡΠ±Π»ΠΈΡΠ°ΡΠΈ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΠΈ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π»ΠΈΠ½ΠΊΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π΅Π΄ΠΈΠ½Π΅Π½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ». Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ°Ρ ΠΈ ΡΠ΅ ΠΏΡΠ΅ΠΏΡΠ°Π²ΡΡ ΡΠ°ΠΌΠΎ ΡΠ»Π΅Π΄ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΠ²ΡΡΠ·Π°Π½ΠΈΡΠ΅ Ρ ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΊΠΎΠ΄. ΠΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΎ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ ΠΏΡΠ΅ΠΏΡΠ°Π²ΡΠ½Π΅ ΡΠ»Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Ρ ΠΊΠΎΠ΄.
ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ GCC, Clang, G++, Clang++; Π°ΡΠ΅ΠΌΠ±Π»Π΅ΡΠΈ NASM, GAS, FASM; Π»ΠΈΠ½ΠΊΠ΅ΡΠΈ LD, GCC, Clang; Π°ΡΡ ΠΈΠ²Π°ΡΠΎΡΠΈ AR. ΠΠ°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ Π·Π° C ΠΈ C++: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ ΡΠ°Π½ΠΈΡΠ°ΠΉΠ·Π΅ΡΠΈ AddressSanitizer ΠΈ UndefinedBehaviorSanitizer (Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Ρ ΡΠ΅ Ρ ΡΠ»Π°Π³Π° -sanitize=false). ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ Linux, macOS, Windows (WSL2 ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ Π½Π°ΡΠΈΠ²Π½ΠΎ).
ΠΡΠ½ΠΎΠ²Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² Π²Π΅ΡΡΠΈΡ 1.9.0:
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΡΠ»Π°Π³ΡΡ "-target" , ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΊΡΠΎΡ-ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ΅Π½ ΠΏΡΠ΅ΡΠΈΠΊΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌ. fz ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°, Π»ΠΈΠ½ΠΊΠ΅ΡΠ° ΠΈ Π°ΡΡ ΠΈΠ²Π°ΡΠΎΡΠ° ΠΏΠΎ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, "arm-linux-gnueabihf-gcc"). ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΡΠ΅Π»Π΅Π²ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ Π½Π° GNU, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ arm-linux-gnueabihf, aarch64-linux-gnu ΠΈ riscv64-linux-gnu.
- Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° LSP (Language Server Protocol). Π€Π»Π°Π³ΡΡ "-compile-commands" Π³Π΅Π½Π΅ΡΠΈΡΠ° ΡΠ°ΠΉΠ»Π° compile_commands.json (Compilation Database) Π² ΠΊΠΎΡΠ΅Π½Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π€Π°ΠΉΠ»ΡΡ ΡΠ΅ ΡΠ΅ΡΠ΅ ΠΎΡ Π΅Π·ΠΈΠΊΠΎΠ²ΠΈΡΠ΅ ΡΡΡΠ²ΡΡΠΈ clangd ΠΈ ccls, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΉΠΊΠΈ Π°Π²ΡΠΎΠ΄ΠΎΠΏΡΠ»Π²Π°Π½Π΅, Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΏΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΈ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° LSP (Neovim, VSCode, CLion, Emacs ΠΈ Π΄Ρ.).
- ΠΠΎΠΌΠ°Π½Π΄Π°ΡΠ° fz "-update" ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ ΡΠ΅Π³Π° Π·Π°ΠΏΠ°Π·Π²Π° ΡΠ΅ΠΊΡΡΠΈΡ Π±ΠΈΠ½Π°ΡΠ΅Π½ ΡΠ°ΠΉΠ» Π² /usr/local/bin/fz.old, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π±Π΅Π· ΠΏΡΠ΅ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ.
- ΠΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°ΠΉΠ»Ρ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² Π² ΠΌΡΠ»ΡΡΠΈΠ΄ΠΈΡΠ΅ΠΊΡΠΎΡΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°Π»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°, ΡΡΡΡΠ°Π½Π΅Π½Π°. ΠΠΌΠ΅Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΡΠΌΠΈΡΡΡΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ ΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ Β«fz -shellΒ» Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ².
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄ SplitCommand, CmdSet ΠΈ CmdBuild. ΠΠΎΠΊΡΡΡΠΈΠ΅ ΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΠ° ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΎ Ρ 17% Π΄ΠΎ 60%, Π° ΠΏΠΎΠΊΡΡΡΠΈΠ΅ Π²ΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΏΡΠ΅Π²ΡΡΠΈΠ»ΠΎ 40%.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ CheckTool Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² Ρ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΡΡΠ»ΡΠ΅ΠΉΠ½Π°.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π²ΡΠΏΡΡΠΊΠΎΠ²:
- Π Π²Π΅ΡΡΠΈΠΈ 1.8.0 ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠ±ΠΎΡΠΊΠ° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (-type static / -lib), ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½Π° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ ΠΈΠΌΡΠ½ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΌΡΠ»ΡΡΠΈΠ΄ΠΈΡΠ΅ΠΊΡΠΎΡΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ , ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΎΠ±Ρ ΠΎΠ΄ΠΎΠΌ ΠΏΡΡΠΈ Β«..Β».
- Π Π²Π΅ΡΡΠΈΠΈ 1.7.0 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ (-j N, 0 β Π°Π²ΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΡΠ»Π° ΡΠ΄Π΅Ρ), ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π»ΠΈΠ½ΠΊΠ΅Ρ-ΡΠΊΡΠΈΠΏΡΠΎΠ² (-T) ΠΈ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π° (-Ttext), ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ (fz -shell), ΡΠ²Π½ΡΠΉ Π²ΡΠ±ΠΎΡ ΡΠΎΡΠΌΠ°ΡΠ° Π²ΡΠ²ΠΎΠ΄Π° (elf32, elf64, bin), ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² C++ (.cpp, .cc, .cxx) Ρ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΡΡΡΠΎΠ³ΠΈΠΌΠΈ ΡΠ»Π°Π³Π°ΠΌΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΡΡΠΎ ΠΈ Π΄Π»Ρ C.
- Π Π²Π΅ΡΡΠΈΠΈ 1.6.0 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° (fz -init, ΡΠΎΠ·Π΄Π°ΡΡ .fz.yaml, .fzignore, README.md), ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎΡΠΌΠ°ΡΠ° bin (-format bin) Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠ² ΠΈ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΊ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΏΠΎΠ»Ρ libs, flags.cc, flags.asm, flags.ld.
- Π Π²Π΅ΡΡΠΈΠΈ 1.5.0 ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² (source_dirs), ΡΠ²Π½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² (source_files), ΡΠ°Π±Π»ΠΎΠ½Ρ include/exclude, ΠΏΠΎΠ»Π΅ libs Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΠ°, ΡΠ°ΠΉΠ» .fzignore, ΠΌΠ½ΠΎΠ³ΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ΅ ΡΠ»ΠΈΡΠ½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
