ИзданиС 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” , ΠΊΠΎΠΉΡ‚ΠΎ позволява крос-компилация Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ прСфиксСн инструмСнтариум. 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) Π² ΠΊΠΎΡ€Π΅Π½Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π€Π°ΠΉΠ»ΡŠΡ‚ сС Ρ‡Π΅Ρ‚Π΅ ΠΎΡ‚ Π΅Π·ΠΈΠΊΠΎΠ²ΠΈΡ‚Π΅ инструмСнти. ΡΡŠΡ€Π²ΡŠΡ€ΠΈ ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° fz «-update» ΠΏΡ€Π΅Π΄ΠΈ инсталиранС Π½Π° Π½ΠΎΠ²Π° вСрсия сСга Π·Π°ΠΏΠ°Π·Π²Π° тСкущия Π±ΠΈΠ½Π°Ρ€Π΅Π½ Ρ„Π°ΠΉΠ» Π² /usr/local/bin/fz.old, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява Π΄Π° сС Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ към ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° вСрсия Π±Π΅Π· прСинсталиранС.
  • ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° 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), шаблони Π·Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅/ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, ΠΏΠΎΠ»Π΅ libs Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‡ΠΈΠΊΠ°, Ρ„Π°ΠΉΠ» .fzignore, многостСпСнно сливанС Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

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