Выпуск ForgeZero 1.9.0, инструмСнта сборки для C ΠΈ ассСмблСра

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Ρ€Π΅Π»ΠΈΠ· ForgeZero 1.9.0 (fz), консольного инструмСнта сборки для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° языках C, C++ ΠΈ ассСмблСрС (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Β» <triple>, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ кросс-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ прСфиксного инструмСнтария. 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

ΠšΡƒΠΏΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ хостинг для сайтов с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS, VPS VDS сСрвСры πŸ”₯ ΠšΡƒΠΏΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ хостинг для сайтов с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS, VPS VDS сСрвСры | ProHoster