ИзданиС ForgeZero 1.9.0, инструмСнт Π·Π° компилация Π·Π° C ΠΈ асСмблСр

ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ 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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster