
Go compiler สำหรับไมโครคอนโทรลเลอร์
TinyGo คือ Go compiler พิเศษที่ออกแบบมาเพื่อนำภาษา Go ไปใช้ในสภาพแวดล้อมที่มีทรัพยากรจำกัด เช่น ไมโครคอนโทรลเลอร์และ WebAssembly (WASM) ต่างจาก Go compiler มาตรฐานที่สร้างไฟล์ไบนารีขนาดใหญ่สำหรับเซิร์ฟเวอร์ประสิทธิภาพสูง TinyGo ใช้แบ็กเอนด์ที่อิงตาม LLVM เพื่อสร้างโค้ดเครื่องที่มีขนาดกะทัดรัดและมีประสิทธิภาพสูง รองรับบอร์ดไมโครคอนโทรลเลอร์กว่า 100 รุ่น เช่น Arduino, BBC micro:bit และชิปจาก Nordic Semiconductor โดยการจัดเตรียมไลบรารีมาตรฐานของ Go ชุดย่อยและรันไทม์แบบกำหนดเอง ช่วยให้นักพัฒนาสามารถใช้ประโยชน์จากโมเดล Concurrency และไวยากรณ์ของ Go ในระบบฝังตัว (Embedded Systems) และ Edge Computing ได้ เป็นการเชื่อมช่องว่างระหว่างประสิทธิภาพของภาษาระดับสูงกับการควบคุมฮาร์ดแวร์ระดับต่ำ
TinyGo ใช้ LLVM เพื่อกำจัดโค้ดที่ไม่ได้ใช้งาน (dead-code) และปรับแต่งประสิทธิภาพอย่างเข้มข้น ทำให้ได้ไบนารีที่มีขนาดเล็กกว่า Go compiler มาตรฐานอย่างมาก จากระดับเมกะไบต์เหลือเพียงกิโลไบต์ ซึ่งสำคัญมากสำหรับไมโครคอนโทรลเลอร์อย่าง Arduino Uno ที่มี SRAM เพียง 2KB และ Flash memory 32KB
รองรับบอร์ดกว่า 100 รุ่น โดย TinyGo จะทำหน้าที่สรุปความซับซ้อนของฮาร์ดแวร์ผ่านแพ็กเกจ 'machine' ช่วยให้นักพัฒนาเขียนโค้ดที่พกพาได้และรันบนสถาปัตยกรรมที่หลากหลาย เช่น AVR, ARM Cortex-M, ESP32 และ RISC-V โดยไม่ต้องเขียนโค้ดเข้าถึงรีจิสเตอร์ระดับต่ำใหม่สำหรับฮาร์ดแวร์แต่ละตัว
TinyGo สร้างโมดูล WASM ที่ปรับแต่งมาอย่างดี เหมาะสำหรับแอปพลิเคชันบนเบราว์เซอร์และ Edge functions แบบ Serverless การลดขนาดรันไทม์ช่วยให้ดาวน์โหลดได้เร็วขึ้นและใช้หน่วยความจำน้อยลง ซึ่งเป็นตัวเลือกที่เหนือกว่าสำหรับสภาพแวดล้อมที่รองรับ WASI ซึ่งมีข้อจำกัดด้านเวลาเริ่มต้น (cold-start) และหน่วยความจำ
รันไทม์แบบกำหนดเองถูกออกแบบมาสำหรับระบบที่ไม่มี OS โดยเฉพาะ โดยใช้ตัวจัดตารางเวลาแบบร่วมมือ (cooperative scheduler) ที่รองรับ goroutines ของ Go ช่วยให้นักพัฒนาจัดการงานพร้อมกันได้ เช่น การอ่านค่าเซ็นเซอร์และการกะพริบไฟ LED โดยไม่ต้องมีภาระของ RTOS เต็มรูปแบบหรือความซับซ้อนในการจัดการ Interrupt ด้วยตนเอง
โปรเจกต์ TinyGo มีระบบนิเวศของไดรเวอร์สำหรับเซ็นเซอร์ จอแสดงผล และอุปกรณ์ขับเคลื่อนทั่วไปมากมาย ไดรเวอร์เหล่านี้เขียนด้วยภาษา Go ตามแบบฉบับ ช่วยให้นักพัฒนาเชื่อมต่อฮาร์ดแวร์ เช่น หน้าจอ OLED หรือเซ็นเซอร์อุณหภูมิได้โดยใช้โค้ดเริ่มต้นน้อยที่สุด ช่วยเร่งขั้นตอนการทำต้นแบบสำหรับโปรเจกต์ IoT และ Maker
วิศวกรใช้ TinyGo เพื่อเขียนโปรแกรมโหนดเซ็นเซอร์พลังงานต่ำที่เก็บข้อมูลสภาพแวดล้อม โดยใช้ Concurrency ของ Go เพื่อจัดการเซ็นเซอร์และโมดูลวิทยุ (LoRa/BLE) หลายตัวบนฮาร์ดแวร์ที่มีแบตเตอรี่จำกัดได้อย่างมีประสิทธิภาพ ส่งผลให้การใช้งานมีความน่าเชื่อถือในระยะยาว
นักพัฒนาปรับใช้โมดูล WASM ที่คอมไพล์ด้วย TinyGo ไปยัง Edge gateways ช่วยให้สามารถรันตรรกะการประมวลผลข้อมูลที่ซับซ้อนในเครื่องที่ Edge ได้ ลดความหน่วงและค่าใช้จ่ายด้านแบนด์วิดท์เมื่อเทียบกับการส่งข้อมูลดิบไปยังคลาวด์เซิร์ฟเวอร์ส่วนกลาง
Maker และผู้ที่ชื่นชอบใช้ TinyGo เพื่อทำต้นแบบโปรเจกต์ฮาร์ดแวร์บนบอร์ดอย่าง Raspberry Pi Pico หรือ Arduino ความสามารถในการใช้ภาษาที่ทันสมัยและปลอดภัยต่อประเภทข้อมูล (type-safe) อย่าง Go ทำให้การดีบั๊กการโต้ตอบของฮาร์ดแวร์ที่ซับซ้อนทำได้รวดเร็วและเข้าใจง่ายกว่าการใช้ C หรือ C++
ต้องการเปลี่ยนจากเวิร์กโฟลว์ C/C++ แบบเดิมเพื่อปรับปรุงความปลอดภัยของโค้ดและความเร็วในการพัฒนา TinyGo มอบภาษาที่ทันสมัยซึ่งจัดการความปลอดภัยของหน่วยความจำและ Concurrency ได้โดยธรรมชาติ
ต้องการภาษาประสิทธิภาพสูงที่คอมไพล์เป็นไบนารี WASM ขนาดเล็กสำหรับเบราว์เซอร์หรือสภาพแวดล้อม Edge โดย TinyGo ช่วยแก้ปัญหาขนาดรันไทม์ที่ใหญ่เกินไปซึ่งมักพบใน Go WASM มาตรฐาน
ต้องการสร้างเฟิร์มแวร์ที่ปรับขนาดได้และดูแลรักษาได้สำหรับอุปกรณ์จำนวนมาก TinyGo ช่วยให้พวกเขาสามารถสร้างมาตรฐานเทคโนโลยี (tech stack) ทั้งในส่วนของบริการคลาวด์และฮาร์ดแวร์ Edge ได้
เป็นโปรเจกต์โอเพนซอร์สภายใต้ใบอนุญาต BSD 3-Clause License ใช้งาน แก้ไข และแจกจ่ายได้ฟรีโดยไม่มีข้อจำกัดทางการค้า