การเปิดตัวโครงการ ซึ่งกำลังพัฒนาคอมไพเลอร์ภาษา 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
เป้าหมายโครงการที่สำคัญ:
การสนับสนุนระบบมัลติคอร์ไม่ได้อยู่ในเป้าหมายหลัก
การเปิดตัว 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
