έκδοση έργου , η οποία αναπτύσσει έναν μεταγλωττιστή γλώσσας 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.
Βασικοί στόχοι του έργου:
Η υποστήριξη για συστήματα πολλαπλών πυρήνων δεν είναι μεταξύ των κύριων στόχων,
αποτελεσματική εκκίνηση ενός τεράστιου αριθμού κορουτινών (υποστηρίζεται πλήρως η εκκίνηση των κορουτινών), επίτευξη του επιπέδου απόδοσης του μεταγλωττιστή αναφοράς 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
