Keluaran Tinygo 0.7.0, pengkompil Go berasaskan LLVM

Ada keluaran projek Tinygo 0.7.0, yang sedang membangunkan pengkompil bahasa Go untuk kawasan yang memerlukan perwakilan padat kod yang terhasil dan penggunaan sumber yang rendah, seperti mikropengawal dan sistem pemproses tunggal padat. Kod diedarkan oleh di bawah lesen BSD.

Penyusunan untuk pelbagai platform sasaran dilaksanakan menggunakan LLVM, dan perpustakaan yang digunakan dalam kit alat utama daripada projek Go digunakan untuk menyokong bahasa. Program yang disusun boleh dijalankan terus pada mikropengawal, membolehkan Go digunakan sebagai bahasa untuk menulis skrip automasi.

Motivasi untuk mencipta projek baharu ialah keinginan untuk menggunakan bahasa Go yang biasa pada peranti padat - pembangun berpendapat bahawa jika terdapat versi Python untuk mikropengawal, maka mengapa tidak mencipta yang serupa untuk bahasa Go. Pergi terpilih bukannya Rust kerana ia lebih mudah dipelajari, menyediakan sokongan bebas benang untuk selari berasaskan coroutine dan menawarkan perpustakaan standard yang meluas ("termasuk bateri").

Dalam bentuk semasanya, 15 model mikropengawal disokong, termasuk pelbagai papan daripada Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary dan Phytec. Program juga boleh disusun untuk dijalankan dalam pelayar dalam format WebAssembly dan sebagai fail boleh laku untuk Linux. Menyokong pengawal ESP8266/ESP32 Belum lagi, tetapi projek berasingan sedang dibangunkan untuk menambah sokongan untuk cip Xtensa dalam LLVM, yang masih ditandakan sebagai tidak stabil dan tidak bersedia untuk penyepaduan dengan TinyGo.

Matlamat projek utama:

  • Penjanaan fail boleh laku yang sangat padat;
  • Sokongan untuk model paling biasa papan mikropengawal;
  • Kemungkinan permohonan untuk Web;
  • Sokongan CGo dengan overhed minimum apabila memanggil fungsi dalam C;
  • Sokongan untuk kebanyakan pakej standard dan keupayaan untuk menyusun kod sedia ada standard tanpa mengubahnya.

    Sokongan untuk sistem berbilang teras bukanlah antara matlamat utama,
    pelancaran yang cekap bagi sejumlah besar coroutine (pelancaran coroutine itu sendiri disokong sepenuhnya), pencapaian tahap prestasi pengkompil rujukan gc (pengoptimuman diserahkan kepada LLVM dan dalam sesetengah aplikasi Tinygo mungkin lebih pantas daripada gc) dan lengkap ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ dengan semua aplikasi Go.

    Perbezaan utama dari pengkompil yang serupa emgo ialah percubaan untuk mengekalkan model pengurusan memori asal Go menggunakan pengumpulan sampah dan menggunakan LLVM untuk menjana kod yang cekap dan bukannya menyusunnya kepada perwakilan C. Tinygo juga menawarkan perpustakaan masa jalan baharu yang melaksanakan penjadual, sistem peruntukan memori dan pengendali rentetan yang dioptimumkan untuk sistem padat. Sesetengah pakej, seperti penyegerakan dan refleksi, telah dicipta semula berdasarkan masa jalan baharu.

    Antara perubahan dalam keluaran 0.7 ialah pelaksanaan perintah "tinygo test", penyediaan sokongan pengumpulan sampah untuk kebanyakan papan sasaran (berdasarkan ARM Cortex-M) dan WebAssembly, sokongan untuk papan HiFive1 rev B berdasarkan RISC- Seni bina V dan papan Arduino nano33,
    sokongan bahasa yang lebih baik (sokongan untuk medan bit menggunakan getter dan setter, sokongan untuk struktur tanpa nama).

    Sumber: opennet.ru

  • Tambah komen