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

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

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

  • Προστέθηκε η αρχική θύρα του διερμηνέα CRuby, μεταγλωττισμένη σε ενδιάμεσο κώδικα WebAssembly για εκτέλεση σε ένα πρόγραμμα περιήγησης ιστού ή σε ξεχωριστά runtimes, όπως το wasmtime. Για άμεση αλληλεπίδραση με το λειτουργικό σύστημα κατά την ξεχωριστή εκκίνηση, χρησιμοποιείται το API WASI (WebAssembly System Interface). Μεταξύ άλλων, παρέχεται μια σύνδεση VFS πάνω από το WASI, επιτρέποντάς σας να συσκευάσετε ολόκληρη την εφαρμογή Ruby σε μια αναπαράσταση με τη μορφή ενός μόνο αρχείου wasm. Η εκτέλεση σε ένα πρόγραμμα περιήγησης μπορεί να χρησιμοποιηθεί για τη δημιουργία εκπαιδευτικών και επιδεικτικών υπηρεσιών ιστού, όπως το TryRuby. Στο τρέχον στάδιο ανάπτυξης, η θύρα περνάει με επιτυχία τις βασικές και τις σουίτες δοκιμών bootstrap, οι οποίες δεν χρησιμοποιούν το Thread API. Η θύρα επίσης δεν υποστηρίζει οπτικές ίνες, εξαιρέσεις και συλλογή απορριμμάτων.
  • Ο μεταγλωττιστής JIT σε εξέλιξη YJIT, που δημιουργήθηκε από τους προγραμματιστές της πλατφόρμας ηλεκτρονικού εμπορίου Shopify ως μέρος μιας πρωτοβουλίας για τη βελτίωση της απόδοσης των προγραμμάτων Ruby χρησιμοποιώντας το πλαίσιο Rails και την κλήση πολλών μεθόδων, έχει ανακοινωθεί ως σταθερός και έτοιμος για χρήση στην παραγωγή. Η βασική διαφορά από τον προηγουμένως χρησιμοποιούμενο μεταγλωττιστή MJIT JIT, ο οποίος βασίζεται στην επεξεργασία ολόκληρων μεθόδων και χρησιμοποιεί έναν εξωτερικό μεταγλωττιστή C, είναι ότι το YJIT χρησιμοποιεί Lazy Basic Block Versioning (LBBV) και περιέχει έναν ενσωματωμένο μεταγλωττιστή JIT. Χάρη στο LBBV, το JIT αρχικά μεταγλωττίζει μόνο την αρχή μιας μεθόδου και μεταγλωττίζει τα υπόλοιπα αργότερα, αφού καθοριστούν οι τύποι των μεταβλητών και των ορισμάτων που χρησιμοποιούνται κατά την εκτέλεση. Το YJIT είναι διαθέσιμο για τις αρχιτεκτονικές x86-64 και arm64/aarch64. Linux, MacOS, BSD και άλλες πλατφόρμες UNIX.

    Σε αντίθεση με το CRuby, ο κώδικας YJIT είναι γραμμένος σε Rust και απαιτεί τον μεταγλωττιστή rustc 1.58.0+ για τη μεταγλώττιση, επομένως η δημιουργία του YJIT είναι απενεργοποιημένη από προεπιλογή και είναι προαιρετική. Χρησιμοποιώντας το YJIT, καταγράφηκε αύξηση απόδοσης 41% κατά την εκτέλεση της δοκιμής yjit-bench σε σύγκριση με τη χρήση της ερμηνείας.

    Κυκλοφορία της γλώσσας προγραμματισμού Ruby 3.2
  • Προστέθηκε πρόσθετη προστασία από επιθέσεις που προκαλούν άρνηση υπηρεσίας κατά την επεξεργασία εξωτερικών δεδομένων σε αναποτελεσματικές και μακροχρόνιες κανονικές εκφράσεις (ReDoS). Ο αλγόριθμος αντιστοίχισης, ο οποίος χρησιμοποιεί την τεχνική απομνημόνευσης, έχει βελτιωθεί σημαντικά. Για παράδειγμα, ο χρόνος εκτέλεσης της έκφρασης '/^a*b?a*$/ =~ "a" * 50000 + "x"' έχει μειωθεί από 10 σε 0.003 δευτερόλεπτα. Το κόστος της βελτιστοποίησης είναι η αύξηση της κατανάλωσης μνήμης, η κατανάλωση της οποίας είναι περίπου 10 φορές υψηλότερη από το μέγεθος των δεδομένων εισόδου. Το δεύτερο μέτρο προστασίας είναι η δυνατότητα ορισμού ενός χρονικού ορίου (για παράδειγμα, "Regexp.timeout = 1.0"), κατά το οποίο πρέπει να γίνει επεξεργασία της κανονικής έκφρασης.
  • Η λειτουργία syntax_suggest περιλαμβάνεται για να βοηθήσει στη διάγνωση των αιτιών των σφαλμάτων που σχετίζονται με μια δήλωση κλεισίματος "end" που λείπει ή είναι επιπλέον. Μη αντιστοιχισμένο `end', λέξη-κλειδί που λείπει (`do', `def`, `if`, κ.λπ.) ; 1 κλάση Dog > 2 defbark > 3 end 4 end
  • Η δυνατότητα σήμανσης ορισμάτων για σφάλματα που σχετίζονται με τύπους και ορίσματα έχει προστεθεί στη λειτουργία εμφάνισης θέσης σφάλματος, για παράδειγμα: test.rb:2:in `+': το nil δεν μπορεί να μετατραπεί σε ακέραιο (TypeError) sum = ary[0] + ary[1] ^^^^^^
  • Προστέθηκε νέα σύνταξη για την προώθηση συνόλων ορισμάτων σε άλλες μεθόδους: def foo(*) bar(*) end def baz(**) quux(**) end
  • Το ruby_vm/mjit/compiler είναι μια παραλλαγή του παλιού μεταγλωττιστή MJIT JIT, ξαναγραμμένη σε Ruby. Διασφαλίζει ότι το MJIT εκτελείται σε ξεχωριστή διεργασία, αντί να εκτελείται στο νήμα εργασίας MJIT.
  • Το Bundler 2.4 χρησιμοποιεί τον ελεγκτή έκδοσης PubGrub κατά τον χειρισμό εξαρτήσεων, ο οποίος χρησιμοποιείται επίσης από τον διαχειριστή πακέτων pub για τη γλώσσα Dart. Ο προηγουμένως χρησιμοποιούμενος αλγόριθμος Molinillo συνεχίζει να χρησιμοποιείται από το RubyGems, αλλά θα αντικατασταθεί και από το PubGrub στο μέλλον.
  • Ενημερωμένες εκδόσεις των ενσωματωμένων μονάδων πολύτιμων λίθων και εκείνων που περιλαμβάνονται στην τυπική βιβλιοθήκη.

Πηγή: opennet.ru

Αγοράστε αξιόπιστη φιλοξενία για ιστότοπους με προστασία DDoS, διακομιστές VPS VDS 🔥 Αγοράστε αξιόπιστη φιλοξενία ιστοσελίδων με προστασία DDoS, διακομιστές VPS VDS | ProHoster