Rilis Tinygo 0.7.0, compiler Go berbasis LLVM

Tersedia pelepasan proyek Tinygo 0.7.0, yang sedang mengembangkan kompiler bahasa Go untuk area yang memerlukan representasi kompak dari kode yang dihasilkan dan konsumsi sumber daya yang rendah, seperti mikrokontroler dan sistem prosesor tunggal yang kompak. Kode didistribusikan oleh di bawah lisensi BSD.

Kompilasi untuk berbagai platform target diimplementasikan menggunakan LLVM, dan perpustakaan yang digunakan dalam toolkit utama dari proyek Go digunakan untuk mendukung bahasa tersebut. Program yang dikompilasi dapat langsung dijalankan pada mikrokontroler, sehingga Go dapat digunakan sebagai bahasa untuk menulis skrip otomasi.

Motivasi untuk membuat proyek baru adalah keinginan untuk menggunakan bahasa Go yang sudah dikenal pada perangkat kompak - pengembang beralasan bahwa jika ada versi Python untuk mikrokontroler, mengapa tidak membuat versi serupa untuk bahasa Go. Pergi terpilih alih-alih Rust karena lebih mudah dipelajari, memberikan dukungan thread-independen untuk paralelisasi berbasis coroutine, dan menawarkan perpustakaan standar yang luas (β€œtermasuk baterai”).

Dalam bentuknya 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 dijalankan di browser dalam format WebAssembly dan sebagai file yang dapat dieksekusi untuk Linux. Mendukung pengontrol ESP8266/ESP32 belum, tetapi proyek terpisah sedang dikembangkan untuk menambahkan dukungan pada chip Xtensa di LLVM, yang masih ditandai sebagai tidak stabil dan belum siap untuk diintegrasikan dengan TinyGo.

Tujuan utama proyek:

  • Pembuatan file executable yang sangat ringkas;
  • Dukungan untuk model papan mikrokontroler yang paling umum;
  • Kemungkinan penerapan Web;
  • Dukungan CGo dengan overhead minimal saat memanggil fungsi di C;
  • Dukungan untuk sebagian besar paket standar dan kemampuan untuk mengkompilasi kode standar yang ada tanpa mengubahnya.

    Dukungan untuk sistem multi-core bukanlah salah satu tujuan utama,
    peluncuran coroutine dalam jumlah besar secara efisien (peluncuran coroutine itu sendiri didukung penuh), pencapaian tingkat kinerja kompiler referensi gc (optimasi diserahkan kepada LLVM dan dalam beberapa aplikasi Tinygo mungkin lebih cepat daripada gc) dan selesai ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ dengan semua aplikasi Go.

    Perbedaan utama dari kompiler serupa emgo adalah upaya untuk melestarikan model manajemen memori asli Go menggunakan pengumpulan sampah dan menggunakan LLVM untuk menghasilkan kode yang efisien alih-alih mengkompilasinya ke representasi C. Tinygo juga menawarkan perpustakaan runtime baru yang mengimplementasikan penjadwal, sistem alokasi memori, dan penangan string yang dioptimalkan untuk sistem kompak. Beberapa paket, seperti sinkronisasi dan refleksi, telah dibuat ulang berdasarkan runtime baru.

    Di antara perubahan dalam rilis 0.7 adalah penerapan perintah β€œtinygo test”, penyediaan dukungan pengumpulan sampah untuk sebagian besar papan target (berdasarkan ARM Cortex-M) dan WebAssembly, dukungan untuk papan HiFive1 rev B berdasarkan RISC- V arsitektur dan papan Arduino nano33,
    dukungan bahasa yang ditingkatkan (dukungan untuk bidang bit menggunakan pengambil dan penyetel, dukungan untuk struktur anonim).

    Sumber: opennet.ru

  • Tambah komentar