Vrystelling van die Ruby-programmeertaal 2.7.0

Na 'n jaar van ontwikkeling gepubliseer vrylating Ruby 2.7.0, 'n dinamiese objekgeoriënteerde programmeertaal wat hoogs doeltreffend in programontwikkeling is en die beste kenmerke van Perl, Java, Python, Smalltalk, Eiffel, Ada en Lisp insluit. Die projekkode word onder die BSD ("2-klousule BSDL") en "Ruby"-lisensies versprei, wat verwys na die nuutste weergawe van die GPL-lisensie en ten volle versoenbaar is met GPLv3. Ruby 2.7 is die sewende groot vrystelling wat vervaardig word as deel van 'n beplande ontwikkelingsproses wat insluit dat 'n jaar opsy gesit word vir kenmerkverbeterings en 'n 2-3 maande pleistervrystelling.

Die belangrikste verbeterings:

  • eksperimentele ondersteun patroonpassing (Patroon wat ooreenstem) om oor die gegewe voorwerp te herhaal en 'n waarde toe te ken as daar 'n patroonpassing is.

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

    geval {a: 0, b: 1}
    in{a:0,x:1}
    : onbereikbaar
    in {a: 0, b: var}
    p var #=> 1
    einde

  • Die dop van interaktiewe berekeninge irb (REPL, Read-Eval-Print-Loop) het nou die moontlikheid van multi-lyn redigering, geïmplementeer met behulp van 'n leeslyn-versoenbare biblioteek herlyngeskryf in Ruby. Ondersteuning vir rdoc is geïntegreer, wat dit moontlik maak om verwysingsinligting oor gespesifiseerde klasse, modules en metodes in irb te sien. Gekleurde verligting van lyne met kode wat deur Binding#irb gewys word en resultate van die inspeksie van basisklasobjekte word verskaf.

    Vrystelling van die Ruby-programmeertaal 2.7.0

  • Bygevoeg 'n kompakte vullisverwyderaar (Compaction GC) wat 'n area van geheue kan defragmenteer, wat die probleme van stadige werkverrigting en verhoogde geheueverbruik oplos as gevolg van geheuefragmentasie wat plaasvind tydens die werking van sommige multi-threaded Ruby-toepassings. Om voorwerpe op die hoop te pak voorgestelde GC.compact-metode om die aantal geheuebladsye wat gebruik word te verminder en die hoop vir bedrywighede te optimaliseer
    CoW (kopieer-op-skryf).

  • Uitgevoer voorbereiding om argumente te skei gebaseer op posisie in die lys ("def foo(a,b,c)") en sleutelwoorde ("def foo(key: val)"). Outomatiese argumentomskakeling gebaseer op sleutelwoorde en posisie is afgekeur en sal nie in die Ruby 3.0-tak ondersteun word nie. Dit is veral verwerp om die laaste argument as sleutelwoordparameters te gebruik, om sleutelwoord-gebaseerde argumente as die laaste hash-parameter deur te gee, en om die laaste argument in posisionele en sleutelwoordparameters te verdeel.

    def foo (sleutel: 42); einde; foo({sleutel: 42}) #gewaarsku
    def foo(**kw); einde; foo({sleutel: 42}) #gewaarsku
    def foo (sleutel: 42); einde; foo(**{sleutel: 42}) # OK
    def foo(**kw); einde; foo(**{sleutel: 42}) # OK

    def foo(h, **kw); einde; foo(sleutel: 42) #gewaarsku
    def foo(h, toonsoort: 42); einde; foo(sleutel: 42) #gewaarsku
    def foo(h, **kw); einde; foo({sleutel: 42}) # OK
    def foo(h, toonsoort: 42); einde; foo({sleutel: 42}) # OK

    def foo(h={}, sleutel: 42); einde; foo("sleutel" => 43, sleutel: 42) #waarsku
    def foo(h={}, sleutel: 42); einde; foo({"key" => 43, sleutel: 42}) # gewaarsku
    def foo(h={}, sleutel: 42); einde; foo({"sleutel" => 43}, sleutel: 42) # OK

    def foo(opt={}); einde; foo (sleutel: 42) # OK

    def foo(h, **nul); einde; foo (sleutel: 1) # ArgumentFout
    def foo(h, **nul); einde; foo(**{sleutel: 1}) # ArgumentFout
    def foo(h, **nul); einde; foo("str"=> 1) # ArgumentFout
    def foo(h, **nul); einde; foo({sleutel: 1}) # OK
    def foo(h, **nul); einde; foo({"str"=> 1}) # OK

    h = {}; def foo(*a) einde; foo(**h) # [] h = {}; def foo(a) end; foo(**h) # {} en waarskuwing
    h = {}; def foo(*a) einde; foo(h) # [{}] h = {}; def foo(a) end; foo(h) # {}

  • Geleentheid met behulp van genommerde verstek veranderlike name vir blok parameters.

    [1, 2, 3].each { plaas @1 } # soos [1, 2, 3].each { |i| plaas ek}

  • Eksperimentele ondersteuning vir reekse met geen beginwaarde nie.

    ary[..3] # dieselfde as ary[0..3] rel.where(verkope: ..100)

  • Het die Enumerable#tally-metode bygevoeg, wat tel hoeveel keer elke element voorkom.

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

  • Privaat metode oproep toegelaat met "self" letterlik

    deffoo
    einde
    privaat :foo
    self.foo

  • Bygevoeg Enumerator::Lazy#eager metode om gereelde opsomming te genereer uit lui (Enumerator::Lazy) opsomming.

    a = %w(foo bar baz)
    e = a.lazy.map {|x| x.upcase }.kaart {|x| x + "!" }.gretig
    p e.klas #=> Enumerator
    e.kaart {|x| x + "?" } #=> [“FOO!?”, “BAR!?”, “BAZ!?”]

  • Die ontwikkeling van 'n eksperimentele JIT-samesteller het voortgegaan, wat die werkverrigting van toepassings in die Ruby-taal aansienlik kan verbeter. Die JIT-samesteller wat in Ruby voorgestel word, skryf eers C-kode na skyf, waarna dit 'n eksterne C-samesteller roep om masjieninstruksies te genereer (GCC, Clang en Microsoft VC ++ word ondersteun). Die nuwe weergawe implementeer 'n metode vir inlyn-ontplooiing indien nodig, selektiewe toepassing van optimeringsmodusse tydens samestelling, die verstekwaarde van "--jit-min-oproepe" word verhoog van 5 na 10000, en "--jit-max-cache" van 1000 tot 100.
  • Verbeterde werkverrigting van CGI.escapeHTML, Monitor en MonitorMixin.
  • Module#name, true.to_s, false.to_s, en nil.to_s verseker dat 'n string teruggestuur word wat onveranderd is vir die gespesifiseerde voorwerp.
  • Die grootte van binêre lêers wat deur die RubyVM::InstructionSequence#to_binary metode gegenereer word, is verminder;
  • Opgedateerde weergawes van ingeboude komponente, insluitend
    Bundler 2.1.2, RubyGems 3.1.2,
    Rek 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    String Skandeerder 1.0.3;

  • Biblioteke het van basisverspreiding na eksterne juweelpakkette geskuif
    CMath (cmath juweel),
    Scanf (scanf gem),
    Skulp (dop juweel),
    Sinchroniseerder (sinkroniseer juweel),
    ThreadsWait (thwait juweel),
    E2MM (e2mmmap juweel).

  • Die verstek stdlib-modules word op rubygems.org gepubliseer:
    maatstaf,
    cgi,
    afgevaardig,
    getoptlong,
    net pop,
    net smtp,
    oop 3,
    pstore,
    enkeling. Monitor modules wat nie na rubygems.org geskuif is nie
    waarnemer,
    time-out,
    spoorsnyer,
    uri,
    yaml, wat slegs met robynkern gestuur word.

  • Om Ruby te bou, benodig nou 'n C-samesteller wat die C99-standaard ondersteun.

Bron: opennet.ru

Voeg 'n opmerking