Κυκλοφορία του Tinygo 0.7.0, μεταγλωττιστή Go που βασίζεται στο LLVM

Διαθέσιμος έκδοση έργου Tinygo 0.7.0, η οποία αναπτύσσει έναν μεταγλωττιστή γλώσσας 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.

Βασικοί στόχοι του έργου:

  • Δημιουργία πολύ συμπαγών εκτελέσιμων αρχείων.
  • Υποστήριξη για τα πιο κοινά μοντέλα πλακών μικροελεγκτών.
  • Δυνατότητα εφαρμογής για το Web;
  • Υποστήριξη CGo με ελάχιστη επιβάρυνση κατά την κλήση συναρτήσεων σε C.
  • Υποστήριξη για τα περισσότερα τυπικά πακέτα και δυνατότητα μεταγλώττισης τυπικού υπάρχοντος κώδικα χωρίς αλλαγή.

    Η υποστήριξη για συστήματα πολλαπλών πυρήνων δεν είναι μεταξύ των κύριων στόχων,
    αποτελεσματική εκκίνηση ενός τεράστιου αριθμού κορουτινών (υποστηρίζεται πλήρως η εκκίνηση των κορουτινών), επίτευξη του επιπέδου απόδοσης του μεταγλωττιστή αναφοράς gc (η βελτιστοποίηση επαφίεται στο LLVM και σε ορισμένες εφαρμογές το Tinygo μπορεί να είναι ταχύτερο από το gc) και πλήρης συμβατότητα με όλες τις εφαρμογές Go.

    Η κύρια διαφορά από έναν παρόμοιο μεταγλωττιστή εγω είναι μια προσπάθεια διατήρησης του αρχικού μοντέλου διαχείρισης μνήμης του Go χρησιμοποιώντας συλλογή σκουπιδιών και χρήση LLVM για τη δημιουργία αποτελεσματικού κώδικα αντί της μεταγλώττισης του σε αναπαράσταση C. Το Tinygo προσφέρει επίσης μια νέα βιβλιοθήκη χρόνου εκτέλεσης που υλοποιεί έναν προγραμματιστή, ένα σύστημα εκχώρησης μνήμης και χειριστές συμβολοσειρών βελτιστοποιημένους για συμπαγή συστήματα. Ορισμένα πακέτα, όπως το sync και το reflect, έχουν αναδημιουργηθεί με βάση το νέο χρόνο εκτέλεσης.

    Μεταξύ των αλλαγών στην έκδοση 0.7 είναι η εφαρμογή της εντολής "tinygo test", η παροχή υποστήριξης συλλογής απορριμμάτων για τις περισσότερες πλακέτες στόχων (με βάση το ARM Cortex-M) και το WebAssembly, η υποστήριξη για την πλακέτα HiFive1 rev B με βάση το RISC- αρχιτεκτονική V και η πλακέτα Arduino nano33,
    βελτιωμένη υποστήριξη γλώσσας (υποστήριξη για πεδία bit με χρήση ληκτών και ρυθμιστών, υποστήριξη για ανώνυμες δομές).

    Πηγή: opennet.ru

  • Προσθέστε ένα σχόλιο