Έκδοση γλώσσας προγραμματισμού Go 1.16

Παρουσιάζεται η κυκλοφορία της γλώσσας προγραμματισμού Go 1.16, η οποία αναπτύσσεται από την Google με τη συμμετοχή της κοινότητας ως υβριδική λύση που συνδυάζει την υψηλή απόδοση των μεταγλωττισμένων γλωσσών με τέτοια πλεονεκτήματα των γλωσσών δέσμης ενεργειών όπως η ευκολία γραφής κώδικα , ταχύτητα ανάπτυξης και προστασία σφαλμάτων. Ο κώδικας του έργου διανέμεται με την άδεια BSD.

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

Το έργο αναπτύχθηκε αρχικά με γνώμονα τον προγραμματισμό πολλαπλών νημάτων και την αποτελεσματική λειτουργία σε συστήματα πολλαπλών πυρήνων, συμπεριλαμβανομένης της παροχής μέσων σε επίπεδο χειριστή για την οργάνωση παράλληλων υπολογιστών και αλληλεπίδρασης μεταξύ μεθόδων που εκτελούνται παράλληλα. Η γλώσσα παρέχει επίσης ενσωματωμένη προστασία έναντι υπερκατανεμημένων μπλοκ μνήμης και παρέχει τη δυνατότητα χρήσης ενός συλλέκτη απορριμμάτων.

Βασικά νέα χαρακτηριστικά που παρουσιάστηκαν στο Go 1.16:

  • Προστέθηκε το πακέτο ενσωμάτωσης, το οποίο παρέχει εργαλεία για την ενσωμάτωση αυθαίρετων αρχείων και καταλόγων στο πρόγραμμα. Μια νέα οδηγία "//go:embed" παρέχεται για τον καθορισμό των αρχείων που θα ενσωματωθούν κατά το χρόνο μεταγλώττισης. Για παράδειγμα, ο καθορισμός του "//go:embed test.txt" στο σχόλιο κώδικα και, στη συνέχεια, η δήλωση της μεταβλητής "var f embed.FS" θα οδηγήσει στην ενσωμάτωση του αρχείου test.txt και στη δυνατότητα πρόσβασης σε αυτό μέσω του " στ» περιγραφέας. Με παρόμοιο τρόπο, μπορείτε να ενσωματώσετε αρχεία με πόρους ή μεμονωμένες τιμές ενός συγκεκριμένου τύπου που είναι απαραίτητοι για εργασία, για παράδειγμα, για να αποκτήσετε τη μεταβλητή συμβολοσειράς "s" από το αρχείο version.txt, μπορείτε να καθορίσετε: import _ "embed ” //go:embed version.txt var Εκτύπωση συμβολοσειράς (ες)
  • Από προεπιλογή, απαιτείται πλέον το νέο σύστημα λειτουργικών μονάδων με ενσωματωμένη υποστήριξη εκδόσεων, αντικαθιστώντας τη διαχείριση εξαρτήσεων που βασίζεται στο GOPATH. Η μεταβλητή περιβάλλοντος GO111MODULE είναι τώρα ρυθμισμένη σε "on" από προεπιλογή και η λειτουργία λειτουργικών μονάδων χρησιμοποιείται ανεξάρτητα από την παρουσία ενός αρχείου go.mod στον κατάλογο εργασίας ή γονέα. Στη νέα λειτουργία, οι εντολές δημιουργίας όπως "go build" και "go test" δεν αλλάζουν τα περιεχόμενα των go.mod και go.sum και η εντολή "go install" επεξεργάζεται ορίσματα έκδοσης ("go install example.com/[προστασία μέσω email]"). Για να επιστρέψετε την παλιά συμπεριφορά, αλλάξτε το GO111MODULE σε "auto". Σημειώνεται ότι το 96% των προγραμματιστών έχει ήδη μεταβεί στο νέο σύστημα μονάδων.
  • Ο σύνδεσμος έχει βελτιστοποιηθεί. Για μεγάλα έργα, η διάταξη είναι πλέον 20-25% ταχύτερη και απαιτεί 5-15% λιγότερη μνήμη.
  • Ο μεταγλωττιστής έχει προσθέσει υποστήριξη για ενσωματωμένη επέκταση συναρτήσεων με συντομευμένους ορισμούς βρόχων «για», τιμές μεθόδων και κατασκευές «διακόπτη τύπου».
  • Προστέθηκε υποστήριξη για συστήματα Apple εξοπλισμένα με το νέο τσιπ Apple M1 ARM. Προστέθηκαν θύρες netbsd/arm64 και openbsd/mips64 με υποστήριξη για NetBSD σε συστήματα ARM 64-bit και OpenBSD σε συστήματα MIPS64. Προστέθηκε υποστήριξη για το cgo και τη λειτουργία "-buildmode=pie" στη θύρα linux/riscv64.
  • Η υποστήριξη για τη λειτουργία μεταγλώττισης x87 έχει διακοπεί (GO386=387). Η υποστήριξη για επεξεργαστές χωρίς οδηγίες SSE2 είναι πλέον διαθέσιμη μέσω της λειτουργίας λογισμικού "GO386=softfloat".

Επιπλέον, μπορούμε να σημειώσουμε την έναρξη της δοκιμής της έκδοσης beta της γλώσσας Dart 2.12, στην οποία έχει σταθεροποιηθεί η ασφαλής λειτουργία για τη χρήση της τιμής "Null" (null ασφάλεια), η οποία θα βοηθήσει στην αποφυγή σφαλμάτων που προκαλούνται από προσπάθειες χρήσης μεταβλητών Η τιμή δεν έχει οριστεί και ορίζεται σε "Null". Ο τρόπος λειτουργίας υποδηλώνει ότι οι μεταβλητές δεν μπορούν να έχουν μηδενικές τιμές εκτός και αν τους έχει εκχωρηθεί ρητά η τιμή null. Η λειτουργία σέβεται αυστηρά τους τύπους μεταβλητών, γεγονός που επιτρέπει στον μεταγλωττιστή να εφαρμόζει πρόσθετες βελτιστοποιήσεις. Η συμμόρφωση τύπου ελέγχεται τη στιγμή της μεταγλώττισης, για παράδειγμα, εάν προσπαθήσετε να αντιστοιχίσετε την τιμή "Null" σε μια μεταβλητή με τύπο που δεν υποδηλώνει απροσδιόριστη κατάσταση, όπως "int", θα εμφανιστεί ένα σφάλμα.

Πηγή: opennet.ru

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