C နှင့် assembler အတွက် တည်ဆောက်ရေးကိရိယာတစ်ခုဖြစ်သည့် ForgeZero 1.9.0 ကို ထုတ်ဝေခြင်း

C၊ C++ နှင့် assembly language များ (NASM၊ GAS၊ FASM) ဖြင့်ရေးသားထားသော ပရောဂျက်များအတွက် command-line build tool တစ်ခုဖြစ်သည့် ForgeZero 1.9.0 (fz) ကို ထွက်ရှိလိုက်ပါပြီ။ အခြေခံအသုံးပြုမှုအတွက် ဤ tool သည် Makefile သို့မဟုတ် အခြား configuration files များ မလိုအပ်ပါ။ ပရောဂျက်ကုဒ်ကို Go ဖြင့်ရေးသားထားပြီး MIT လိုင်စင်အောက်တွင် လိုင်စင်ရထားသည်။

ForgeZero သည် ဖိုင်အမျိုးအစားကို ရှာဖွေပြီး သင့်လျော်သော backend ကို အလိုအလျောက် ရွေးချယ်သည်။ ကုဒ်ဖိုင်တစ်ခုစီကို object ဖိုင်တစ်ခုအဖြစ် စုစည်းပြီးနောက် object အားလုံးတွင် duplicate global symbol များ ရှိမရှိ စစ်ဆေးပြီး executable ဖိုင်တစ်ခုတည်းသို့ ချိတ်ဆက်ထားသည်။ စုစည်းထားသော ဖိုင်များကို ဆက်စပ်ကုဒ်ဖိုင်များတွင် ပြောင်းလဲမှုများ ပြုလုပ်ပြီးမှသာ cache လုပ်ပြီး ပြန်လည်စုစည်းသည်။ ရွေးချယ်နိုင်သည်မှာ ကုဒ်ဖိုင် အပ်ဒိတ်လုပ်ပြီးနောက် ဖိုင်စနစ်ပြောင်းလဲမှုကို ခြေရာခံခြင်းနှင့် ပြန်လည်စုစည်းခြင်းတို့ကို ဖြစ်နိုင်သည်။

ပံ့ပိုးပေးထားသော compiler များမှာ GCC၊ Clang၊ G++ နှင့် Clang++ တို့ဖြစ်သည်။ assembler များမှာ NASM၊ GAS နှင့် FASM တို့ဖြစ်သည်။ linker များမှာ LD၊ GCC နှင့် Clang တို့ဖြစ်သည်။ ထို့အပြင် AR archiver ကိုလည်း ပံ့ပိုးပေးထားသည်။ C နှင့် C++ အတွက် မဖြစ်မနေလိုအပ်သော သတိပေးချက်များမှာ "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion" ဖြစ်သည်။ AddressSanitizer နှင့် UndefinedBehaviorSanitizer sanitizer များကို default အနေဖြင့် enable လုပ်ထားသည် (၎င်းတို့ကို -sanitize=false flag ဖြင့် disable လုပ်နိုင်သည်)။ ပံ့ပိုးပေးထားသော platform များမှာ- Linux, macOS, Windows (WSL2 နှင့် စမ်းသပ်မှုအရ မူရင်း)။

