Dimittis de lingua programmandi Ruby 2.7.0

Post annum evolutionis published release ruby 2.7.0, dynamicum objectum programmandi programmandi linguam valde efficacem in progressione programmatis et incorporat optimas lineas Perl, Java, Python, Smalltalk, Eiffel, Adae et Lisp. In codice exertus distribuitur licentias sub BSD ("2-clause BSDL) et "Ruby", quod refertur ad ultimam versionem licentiae GPL et plene cum GPLv3 compatitur. Ruby 2.7 septima maior dimissio fieri debet ut pars progressionis evolutionis meditatae quae includit annum deposito pro pluma amplificationibus et emissio 2-3 mensis.

Main improvements:

  • Experimental auxilium forma matching (Exemplum matching) iterare super obiectum datum et valorem assignare si par sit forma.

    casum [0, [1, 2, 3]] in [a, [b, *c]] pa #=> 0
    pb #=> 1
    pc #=> [2, 3] end

    casus {a: 0, b: 1}
    in {a: 0, x: 1}
    : Impossibile
    in {a: 0, b: var}
    p var #=> 1
    finis

  • Testa calculi interactivi irb (REPL, Read-Eval-Print-Loop) nunc lineamenta multi-linea edendi, adhibita bibliotheca legendae compatibilis. lineascriptum in Ruby. Firmamentum rdoc integratum est, quod notitias in certas classes, modulos et modos in irb inspicere sinit. Colorata linearum elucidandarum cum codice monstrantur per Binding#irb et eventus ad inspiciendas res classium basin praebendas.

    Dimittis de lingua programmandi Ruby 2.7.0

  • Purgamentum pactionis collector addidit (Compaction GC) quod regionem memoriae debilitare potest, solvendo peractionem et memoriam consummationis quaestiones per memoriam ruptionis quae accidit in aliquibus applicationibus multi-filatis Ruby. Ad stipant obiecti in acervo propositus GC.compacta methodum reducere numerum paginarum memoriae adhibitis et optimize acervo ad res gerendas
    Vacca (exemplum-ex-scribo).

  • Elatus rationes separare parat positione in indice ("def foo(a,b,c)") et keywords ("def foo(clav: val)"). Argumentum automaticum conversio in keywords et positione deprecata est nec sustinebitur in Ruby 3.0 ramo. Peculiariter deprecatum est ut ultimo argumento parametros keywords utatur, argumenta subnixa ut ultimum modulum Nullam praeterire, et ultimum argumentum in parametris positionales et keywords dividere.

    def foo (key: 42); finem; foo({key: 42}) #monuit
    def foo(**kw); finem; foo({key: 42}) #monuit
    def foo (key: 42); finem; foo(**{key: 42}) # OK
    def foo(**kw); finem; foo(**{key: 42}) # OK

    def foo(h, **kw); finem; foo(key: 42) #monuit
    def foo(h, key: 42); finem; foo(key: 42) #monuit
    def foo(h, **kw); finem; foo({key: 42}) # OK
    def foo(h, key: 42); finem; foo({key: 42}) # OK

    def foo(h={}, key: 42); finem; foo ("key" => 43, key: 42) #monitum
    def foo(h={}, key: 42); finem; foo({"key" => 43, key: 42}) # admonuit
    def foo(h={}, key: 42); finem; foo({"key" => 43}, key: 42) # OK

    def foo(opt={}); finem; foo (key: 42 ) # OK

    def foo(h, **nil); finem; foo (key: I) #ArgumentError
    def foo(h, **nil); finem; foo(**{ key: 1}) # ArgumentError
    def foo(h, **nil); finem; foo("str" ​​=> 1) # ArgumentError
    def foo(h, **nil); finem; foo({clavem: 1}) # OK
    def foo(h, **nil); finem; foo({"str" ​​=> 1}) # OK

    h = {}; def foo (*a) finem; foo(**h) # [] h = {}; def foo(a) fine; foo(**h) # {} and monitum
    h = {}; def foo (*a) finem; foo(h) # [{}] h = {}; def foo(a) fine; foo(h) # {}

  • potestatem per default variabilis numeravit nomina ad parametri obstructionum.

    [1, 2, 3]. quisque { ponit @1} # simile [1, 2, 3]. quisque { |i| ponit i}

  • Auxilia experimentalis per iugis nullo valore initiali.

    ad disputationem [..3] # similis ary [0..3] rel.where(sales: ..100)

  • Methodum numerabilem # talliam additam, quae pluries singula elementa numerat.

    ["a", "b", "c", "b"]
    #=> {"a"=>1, "b"=>2, "c"=>1}

  • Liceat appellare methodum privatam cum litterali "sui";

    deffoo
    finis
    privatum: foo
    self.foo

  • Addidit Enumerator :: Piger # cupidus methodum generandi regularem enumerationem ab enumeratione pigri (Enumerator :: Piger).

    a = % w (foo bar detrahere)
    e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.eager
    p e.class #=> Enumerator
    p e.map {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]

  • Progressio experimentalis JIT compilatoris continuavit, quae signanter emendare potest applicationes in lingua Ruby. JIT compilator in Ruby propositus primus scribit C codicem ad disci, post quem C compilator externum vocat ad instructiones machinae generandas (GCC, Clang et Microsoft VC ++ sustentantur). Nova versio methodum inlineandi instruere, si opus sit, applicationem selectivam modorum optimizationis in compilatione, valor defectus "--jit-min-vocat" ab 5 ad 10000 augetur, et "--jit-max-cache". ab 1000 ad 100 .
  • Improved observantia of CGI.escapeHTML, Monitor et MonitorMixin.
  • OMNIBUS # name, true.to_s, false.to_s, et nil.to_s ut chorda reddatur immutata pro objecto determinato.
  • Magnitudo imaginum binariorum generata per RubyVM ::Instructio Sequentiae # in methodum binarium redacta est;
  • Renovata versiones constructa-in components, comprehendo
    Fasciculus 2.1.2, RubyGems 3.1.2;
    Racc 1.4.15;
    CSV 3.1.2, REXML 3.2.3;
    RSS 0.2.8,
    String Scanner 1.0.3;

  • Librarii e basi distributi ad fasciculos gemmae externae movebantur
    CMath (cmath gemma);
    Scanf (scanf gemma);
    Testa (gemma testa)
    Synchronizer (sync gemma);
    ThreadsWait (thwait gemma);
    E2MM (e2mmap gemma).

  • Defectus stdlib modulorum publici iuris fiunt in rubygems.org:
    Probatio,
    cgi,
    delegatus;
    getoptlong,
    rete-pop;
    rete-smtp
    open3,
    pstore;
    singleton. Monitor modulorum non movetur ad rubygems.org
    servator;
    timeout
    tractus,
    uri,
    yaml, quae tantum cum carbunculo uit.

  • Aedificium Ruby nunc requirit a C compilator qui vexillum C99 sustinet.

Source: opennet.ru