Κυκλοφορία της γλώσσας προγραμματισμού Ruby 3.1

Κυκλοφόρησε η Ruby 3.1.0, μια δυναμική αντικειμενοστρεφής γλώσσα προγραμματισμού που είναι ιδιαίτερα αποδοτική στην ανάπτυξη προγραμμάτων και ενσωματώνει τα καλύτερα χαρακτηριστικά των Perl, Java, Python, Smalltalk, Eiffel, Ada και Lisp. Ο κώδικας έργου διανέμεται υπό τις άδειες BSD ("2-ρήτρα BSDL") και "Ruby", η οποία αναφέρεται στην πιο πρόσφατη έκδοση της άδειας GPL και είναι πλήρως συμβατός με το GPLv3.

Βασικές βελτιώσεις:

  • Προστέθηκε ένας νέος πειραματικός μεταγλωττιστής JIT, YJIT, που δημιουργήθηκε από τους προγραμματιστές της πλατφόρμας ηλεκτρονικού εμπορίου Shopify ως μέρος μιας πρωτοβουλίας για τη βελτίωση της απόδοσης των προγραμμάτων Ruby που χρησιμοποιούν το πλαίσιο Rails και καλούν πολλές μεθόδους. Η βασική διαφορά από τον προηγουμένως χρησιμοποιημένο μεταγλωττιστή MJIT JIT, ο οποίος βασίζεται στην επεξεργασία ολόκληρων μεθόδων και χρησιμοποιεί έναν εξωτερικό μεταγλωττιστή στη γλώσσα C, είναι ότι το YJIT χρησιμοποιεί Lazy Basic Block Versioning (LBBV) και περιέχει έναν ενσωματωμένο μεταγλωττιστή JIT. Με το LBBV, το JIT πρώτα μεταγλωττίζει μόνο την αρχή της μεθόδου και μεταγλωττίζει τις υπόλοιπες λίγο αργότερα, αφού καθοριστούν οι τύποι των μεταβλητών και των ορισμάτων που χρησιμοποιούνται κατά την εκτέλεση. Κατά τη χρήση του YJIT, καταγράφηκε αύξηση 22% στην απόδοση κατά την εκτέλεση της δοκιμής railsbench και αύξηση 39% στη δοκιμή υγρής απόδοσης. Το YJIT περιορίζεται επί του παρόντος στην υποστήριξη λειτουργικών συστημάτων τύπου unix σε συστήματα με αρχιτεκτονική x86-64 και είναι απενεργοποιημένο από προεπιλογή (για ενεργοποίηση, καθορίστε τη σημαία «--yjit» στη γραμμή εντολών).
  • Βελτιωμένη απόδοση του παλιού μεταγλωττιστή MJIT JIT. Για έργα που χρησιμοποιούν Rails, το προεπιλεγμένο μέγιστο μέγεθος προσωρινής μνήμης (--jit-max-cache) έχει αυξηθεί από 100 σε 10000 οδηγίες. Σταμάτησε να χρησιμοποιεί JIT για μεθόδους με περισσότερες από 1000 οδηγίες. Για την υποστήριξη του Zeitwerk of Rails, ο κώδικας JIT δεν απορρίπτεται πλέον όταν το TracePoint είναι ενεργοποιημένο για συμβάντα τάξης.
  • Περιλαμβάνει ένα πλήρως ξαναγραμμένο πρόγραμμα εντοπισμού σφαλμάτων debug.gem, το οποίο υποστηρίζει απομακρυσμένο εντοπισμό σφαλμάτων, δεν επιβραδύνει την εφαρμογή εντοπισμού σφαλμάτων, υποστηρίζει την ενοποίηση με προηγμένες διεπαφές εντοπισμού σφαλμάτων (VSCode και Chrome), μπορεί να χρησιμοποιηθεί για εντοπισμό σφαλμάτων πολλαπλών νημάτων και εφαρμογών πολλαπλών διεργασιών, παρέχει μια διεπαφή εκτέλεσης κώδικα REPL, προσφέρει προηγμένες δυνατότητες ανίχνευσης, μπορεί να καταγράφει και να αναπαράγει αποσπάσματα κώδικα. Το πρόγραμμα εντοπισμού σφαλμάτων lib/debug.rb που προσφέρθηκε προηγουμένως έχει αφαιρεθεί από τη βασική διανομή.
    Κυκλοφορία της γλώσσας προγραμματισμού Ruby 3.1
  • Εφαρμόστηκε οπτική επισήμανση σφαλμάτων στις αναφορές ιχνών επανάκλησης. Η επισήμανση σφάλματος παρέχεται χρησιμοποιώντας το ενσωματωμένο και το προεπιλεγμένο πακέτο gem error_highlight. Για να απενεργοποιήσετε την επισήμανση σφαλμάτων, μπορείτε να χρησιμοποιήσετε τη ρύθμιση "--disable-error_highlight". $ ruby ​​· test.rb test.rb:1:in " ": απροσδιόριστη μέθοδος "time" για 1:Integer (NoMethodError) 1.time {} ^^^^^ Μήπως εννοούσατε; φορές
  • Το κέλυφος των διαδραστικών υπολογισμών IRB (REPL, Read-Eval-Print-Loop) υλοποιεί την αυτόματη συμπλήρωση του εισαγόμενου κωδικού (καθώς πληκτρολογείτε, εμφανίζεται μια υπόδειξη με επιλογές για τη συνέχιση της εισαγωγής, μεταξύ των οποίων μπορείτε να μετακινηθείτε με το Tab ή το Shift+ Πλήκτρο Tab). Αφού επιλέξετε την επιλογή συνέχειας, εμφανίζεται ένα παράθυρο διαλόγου κοντά που εμφανίζει την τεκμηρίωση που σχετίζεται με το επιλεγμένο στοιχείο. Η συντόμευση πληκτρολογίου Alt+d μπορεί να χρησιμοποιηθεί για πρόσβαση στην πλήρη τεκμηρίωση.
    Κυκλοφορία της γλώσσας προγραμματισμού Ruby 3.1
  • Η σύνταξη της γλώσσας επιτρέπει πλέον να παραλείπονται τιμές σε κυριολεκτικά κατακερματισμού και ορίσματα λέξεων-κλειδιών κατά την κλήση συναρτήσεων. Για παράδειγμα, αντί για την έκφραση "{x: x, y: y}" μπορείτε τώρα να καθορίσετε "{x:, y:}" και αντί για "foo(x: x, y: y)" - foo( x:, y: )".
  • Σταθεροποιημένη υποστήριξη για αντιστοιχίσεις μοτίβων μίας γραμμής (ary => [x, y, z]), οι οποίες δεν επισημαίνονται πλέον ως πειραματικές.
  • Ο τελεστής "^" σε αντιστοιχίσεις μοτίβων μπορεί τώρα να περιέχει αυθαίρετες εκφράσεις, για παράδειγμα: Prime.each_cons(2).lazy.find_all{_1 σε [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • Σε αντιστοιχίσεις μοτίβων μονής γραμμής, μπορείτε να παραλείψετε παρενθέσεις: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • Η γλώσσα σχολιασμού τύπου RBS, η οποία σας επιτρέπει να προσδιορίσετε τη δομή του προγράμματος και τους τύπους που χρησιμοποιούνται, έχει προσθέσει υποστήριξη για τον καθορισμό του ανώτατου ορίου των παραμέτρων τύπου χρησιμοποιώντας το σύμβολο «<», πρόσθετη υποστήριξη για ψευδώνυμα γενικών τύπων, υλοποιημένη υποστήριξη για συλλογές για τη διαχείριση πολύτιμων λίθων, βελτιωμένη απόδοση και υλοποίησε πολλές νέες υπογραφές για ενσωματωμένες και τυπικές βιβλιοθήκες.
  • Πειραματική υποστήριξη για ενσωματωμένα περιβάλλοντα ανάπτυξης προστέθηκε στον αναλυτή στατικού τύπου TypePro, ο οποίος δημιουργεί σχολιασμούς RBS με βάση την ανάλυση κώδικα χωρίς ρητές πληροφορίες τύπου (για παράδειγμα, έχει προετοιμαστεί ένα πρόσθετο για την ενοποίηση του TypePro με τον επεξεργαστή VSCode).
  • Η σειρά επεξεργασίας πολλαπλών εργασιών έχει αλλάξει. Για παράδειγμα, προηγουμένως τα συστατικά της έκφρασης «foo[0], bar[0] = baz, qux» επεξεργάζονταν με τη σειρά baz, qux, foo, bar, αλλά τώρα foo, bar, baz, qux.
  • Προστέθηκε πειραματική υποστήριξη για εκχώρηση μνήμης για συμβολοσειρές χρησιμοποιώντας τον μηχανισμό VWA (Variable Width Allocation).
  • Ενημερωμένες εκδόσεις των ενσωματωμένων μονάδων πολύτιμων λίθων και εκείνων που περιλαμβάνονται στην τυπική βιβλιοθήκη. Τα πακέτα net-ftp, net-imap, net-pop, net-smtp, matrix, prime και debug είναι ενσωματωμένα.

Πηγή: opennet.ru

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