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

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

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

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

Η νέα έκδοση προσθέτει υποστήριξη για γενικές λειτουργίες και τύπους (γενόσημα), με τη βοήθεια των οποίων ένας προγραμματιστής μπορεί να ορίσει και να χρησιμοποιήσει λειτουργίες που έχουν σχεδιαστεί για να λειτουργούν με πολλούς τύπους ταυτόχρονα. Είναι επίσης δυνατή η χρήση διεπαφών για τη δημιουργία συνδυασμένων τύπων που εκτείνονται σε πολλούς τύπους δεδομένων. Η υποστήριξη για γενόσημα υλοποιείται χωρίς διακοπή της συμβατότητας με τον υπάρχοντα κώδικα. // Αθροιστικές τιμές συνόλου, εργασίες για τύπους int64 και float64 func SumIntsOrFloats[K συγκρίσιμο, V int64 | float64](m χάρτης[K]V) V { var s V for _, v := range m { s += v } return s } // Μια άλλη επιλογή με γενικό ορισμό τύπου: type Number interface { int64 | float64 } func SumNumbers[K συγκρίσιμα, V Αριθμός](m χάρτης[K]V) V { var s V για _, v := εύρος m { s += v } επιστροφή s }

Άλλες βελτιώσεις:

  • Τα βοηθητικά προγράμματα για τη δοκιμή κώδικα fuzzing είναι ενσωματωμένα στην τυπική εργαλειοθήκη. Κατά τη διάρκεια της δοκιμής fuzzing, δημιουργείται μια ροή όλων των πιθανών τυχαίων συνδυασμών δεδομένων εισόδου και καταγράφονται πιθανές αστοχίες κατά την επεξεργασία τους. Εάν μια ακολουθία διακοπεί ή δεν ταιριάζει με την αναμενόμενη απόκριση, τότε αυτή η συμπεριφορά είναι πολύ πιθανό να υποδεικνύει σφάλμα ή ευπάθεια.
  • Προστέθηκε υποστήριξη για πολυαρθρωτούς χώρους εργασίας, επιτρέποντάς σας να εκτελείτε εντολές σε πολλαπλές μονάδες ταυτόχρονα, επιτρέποντάς σας να δημιουργείτε και να εκτελείτε ταυτόχρονα κώδικα σε πολλές μονάδες.
  • Έχουν γίνει σημαντικές βελτιστοποιήσεις απόδοσης για συστήματα που βασίζονται σε επεξεργαστές Apple M1, ARM64 και PowerPC64. Ενεργοποιήθηκε η δυνατότητα χρήσης καταχωρητών αντί της στοίβας για τη μετάδοση ορισμάτων στις συναρτήσεις και την επιστροφή του αποτελέσματος. Βελτιωμένο ενσωματωμένο ξετύλιγμα βρόχων από τον μεταγλωττιστή. Ο έλεγχος τύπου στον μεταγλωττιστή έχει επανασχεδιαστεί πλήρως. Ορισμένες δοκιμές δείχνουν 20% αύξηση στην απόδοση του κώδικα σε σύγκριση με την προηγούμενη έκδοση, αλλά η ίδια η μεταγλώττιση διαρκεί περίπου 15% περισσότερο.
  • Κατά τη διάρκεια εκτέλεσης, η αποτελεσματικότητα της επιστροφής της ελευθερωμένης μνήμης στο λειτουργικό σύστημα έχει αυξηθεί και η λειτουργία του συλλέκτη απορριμμάτων έχει βελτιωθεί, η συμπεριφορά του οποίου έχει γίνει πιο προβλέψιμη.
  • Νέα πακέτα net/netip και debug/buildinfo έχουν προστεθεί στην τυπική βιβλιοθήκη. Η υποστήριξη για TLS 1.0 και 1.1 είναι απενεργοποιημένη από προεπιλογή στον κωδικό πελάτη. Η μονάδα crypto/x509 έχει σταματήσει να επεξεργάζεται πιστοποιητικά που έχουν υπογραφεί με χρήση του κατακερματισμού SHA-1.
  • Οι απαιτήσεις για το περιβάλλον στο Linux έχουν αυξηθεί· για να λειτουργήσει, πρέπει τώρα να διαθέτετε πυρήνα Linux τουλάχιστον έκδοσης 2.6.32. Στην επόμενη έκδοση, αναμένονται παρόμοιες αλλαγές για το FreeBSD (η υποστήριξη για τον κλάδο FreeBSD 11.x θα διακοπεί) και θα απαιτηθεί τουλάχιστον το FreeBSD 12.2 για να λειτουργήσει.

Πηγή: opennet.ru

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