การเปิดตัว Tinygo 0.7.0 คอมไพเลอร์ Go ที่ใช้ LLVM

มีอยู่ การเปิดตัวโครงการ ไทนี่โก 0.7.0ซึ่งกำลังพัฒนาคอมไพเลอร์ภาษา Go สำหรับพื้นที่ที่ต้องการการแสดงโค้ดผลลัพธ์ที่กะทัดรัดและการใช้ทรัพยากรต่ำ เช่น ไมโครคอนโทรลเลอร์และระบบโปรเซสเซอร์เดี่ยวขนาดกะทัดรัด รหัส จัดจำหน่ายโดย ภายใต้ใบอนุญาต BSD

การคอมไพล์สำหรับแพลตฟอร์มเป้าหมายต่างๆ ถูกนำมาใช้โดยใช้ LLVM และใช้ไลบรารีที่ใช้ในชุดเครื่องมือหลักจากโปรเจ็กต์ Go เพื่อรองรับภาษา โปรแกรมที่คอมไพล์สามารถรันบนไมโครคอนโทรลเลอร์ได้โดยตรง ทำให้ Go สามารถใช้เป็นภาษาในการเขียนสคริปต์อัตโนมัติได้

แรงจูงใจในการสร้างโครงการใหม่คือความปรารถนาที่จะใช้ภาษา Go ที่คุ้นเคยบนอุปกรณ์ขนาดกะทัดรัด - นักพัฒนาให้เหตุผลว่าหากมีเวอร์ชัน Python สำหรับไมโครคอนโทรลเลอร์ทำไมไม่สร้างเวอร์ชันที่คล้ายกันสำหรับภาษา Go ไป เลือกแล้ว แทนที่จะเป็น Rust เนื่องจากเรียนรู้ได้ง่ายกว่า ให้การสนับสนุนแบบเธรดที่ไม่ขึ้นกับเธรดสำหรับการทำขนานแบบโครูทีน และนำเสนอไลบรารี่มาตรฐานที่กว้างขวาง (“รวมแบตเตอรี่”)

ในรูปแบบปัจจุบัน รองรับไมโครคอนโทรลเลอร์ 15 รุ่น รวมถึงบอร์ดต่างๆ จาก Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary และ Phytec โปรแกรมยังสามารถคอมไพล์เพื่อทำงานในเบราว์เซอร์ในรูปแบบ WebAssembly และเป็นไฟล์ปฏิบัติการสำหรับ Linux รองรับคอนโทรลเลอร์ ESP8266/ESP32 ยังแต่โครงการแยกต่างหากกำลังได้รับการพัฒนาเพื่อเพิ่มการรองรับชิป Xtensa ใน LLVM ซึ่งยังคงถูกทำเครื่องหมายว่าไม่เสถียรและไม่พร้อมสำหรับการรวมเข้ากับ TinyGo

เป้าหมายโครงการที่สำคัญ:

  • การสร้างไฟล์ปฏิบัติการที่มีขนาดกะทัดรัดมาก
  • รองรับบอร์ดไมโครคอนโทรลเลอร์รุ่นทั่วไป
  • ความเป็นไปได้ของการสมัครเว็บ
  • รองรับ CGo โดยมีค่าใช้จ่ายน้อยที่สุดเมื่อเรียกใช้ฟังก์ชันใน C;
  • รองรับแพ็คเกจมาตรฐานส่วนใหญ่และความสามารถในการคอมไพล์โค้ดมาตรฐานที่มีอยู่โดยไม่ต้องเปลี่ยนแปลง

    การสนับสนุนระบบมัลติคอร์ไม่ได้อยู่ในเป้าหมายหลัก
    การเปิดตัว coroutines จำนวนมากอย่างมีประสิทธิภาพ (การสนับสนุนการเปิดตัว coroutines เองอย่างเต็มที่) ความสำเร็จของระดับประสิทธิภาพของคอมไพเลอร์อ้างอิง gc (การเพิ่มประสิทธิภาพเหลืออยู่ที่ LLVM และในบางแอปพลิเคชัน Tinygo อาจเร็วกว่า gc) และเสร็จสมบูรณ์ ความเข้ากันได้ ด้วยแอพพลิเคชั่น Go ทั้งหมด

    ความแตกต่างที่สำคัญจากคอมไพเลอร์ที่คล้ายกัน เอมโก เป็นความพยายามที่จะรักษาโมเดลการจัดการหน่วยความจำดั้งเดิมของ Go โดยใช้การรวบรวมขยะและใช้ LLVM เพื่อสร้างโค้ดที่มีประสิทธิภาพแทนที่จะคอมไพล์เพื่อแสดงเป็น C Tinygo ยังนำเสนอรันไทม์ไลบรารีใหม่ที่ใช้ตัวกำหนดเวลา ระบบจัดสรรหน่วยความจำ และตัวจัดการสตริงที่ปรับให้เหมาะกับระบบขนาดกะทัดรัด แพ็คเกจบางอย่าง เช่น การซิงค์และการสะท้อน ได้รับการสร้างขึ้นใหม่ตามรันไทม์ใหม่

    การเปลี่ยนแปลงในรุ่น 0.7 ได้แก่ การนำคำสั่ง "tinygo test" มาใช้ การจัดเตรียมการรองรับการเก็บขยะสำหรับบอร์ดเป้าหมายส่วนใหญ่ (อิงจาก ARM Cortex-M) และ WebAssembly การรองรับบอร์ด HiFive1 rev B อิงจาก RISC- สถาปัตยกรรม V และบอร์ด Arduino nano33
    การสนับสนุนภาษาที่ได้รับการปรับปรุง (การสนับสนุนสำหรับฟิลด์บิตโดยใช้ getters และ setters การสนับสนุนสำหรับโครงสร้างที่ไม่ระบุชื่อ)

    ที่มา: opennet.ru

  • เพิ่มความคิดเห็น