Te tukunga o te reo hotaka Ruby 2.7.0

I muri i te tau o te whanaketanga whakaputaina tuku Ruby 2.7.0, he reo whakahiato-a-ahanoa hihiri e tino pai ana ki te whakawhanake i te kaupapa me te whakauru i nga ahuatanga pai o Perl, Java, Python, Smalltalk, Eiffel, Ada me Lisp. Ka tohatohahia te waehere kaupapa i raro i nga raihana BSD ("2-rara BSDL") me "Ruby", e tohu ana ki te putanga hou o te raihana GPL me te tino hototahi ki te GPLv3. Ko Ruby 2.7 te tuawhitu o te tukunga nui ka puta hei waahanga o te kaupapa whanaketanga kua whakamaheretia e uru ana ki te wehe i te tau mo te whakapai ake i nga ahuatanga me te tuku papaki 2-3 marama.

Main whakapainga:

  • whakamātau tautoko taurite tauira (Tauira tauira) ki te huri i runga i te ahanoa kua hoatu me te tautapa i tetahi uara mena he taurite tauira.

    take [0, [1, 2, 3]] i [a, [b, *c]] pa # => 0
    pb # => 1
    pc # => [2, 3] mutunga

    take {a: 0, b: 1}
    i roto i{a:0,x:1}
    :kare e taea te toro atu
    i roto i te {a: 0, b: var}
    p var # => 1
    mutunga

  • Ko te anga o nga tatauranga tauwhitiwhiti irb (REPL, Read-Eval-Print-Loop) inaianei ka taea te whakatika raina-maha, ka whakatinanahia ma te whakamahi i te whare pukapuka hototahi-raina panui. reinatuhia ki Ruby. Kua whakauruhia te tautoko mo te rdoc, e taea ai te maataki korero tohutoro mo nga karaehe kua tohua, nga waahanga me nga tikanga i roto i te irb. Ko te miramira tae o nga raina me te tohu e whakaatuhia ana ma te Binding#irb me nga hua o te tirotiro i nga taonga o te karaehe turanga.

    Te tukunga o te reo hotaka Ruby 2.7.0

  • I taapirihia he kaikohi paru kiato (Compaction GC) ka taea te whakakore i tetahi rohe o te mahara, te whakaoti rapanga o te puhoi o te mahi me te piki ake o te kai mahara na te wehenga mahara ka puta i te wa e mahi ana etahi tono Ruby miro maha. Ki te kohikohi taonga ki runga i te puranga kua whakaarohia Tikanga GC.compact hei whakaiti i te maha o nga wharangi mahara i whakamahia me te arotau i te puranga mo nga mahi
    CoW (tārua-tuhi-tuhi).

  • I mahia e whakareri ana ki te wehe i nga tautohetohe i runga i te tuunga rarangi (“def foo(a,b,c)”) me nga kupu matua (“def foo(key: val)”). Ko te hurihanga tohenga aunoa i runga i nga kupumatua me te tuunga kua whakakorehia, kaore e tautokohia i te peka Ruby 3.0. Inaa, kua whakakorea te whakamahi i te tohenga whakamutunga hei tawhā kupu matua, ka tukuna nga tohenga-a-matua hei tawhā hash whakamutunga, me te wehe i te tohenga whakamutunga ki nga tawhā tūnga me te kupu matua.

    def foo(kī: 42); mutunga; foo({key: 42}) #whakatupato
    def foo(**kw); mutunga; foo({key: 42}) #whakatupato
    def foo(kī: 42); mutunga; foo(**{key: 42}) # ĀE
    def foo(**kw); mutunga; foo(**{key: 42}) # ĀE

    def foo(h, **kw); mutunga; foo(key: 42) #whakatupato
    def foo(h, kī: 42); mutunga; foo(key: 42) # whakatupato
    def foo(h, **kw); mutunga; foo({key: 42}) # ĀE
    def foo(h, kī: 42); mutunga; foo({key: 42}) # ĀE

    def foo(h={}, kī: 42); mutunga; foo("key" => 43, kī: 42) #warned
    def foo(h={}, kī: 42); mutunga; foo({"key" => 43, kī: 42}) # whakatupato
    def foo(h={}, kī: 42); mutunga; foo({"key" => 43}, kī: 42) # OK

    def foo(kōwhiri={}); mutunga; foo( kī: 42 ) # ĀE

    def foo(h, **nil); mutunga; foo(kī: 1) # Hapa Tohenga
    def foo(h, **nil); mutunga; foo(**{key: 1}) # Hapa Tohenga
    def foo(h, **nil); mutunga; foo("str" ​​=> 1) # Hapa Tohenga
    def foo(h, **nil); mutunga; foo({key: 1}) # OK
    def foo(h, **nil); mutunga; foo({"str" ​​=> 1}) # OK

    h = {}; def foo(*a) mutunga; foo(**h) # [] h = {}; def foo(a) mutunga; foo(**h) # {} me te whakatupato
    h = {}; def foo(*a) mutunga; foo(h) # [{}] h = {}; def foo(a) mutunga; foo(h) # {}

  • faingamālie te whakamahi i nga ingoa taurangi taunoa tau mo nga tawhā poraka.

    [1, 2, 3].ia { ka hoatu @1 } # rite [1, 2, 3].ia { |i| hoatu i }

  • Tautoko whakamatautau mo nga awhe kaore he uara tuatahi.

    ary[..3] # rite tonu ki te ary[0..3] rel.where(hoko: ..100)

  • Kua taapirihia te tikanga Enumerable#tally, e tatau ana e hia nga wa ka puta ia huānga.

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

  • Whakaaetia ki te karanga i tetahi tikanga motuhake me te kupu "whaiaro"

    deffoo
    mutunga
    tūmataiti :foo
    whaiaro.foo

  • Kaitautoko kua tapirihia::Ko te tikanga mangere#hiahia ki te whakaputa i nga tatauranga mai i te rarangi mangere (Enumerator::Lazy).

    a = %w(foo bar baz)
    e = a.mangere.mapi {|x| x.upcase }.map {|x| x + "!" }. hiahia
    p e.class # => Kaitautoko
    e.mapi {|x| x + "?" } # => [“FOO!?”, “BAR!?”, “BAZ!?”]

  • Kei te haere tonu te whakawhanaketanga o te whakahiato JIT whakamatautau, ka tino pai ake te mahi o nga tono i roto i te reo Ruby. Ko te Kaihanga JIT i whakaarohia i Ruby ka tuhi tuatahi i te waehere C ki te kopae, katahi ka karangahia he kaikoipi C o waho ki te whakaputa tohutohu miihini (GCC, Clang me Microsoft VC ++ e tautokohia ana). Ko te putanga hou e whakatinana ana i tetahi tikanga mo te tuku-a-roto mena e tika ana, ma te whiriwhiri i nga tikanga arotautanga i te wa e whakahiato ana, ka piki te uara taunoa o "--jit-min-calls" mai i te 5 ki te 10000, me te "--jit-max-cache" mai i te 1000 ki te 100 .
  • He pai ake te mahi a CGI.escapeHTML, Aroturuki me MonitorMixin.
  • Kōwae#ingoa, true.to_s, false.to_s, and nil.to_s ka whakarite kia whakahokia mai he aho karekau i huri mo te ahanoa kua tohua.
  • Kua whakaitihia te rahi o nga konae rua i hangaia e te RubyVM::InstructionSequence#to_binary;
  • Ko nga putanga kua whakahouhia o nga waahanga whakauru, tae atu ki
    Paihere 2.1.2, RubyGems 3.1.2,
    Racc 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    Matawai Aho 1.0.3;

  • Kua nukuhia nga whare pukapuka mai i te kete turanga ki nga kohinga kohatu o waho
    CMath (kohatu cmath),
    Scanf (kohatu scanf),
    Anga (he anga kohatu),
    Tukutahi (kohatu tukutahi),
    ThreadsWait (te kohatu thwait),
    E2MM (kohatu e2mmap).

  • Ko nga waahanga stdlib taunoa ka whakaputaina i runga rubygems.org:
    tohu tohu,
    cgi,
    kaikawe,
    kia roa,
    pop kupenga,
    smtp kupenga,
    tuwhera3,
    toa,
    takakau. Aroturuki nga waahanga kaore i nekehia ki rubygems.org
    kaitirotiro,
    wā mutunga,
    kaiwhaiwhai,
    uri,
    yaml, ka tukuna me te rupi-matua anake.

  • Ko te hanga Ruby inaianei e hiahia ana ki te whakahiato C hei tautoko i te paerewa C99.

Source: opennet.ru

Tāpiri i te kōrero