เบ›เปˆเบญเบ Tinygo 0.7.0, LLVM-based Go compiler

เบกเบตเปƒเบซเป‰ เบเบฒเบ™เบ›เปˆเบญเบเป‚เบ„เบ‡เบเบฒเบ™ Tinygo 0.7.0, เป€เบŠเบดเปˆเบ‡เบเปเบฒเบฅเบฑเบ‡เบžเบฑเบ”เบ—เบฐเบ™เบฒ compiler เบžเบฒเบชเบฒ Go เบชเปเบฒเบฅเบฑเบšเบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ—เบตเปˆเบซเบ™เบฒเปเบซเบ™เป‰เบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบฅเบฐเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ•เปˆเปเบฒ, เป€เบŠเบฑเปˆเบ™: microcontrollers เปเบฅเบฐ compact single-processor systems. เบฅเบฐเบซเบฑเบ” เปเบˆเบเบขเบฒเบเป‚เบ”เบ เบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” BSD.

เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบชเปเบฒเบฅเบฑเบšเป€เบงเบ—เบตเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ•เปˆเบฒเบ‡เป†เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰ LLVM, เปเบฅเบฐเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบŠเบธเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ•เบปเป‰เบ™เบ•เปเบˆเบฒเบเป‚เบ„เบ‡เบเบฒเบ™ Go เปเบกเปˆเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบฒเบชเบฒ. เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ”เบเบเบปเบ‡เปƒเบ™ microcontrollers, เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ Go เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™ scripts เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.

เปเบฎเบ‡เบˆเบนเบ‡เปƒเบˆเปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เปƒเบซเบกเปˆเปเบกเปˆเบ™เบ„เบงเบฒเบกเบ›เบฒเบ–เบฐเบซเบ™เบฒเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบžเบฒเบชเบฒ Go เบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเบซเบ™เบฒเปเบซเบ™เป‰เบ™ - เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป„เบ”เป‰เปƒเบซเป‰เป€เบซเบ”เบœเบปเบ™เบงเปˆเบฒเบ–เป‰เบฒเบกเบตเบฎเบธเปˆเบ™ Python เบชเปเบฒเบฅเบฑเบš microcontrollers, เปเบฅเป‰เบงเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบˆเบถเปˆเบ‡เบšเปเปˆเบชเป‰เบฒเบ‡เปเบšเบšเบ”เบฝเบงเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒ Go. เป„เบ› เป€เบฅเบทเบญเบเปเบฅเป‰เบง เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™ Rust เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰, เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ thread-independent เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ™เบ•เบฒเบก coroutine, เปเบฅเบฐเบชเบฐเป€เบซเบ™เบตเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบขเปˆเบฒเบ‡เบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡ ("เบซเบกเปเป‰เป„เบŸเบฅเบงเบก").

เปƒเบ™เบฎเบนเบšเปเบšเบšเบ›เบฐเบˆเบธเบšเบฑเบ™เบ‚เบญเบ‡เบกเบฑเบ™, 15 เบ•เบปเบงเปเบšเบš microcontroller เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™, เบฅเบงเบกเบ—เบฑเบ‡เบเบฐเบ”เบฒเบ™เบ•เปˆเบฒเบ‡เป†เบˆเบฒเบ Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary เปเบฅเบฐ Phytec. เป‚เบ„เบ‡เบเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเปƒเบ™เบฎเบนเบšเปเบšเบš WebAssembly เปเบฅเบฐเป€เบ›เบฑเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบชเปเบฒเบฅเบฑเบš Linux. เบฎเบญเบ‡เบฎเบฑเบšเบ•เบปเบงเบ„เบงเบšเบ„เบธเบก ESP8266/ESP32 เบเบฑเบ‡โ€‹เป€เบ—เบทเปˆเบญ, เปเบ•เปˆเป‚เบ„เบ‡เบเบฒเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปเบกเปˆเบ™เป„เบ”เป‰เบ–เบทเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเบŠเบดเบš Xtensa เปƒเบ™ LLVM, เป€เบŠเบดเปˆเบ‡เบเบฑเบ‡เบ–เบทเบเบซเบกเบฒเบเบงเปˆเบฒเบšเปเปˆเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เปเบฅเบฐเบšเปเปˆเบเบฝเบกเบžเป‰เบญเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบš TinyGo.

เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบชเปเบฒโ€‹เบ„เบฑเบ™โ€‹:

  • เบเบฒเบ™เบœเบฐเบฅเบดเบ”เป„เบŸเบฅเปŒเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบซเบ™เบฒเปเบซเบ™เป‰เบ™เบซเบผเบฒเบ;
  • เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเปเบšเบšเบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เบเบฐเบ”เบฒเบ™ microcontroller;
  • เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ•เปŒ;
  • เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ CGo เบเบฑเบš overhead เบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบขเบนเปˆเปƒเบ™ C;
  • เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเปเบฅเบฐเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบฅเบฐเบซเบฑเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบกเบฑเบ™.

    เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบฅเบฐเบšเบปเบšเบซเบผเบฒเบเปเบเบ™เบšเปเปˆเปเบกเปˆเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ•เบปเป‰เบ™เบ•เป,
    เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡ coroutines เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ (เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ‚เบญเบ‡ coroutines เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆ), เบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบ‚เบญเบ‡เบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡ compiler เบญเป‰เบฒเบ‡เบญเบดเบ‡ gc (เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปเบกเปˆเบ™เบ›เปˆเบญเบเปƒเบซเป‰ LLVM เปเบฅเบฐเปƒเบ™เบšเบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Tinygo เบญเบฒเบ”เบˆเบฐเป„เบงเบเบงเปˆเบฒ gc) เปเบฅเบฐเบชเปเบฒเป€เบฅเบฑเบ”. เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰ เบเบฑเบšเบ—เบธเบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ Go.

    เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ•เบปเป‰เบ™เบ•เปเบˆเบฒเบ compiler เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™ emgo เปเบกเปˆเบ™เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบˆเบฐเบฎเบฑเบเบชเบฒเบฎเบนเบšเปเบšเบšเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡ Go เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป€เบเบฑเบšเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเปเบฅเบฐเปƒเบŠเป‰ LLVM เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบฅเบงเบšเบฅเบงเบกเบกเบฑเบ™เปƒเบซเป‰เบเบฑเบšเบ•เบปเบงเปเบ—เบ™ C. Tinygo เบเบฑเบ‡เบชเบฐเบซเบ™เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” runtime เปƒเบซเบกเปˆเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ, เบฅเบฐเบšเบปเบšเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เปเบฅเบฐเบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบชเบฒเบเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบ—เบตเปˆเบซเบ™เบฒเปเบซเบ™เป‰เบ™. เบšเบฒเบ‡เปเบžเบฑเบเป€เบเบ”, เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบŠเบดเบ‡เบ„เปŒ เปเบฅเบฐเบชเบฐเบ—เป‰เบญเบ™, เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ„เบทเบ™เปƒเปเปˆเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเป€เบงเบฅเบฒเปเบฅเปˆเบ™เปƒเปเปˆ.

    เปƒเบ™เบšเบฑเบ™เบ”เบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบ 0.7 เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡ "tinygo test", เบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เป€เบเบฑเบšเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบชเปเบฒเบฅเบฑเบšเบเบฐเบ”เบฒเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบชเปˆเบงเบ™เปƒเบซเบเปˆ (เบญเบตเบ‡เปƒเบชเปˆ ARM Cortex-M) เปเบฅเบฐ WebAssembly, เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ„เบฐเบ™เบฐเบเปเบฒเบกเบฐเบเบฒเบ™ HiFive1 rev B เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ RISC- เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ V เปเบฅเบฐเบเบฐเบ”เบฒเบ™ Arduino nano33,
    เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบฒเบชเบฒ (เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบš bit fields เป‚เบ”เบเปƒเบŠเป‰ getters เปเบฅเบฐ setters, เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบšเปเปˆเป€เบ›เบตเบ”เป€เบœเบตเบเบŠเบทเปˆ).

    เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

  • เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™