pelepasan proyek , yang sedang mengembangkan kompiler bahasa Go untuk area yang membutuhkan representasi kode yang ringkas dan konsumsi sumber daya yang rendah, seperti mikrokontroler dan sistem prosesor tunggal yang ringkas. Kode di bawah lisensi BSD.
Kompilasi untuk berbagai platform target diimplementasikan menggunakan LLVM, dan dukungan bahasa disediakan oleh pustaka yang terutama digunakan dalam rantai alat proyek Go. Program yang dikompilasi dapat berjalan langsung di mikrokontroler, sehingga Go dapat digunakan sebagai bahasa pemrograman untuk menulis skrip otomatisasi.
Motivasi untuk membuat proyek baru ini adalah keinginan untuk menggunakan bahasa Go yang sudah dikenal pada perangkat kompak - pengembang beralasan bahwa jika ada versi Python untuk mikrokontroler, mengapa tidak membuat sesuatu yang serupa untuk bahasa Go. daripada Rust karena lebih mudah dipelajari, menyediakan dukungan thread-agnostic untuk paralelisme berbasis coroutine, dan menawarkan pustaka standar yang komprehensif ("baterai disertakan").
Saat ini, 15 model mikrokontroler didukung, termasuk berbagai papan dari Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary, dan Phytec. Program juga dapat dikompilasi untuk dieksekusi di browser dalam format WebAssembly dan sebagai file yang dapat dieksekusi untuk LinuxDukungan untuk kontroler ESP8266/ESP32 , tetapi proyek terpisah sedang dikembangkan untuk menambahkan dukungan untuk chip Xtensa ke LLVM, yang saat ini ditandai sebagai tidak stabil dan belum siap untuk diintegrasikan dengan TinyGo.
Tujuan utama proyek:
Dukungan untuk sistem multi-core bukanlah salah satu tujuan utama,
peluncuran yang efisien dari sejumlah besar coroutine (peluncuran coroutine itu sendiri didukung sepenuhnya), mencapai tingkat kinerja kompiler gc referensi (optimalisasi diserahkan kepada LLVM dan dalam beberapa aplikasi Tinygo mungkin lebih cepat daripada gc) dan lengkap dengan semua aplikasi Go.
Perbedaan utama dari kompiler serupa Tinygo berupaya mempertahankan model manajemen memori asli Go yang menggunakan garbage-collected dan memanfaatkan LLVM untuk menghasilkan kode yang efisien, alih-alih mengompilasinya ke representasi C. Tinygo juga menawarkan pustaka runtime baru yang mengimplementasikan penjadwal, sistem alokasi memori, dan pengendali string yang dioptimalkan untuk sistem ringkas. Beberapa paket, seperti sync dan reflect, telah dibangun ulang menggunakan runtime baru ini.
Perubahan dalam rilis 0.7 mencakup penerapan perintah "tinygo test", dukungan untuk pengumpulan sampah untuk sebagian besar papan target (berbasis ARM Cortex-M) dan WebAssembly, dukungan untuk papan HiFive1 rev B berdasarkan arsitektur RISC-V dan papan Arduino nano33,
Dukungan bahasa yang ditingkatkan (dukungan untuk bidang bit menggunakan getter dan setter, dukungan untuk struktur anonim).
Sumber: opennet.ru