ဗားရှင်း 1.9.0 တွင် အဓိကပြောင်းလဲမှုများ-

  • "-target" အလံကို ထည့်သွင်းထားသည် ၊ ၎င်းသည် သင့်လျော်သော prefix tools များဖြင့် မည်သည့်ဗိသုကာပုံစံအတွက်မဆို cross-compilation ကိုဖွင့်ပေးသည်။ fz သည် သတ်မှတ်ထားသော identifier (ဥပမာ "arm-linux-gnuebihf-gcc") ပေါ်အခြေခံ၍ compiler၊ linker နှင့် archiver တို့၏အမည်များကို အလိုအလျောက်ဆုံးဖြတ်ပေးသည်။ arm-linux-gnuebihf၊ aarch64-linux-gnu နှင့် riscv64-linux-gnu အပါအဝင် စံ GNU target platform အားလုံးကို ပံ့ပိုးပေးပါသည်။
  • Language Server Protocol (LSP) အတွက် ပံ့ပိုးမှုကို အကောင်အထည်ဖော်ပြီးပါပြီ။ "-compile-commands" flag သည် project root တွင် compile_commands.json (Compilation Database) ဖိုင်ကို ထုတ်ပေးသည်။ ဖိုင်ကို ဘာသာစကားအလိုက် ဖတ်သည်။ ဆာဗာများ clangd နှင့် ccls တို့သည် LSP (Neovim၊ VSCode၊ CLion၊ Emacs စသည်) ကို ပံ့ပိုးပေးသော editor များတွင် autocompletion၊ code navigation နှင့် diagnostics များကို ပံ့ပိုးပေးသည်။
  • fz "-update" command သည် ဗားရှင်းအသစ်ကို မထည့်သွင်းမီ လက်ရှိ binary ကို /usr/local/bin/fz.old တွင် သိမ်းဆည်းပေးသောကြောင့် ပြန်လည်ထည့်သွင်းစရာမလိုဘဲ ယခင်ဗားရှင်းသို့ ပြန်သွားနိုင်ပါသည်။
  • multi-directory ပရောဂျက်များတွင် မတူညီသော subdirectory များမှ တူညီသော base အမည်များပါသည့် ဖိုင်များသည် တစ်ခုနှင့်တစ်ခု object ဖိုင်များကို overwrite လုပ်သည့် bug တစ်ခုကို ပြင်ဆင်ပြီးပါပြီ။ Object ဖိုင်အမည်များကို source ဖိုင်သို့ ပေးပို့သည့် လမ်းကြောင်းအပြည့်အစုံအပေါ် အခြေခံ၍ ထုတ်ပေးပါသည်။
  • ဖိုင်တစ်ခုတည်းတည်ဆောက်ရန်အတွက် အပြန်အလှန်တုံ့ပြန်နိုင်သောမုဒ် "fz -shell" ကို အကောင်အထည်ဖော်ခဲ့သည်။
  • SplitCommand၊ CmdSet နှင့် CmdBuild command များအတွက် စမ်းသပ်မှုလွှမ်းခြုံမှုကို ထည့်သွင်းထားသည်။ linker package အတွက် စမ်းသပ်မှုလွှမ်းခြုံမှုကို ၁၇% မှ ၆၀% အထိ တိုးမြှင့်ခဲ့ပြီး package အားလုံးအတွက် လွှမ်းခြုံမှုသည် ၄၀% ကျော်လွန်သွားပါပြီ။
  • toolchain အစိတ်အပိုင်းများ ပျောက်ဆုံးနေသော အခြေအနေများကို စမ်းသပ်ရန်အတွက် CheckTool အစားထိုးယန္တရားတစ်ခုကို ထည့်သွင်းထားသည်။

ယခင်ထုတ်ဝေမှုများမှ ပြောင်းလဲမှုများ-

  • ဗားရှင်း 1.8.0 သည် static libraries (-type static / -lib) များ စုစည်းခြင်းကို အကောင်အထည်ဖော်ပြီး multi-director ပရောဂျက်များတွင် object file name များ၏ ထူးခြားမှုကို သေချာစေကာ ".." path ၏ traversal နှင့် ဆက်စပ်သော assembly subsystem ရှိ အမှားများကို ပြင်ဆင်ပေးသည်။
  • ဗားရှင်း 1.7.0 တွင် parallel compilation (-j N, 0 — core အရေအတွက်ကို အလိုအလျောက်ရှာဖွေခြင်း)၊ linker scripts (-T) နှင့် entry point addresses (-Ttext) အတွက် ပံ့ပိုးမှု၊ interactive mode (fz -shell)၊ output format ၏ တိကျသောရွေးချယ်မှု (elf32, elf64, bin)၊ C++ ဖိုင်များ (.cpp, .cc, .cxx) ကို C အတွက်ကဲ့သို့ တင်းကျပ်သောသတိပေးချက်အလံများဖြင့် စုစည်းခြင်းတို့ကို ထည့်သွင်းထားသည်။
  • ဗားရှင်း 1.6.0 တွင် ပရောဂျက် အစပျိုးမှု (fz -init၊ creates .fz.yaml၊ .fzignore၊ README.md)၊ bootloader များနှင့် firmware အတွက် bin format support (-format bin) နှင့် configuration fields libs၊ flags.cc၊ flags.asm၊ flags.ld တို့ ထည့်သွင်းထားသည်။
  • ဗားရှင်း 1.5.0 တွင် source directory များစွာ (source_dirs)၊ explicit file lists (source_files)၊ include/exclude patterns၊ linker libraries များအတွက် libs field၊ .fzignore file နှင့် configuration files များ၏ multi-level merge တို့ကို မိတ်ဆက်ပေးထားသည်။

source: opennet.ru

DDoS ကာကွယ်ရေး၊ VPS VDS ဆာဗာများပါသည့် ဆိုက်များအတွက် ယုံကြည်စိတ်ချရသော hosting ကို ဝယ်ယူပါ။ 🔥 DDoS ကာကွယ်မှု၊ VPS VDS ဆာဗာများပါရှိသော ယုံကြည်စိတ်ချရသော ဝဘ်ဆိုက် hosting ကို ဝယ်ယူပါ | ProHoster