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

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

Ο κύριος βελτιώσεις:

  • πειραματικός υποστήριξη αντιστοίχιση μοτίβων (Ταίριασμα μοτίβων), που σας επιτρέπουν να κάνετε επανάληψη σε ένα δεδομένο αντικείμενο και να εκχωρήσετε μια τιμή εάν υπάρχει αντιστοιχία στο μοτίβο.

    περίπτωση [0, [1, 2, 3]] σε [a, [b, *c]] pa #=> 0
    pb #=> 1
    pc #=> [2, 3] τέλος

    περίπτωση {a: 0, b: 1}
    σε{a:0,x:1}
    :απρόσιτος
    σε {a: 0, b: var}
    p var #=> 1
    τέλος

  • Το κέλυφος των διαδραστικών υπολογισμών irb (REPL, Read-Eval-Print-Loop) έχει πλέον τη δυνατότητα επεξεργασίας πολλαπλών γραμμών, που υλοποιείται με χρήση βιβλιοθήκης συμβατής με τη γραμμή ανάγνωσης ξαναφοδράρω, γραμμένο σε Ruby. Η υποστήριξη rdoc έχει ενσωματωθεί, επιτρέποντάς σας να προβάλλετε πληροφορίες αναφοράς για συγκεκριμένες κλάσεις, ενότητες και μεθόδους στο irb. Παρέχεται έγχρωμη επισήμανση γραμμών κώδικα που εμφανίζονται μέσω Binding#irb και τα αποτελέσματα της επιθεώρησης των αντικειμένων της βασικής κλάσης.

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

  • Προστέθηκε ένας συμπαγής συλλέκτης απορριμμάτων (Compaction GC) που μπορεί να ανασυγκροτήσει μια περιοχή της μνήμης, λύνοντας τα προβλήματα αργής απόδοσης και αυξημένης κατανάλωσης μνήμης λόγω κατακερματισμού μνήμης που συμβαίνει κατά τη λειτουργία ορισμένων εφαρμογών Ruby πολλαπλών νημάτων. Να συσκευάζω αντικείμενα στο σωρό προτείνεται Μέθοδος GC.compact για τη μείωση του αριθμού των σελίδων μνήμης που χρησιμοποιούνται και τη βελτιστοποίηση του σωρού για λειτουργίες
    CoW (αντιγραφή σε εγγραφή).

  • Διεξήχθη προετοιμασία για διαχωρισμό ορισμάτων με βάση τη θέση στη λίστα ("def foo(a,b,c)") και λέξεις-κλειδιά ("def foo(key: val)"). Η αυτόματη μετατροπή ορισμάτων με βάση τις λέξεις-κλειδιά και τη θέση έχει καταργηθεί και δεν θα υποστηρίζεται στον κλάδο Ruby 3.0. Συγκεκριμένα, έχει καταργηθεί η χρήση του τελευταίου ορίσματος ως παραμέτρων λέξης-κλειδιού, η μεταβίβαση ορισμάτων που βασίζονται σε λέξεις-κλειδιά ως η τελευταία παράμετρος κατακερματισμού και ο διαχωρισμός του τελευταίου ορίσματος σε παραμέτρους θέσης και λέξης-κλειδιού.

    def foo(key: 42); τέλος; foo({key: 42}) # warned
    def foo(**kw); τέλος; foo({key: 42}) #warned
    def foo(key: 42); τέλος; foo(**{key: 42}) # OK
    def foo(**kw); τέλος; foo(**{key: 42}) # OK

    def foo(h, **kw); τέλος; foo(key: 42) #warned
    def foo(h, κλειδί: 42); τέλος; foo(key: 42) #warned
    def foo(h, **kw); τέλος; foo({key: 42}) # ΟΚ
    def foo(h, κλειδί: 42); τέλος; foo({key: 42}) # ΟΚ

    def foo(h={}, κλειδί: 42); τέλος; foo("key" => 43, κλειδί: 42) # warned
    def foo(h={}, κλειδί: 42); τέλος; foo({"key" => 43, key: 42}) # warned
    def foo(h={}, κλειδί: 42); τέλος; foo({"key" => 43}, κλειδί: 42) # ΟΚ

    def foo(opt={}); τέλος; foo( κλειδί: 42 ) # ΟΚ

    def foo(h, **nil); τέλος; foo(key: 1) # ArgumentError
    def foo(h, **nil); τέλος; foo(**{key: 1}) # ArgumentError
    def foo(h, **nil); τέλος; foo("str"‎ => 1) # ArgumentError
    def foo(h, **nil); τέλος; foo({key: 1}) # ΟΚ
    def foo(h, **nil); τέλος; foo({"str"‎ => 1}) # ΟΚ

    h = {}; def foo(*a) end; foo(**h) # [] h = {}; def foo(a) τέλος? foo(**h) # {} και προειδοποίηση
    h = {}; def foo(*a) end; foo(h) # [{}] h = {}; def foo(a) τέλος? foo(h) # {}

  • Ευκαιρία χρησιμοποιώντας αριθμημένα ονόματα προεπιλεγμένων μεταβλητών για παραμέτρους μπλοκ.

    [1, 2, 3].κάθε { βάζει @1 } # ίδιο με το [1, 2, 3].κάθε { |i| βάζει εγώ }

  • Πειραματική υποστήριξη για εύρη χωρίς αρχική τιμή.

    ary[..3] # παρόμοια με ary[0..3] rel.where(πωλήσεις: ..100)

  • Προστέθηκε η μέθοδος Enumerable#tally, η οποία μετράει πόσες φορές εμφανίζεται κάθε στοιχείο.

    ["a", "b", "c", "b"].tally
    #=> {“a”=>1, “b”=>2, “c”=>1}

  • Επιτρέπεται η κλήση μιας ιδιωτικής μεθόδου με τον κυριολεκτικό "εαυτό"

    deffoo
    τέλος
    ιδιωτικό :foo
    αυτο.foo

  • Προστέθηκε η μέθοδος Enumerator::Lazy#eager για τη δημιουργία κανονικής απαρίθμησης από έναν τεμπέλικο απαριθμητή (Enumerator::Lazy).

    a = %w(foo bar baz)
    e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.πρόθυμος
    σ ε.κλάση #=> Απαριθμητής
    ε.χάρτης {|x| x + "?" } #=> [“FOO!?”, “BAR!?”, “BAZ!?”]

  • Η ανάπτυξη ενός πειραματικού μεταγλωττιστή JIT συνεχίστηκε, ο οποίος μπορεί να βελτιώσει σημαντικά την απόδοση των εφαρμογών στη γλώσσα Ruby. Ο μεταγλωττιστής JIT που προτείνεται στο Ruby γράφει πρώτα τον κώδικα C στο δίσκο, μετά τον οποίο καλεί έναν εξωτερικό μεταγλωττιστή C για να δημιουργήσει οδηγίες μηχανής (υποστηρίζονται GCC, Clang και Microsoft VC ++). Η νέα έκδοση εφαρμόζει μια μέθοδο για ενσωματωμένη ανάπτυξη εάν είναι απαραίτητο, επιλεκτική εφαρμογή τρόπων βελτιστοποίησης κατά τη μεταγλώττιση, η προεπιλεγμένη τιμή του "--jit-min-calls" αυξάνεται από 5 σε 10000 και "--jit-max-cache" από 1000 έως 100.
  • Βελτιωμένη απόδοση των CGI.escapeHTML, Monitor και MonitorMixin.
  • Τα Module#name, true.to_s, false.to_s και nil.to_s διασφαλίζουν ότι επιστρέφεται μια συμβολοσειρά που παραμένει αμετάβλητη για το καθορισμένο αντικείμενο.
  • Το μέγεθος των δυαδικών αρχείων που δημιουργούνται από τη μέθοδο RubyVM::InstructionSequence#to_binary έχει μειωθεί.
  • Ενημερωμένες εκδόσεις των ενσωματωμένων στοιχείων, συμπεριλαμβανομένων
    Bundler 2.1.2, RubyGems 3.1.2,
    Racc 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    Σαρωτής συμβολοσειρών 1.0.3;

  • Οι βιβλιοθήκες έχουν μετακινηθεί από το βασικό πακέτο σε εξωτερικά πακέτα πολύτιμων λίθων
    CMath (διαμάντι cmath),
    Scanf (scanf gem),
    Κέλυφος (κοτσάνι στολίδι),
    Συγχρονιστής (διαμάντι συγχρονισμού),
    ThreadsWait (thwait gem),
    E2MM (e2mmap gem).

  • Οι προεπιλεγμένες ενότητες stdlib δημοσιεύονται στο rubygems.org:
    σημείο αναφοράς,
    cgi,
    αντιπρόσωπος,
    πάτε μακριά,
    καθαρή ποπ,
    net-smtp
    ανοιχτό 3,
    pstore,
    μοναδικό χαρτί. Οι μονάδες παρακολούθησης δεν μετακινήθηκαν στο rubygems.org
    παρατηρητής,
    τέλος χρόνου
    ιχνηλάτης,
    uri,
    yaml, τα οποία παρέχονται μόνο σε ρουμπινί πυρήνα.

  • Το Building Ruby απαιτεί τώρα έναν μεταγλωττιστή C που υποστηρίζει το πρότυπο C99.

Πηγή: opennet.ru

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