Ukukhishwa kolimi lohlelo lweRuby 2.7.0

Ngemva konyaka wentuthuko eshicilelwe ukukhululwa URuby 2.7.0, ulimi lokuhlela olugxile entweni oluguqukayo olusebenza kahle kakhulu ekuthuthukisweni kohlelo futhi oluhlanganisa izici ezingcono kakhulu ze-Perl, Java, Python, Smalltalk, Eiffel, Ada kanye ne-Lisp. Ikhodi yephrojekthi isatshalaliswa ngaphansi kwe-BSD ("2-clause BSDL") kanye namalayisense "Ruby", okusho inguqulo yakamuva yelayisensi ye-GPL futhi ehambisana ngokugcwele ne-GPLv3. I-Ruby 2.7 ingukukhululwa okukhulu kwesikhombisa okuzokhiqizwa njengengxenye yenqubo yokuthuthukiswa ehleliwe ehlanganisa ukubekela eceleni unyaka wezithuthukisi zesici kanye nokukhululwa kwesiqephu sezinyanga ezingu-2-3.

main ukuthuthukiswa:

  • okokuhlola ukwesekwa ukufanisa iphethini (Ukufanisa iphethini) ukuphindaphinda into enikeziwe futhi unikeze inani uma kukhona ukufana kwephethini.

    icala [0, [1, 2, 3]] ku- [a, [b, *c]] pa #=> 0
    pb #=> 1
    pc #=> [2, 3] isiphetho

    icala {a: 0, b: 1}
    ngo{a:0,x:1}
    :akutholakali
    kokuthi {a: 0, b: var}
    p var #=> 1
    ekupheleni

  • Igobolondo lezibalo ezisebenzisanayo i-irb (REPL, Read-Eval-Print-Loop) manje selinethuba lokuhlela imigqa eminingi, esetshenziswa kusetshenziswa umtapo wolwazi ohambisana ne-readline. umugqaebhalwe ngoRuby. Ukusekelwa kwe-rdoc kuhlanganisiwe, okuvumela ukubuka ulwazi lwereferensi kumakilasi acacisiwe, amamojula nezindlela ku-irb. Ukugqanyiswa okunemibala kwemigqa enekhodi ekhonjiswa nge-Binding#irb futhi kunikezwa imiphumela yokuhlola izinto zekilasi eliyisisekelo.

    Ukukhishwa kolimi lohlelo lweRuby 2.7.0

  • Kwengezwe umqoqi kadoti ohlangene (I-Compaction GC) engakwazi ukwenza ukuhlukaniswa kwesifunda senkumbulo, ixazulule izinkinga zokusebenza kancane kanye nokwanda kokusetshenziswa kwememori ngenxa yokuhlukana kwenkumbulo okwenzeka phakathi nokusebenza kwezinye izinhlelo zokusebenza ze-Ruby ezinezintambo eziningi. Ukupakisha izinto enqwabeni ehlongozwayo Indlela ye-GC.compact yokunciphisa inani lamakhasi ememori asetshenzisiwe futhi wandise inqwaba ukuze isebenze
    I-CoW (kopisha-ubhale).

  • Kwenziwe ulungiselela ukuhlukanisa izimpikiswano ngokusekelwe endaweni ohlwini ("def foo(a,b,c)") namagama angukhiye ("def foo(key: val)"). Ukuguqulwa kokungqubuzana okuzenzakalelayo okusekelwe kumagama angukhiye nendawo kuhoxisiwe futhi ngeke kusekelwe egatsheni le-Ruby 3.0. Ikakhulukazi, kuhoxisiwe ukusebenzisa i-agumenti yokugcina njengamapharamitha wegama elingukhiye, ukudlulisa izimpikiswano ezisekelwe egameni elingukhiye njengepharamitha yokugcina ye-hashi, nokuhlukanisa impikiswano yokugcina ibe imingcele yesimo kanye negama elingukhiye.

    def foo(ukhiye: 42); ukuphela; foo({ukhiye: 42}) #warned
    def foo(**kw); ukuphela; foo({ukhiye: 42}) #warned
    def foo(ukhiye: 42); ukuphela; foo(**{key: 42}) # KULUNGILE
    def foo(**kw); ukuphela; foo(**{key: 42}) # KULUNGILE

    def foo(h, **kw); ukuphela; foo(ukhiye: 42) #warned
    def foo(h, ukhiye: 42); ukuphela; foo(ukhiye: 42) #warned
    def foo(h, **kw); ukuphela; foo({ukhiye: 42}) # KULUNGILE
    def foo(h, ukhiye: 42); ukuphela; foo({ukhiye: 42}) # KULUNGILE

    def foo(h={}, ukhiye: 42); ukuphela; foo("ukhiye" => 43, ukhiye: 42) #warned
    def foo(h={}, ukhiye: 42); ukuphela; foo({"ukhiye" => 43, ukhiye: 42}) # uxwayiswe
    def foo(h={}, ukhiye: 42); ukuphela; foo({"ukhiye" => 43}, ukhiye: 42) # Kulungile

    def foo(opt={}); ukuphela; foo( ukhiye: 42 ) # KULUNGILE

    def foo(h, **nil); ukuphela; foo(ukhiye: 1) # Iphutha Lempikiswano
    def foo(h, **nil); ukuphela; foo(**{key: 1}) # Iphutha Lempikiswano
    def foo(h, **nil); ukuphela; foo("str" ​​=> 1) # Iphutha Lempikiswano
    def foo(h, **nil); ukuphela; foo({ukhiye: 1}) # KULUNGILE
    def foo(h, **nil); ukuphela; foo({"str" ​​=> 1}) # KULUNGILE

    h = {}; def foo(*a) ukuphela; foo(**h) # [] h = {}; def foo(a) ukuphela; foo(**h) # {} nesixwayiso
    h = {}; def foo(*a) ukuphela; foo(h) # [{}] h = {}; def foo(a) ukuphela; foo(h) # {}

  • Ithuba usebenzisa amagama aguquguqukayo anezinombolo amapharamitha webhulokhi.

    [1, 2, 3].ngayinye { ibeka @1 } # njengo-[1, 2, 3].ngakunye { |i| ibeka i}

  • Usekelo lokuhlola lobubanzi obungenalo inani lokuqala.

    ary[..3] # efanayo ne-ary[0..3] rel.where(sales: ..100)

  • Kwengezwe indlela yokubala #izibalo, ebala ukuthi i-elementi ngayinye yenzeka izikhathi ezingaki.

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

  • Ucingo lwendlela eyimfihlo luvunyelwe ngokuthi "uqobo lwakho" lwangempela

    deffoo
    ekupheleni
    imfihlo :foo
    self.foo

  • Kwengezwe Umbhali ::Indlela Evilaphayo#emagange ukwenza ukubala okujwayelekile kusuka ekubaleni okuvilaphayo (Okubala::Ivila).

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

  • Ukuthuthukiswa komhlanganisi we-JIT wokuhlola kuqhubekile, okungathuthukisa kakhulu ukusebenza kwezinhlelo zokusebenza ngolimi lwesiRuby. I-JIT compiler ehlongozwayo ku-Ruby ibhala kuqala ikhodi ye-C kudiski, ngemva kwalokho ibiza umhlanganisi wangaphandle we-C ukuze akhiqize imiyalelo yomshini (i-GCC, i-Clang ne-Microsoft VC ++ iyasekelwa). Inguqulo entsha isebenzisa indlela yokuthunyelwa okusemgqeni uma kunesidingo, ukusetshenziswa okukhethiwe kwamamodi okuthuthukisa ngesikhathi sokuhlanganiswa, inani elizenzakalelayo le-"-jit-min-calls" liyakhuphuka lisuka ku-5 liye ku-10000, kanye "--jit-max-cache" kusuka ku-1000 kuya ku-100.
  • Ukusebenza okuthuthukisiwe kwe-CGI.escapeHTML, Monitor and MonitorMixin.
  • I-module#name, true.to_s, false.to_s, kanye ne-nil.to_s iqinisekisa ukuthi uchungechunge luyabuyiselwa olungashintshiwe entweni eshiwo.
  • Usayizi wamafayela kanambambili akhiqizwe indlela ye-RubyVM::InstructionSequence#kuya_kanambambili yehlisiwe;
  • Izinguqulo ezibuyekeziwe zezingxenye ezakhelwe ngaphakathi, okuhlanganisa
    I-Bundler 2.1.2, RubyGems 3.1.2,
    Umjaho 1.4.15,
    I-CSV 3.1.2, REXML 3.2.3,
    I-RSS 0.2.8,
    Iskena sezintambo 1.0.3;

  • Amalabhulali asuke ekusabalaliseni okuyisisekelo aya kumaphakheji ayigugu angaphandle
    I-CMath (cmth gem),
    I-Scanf (scanf gem),
    Igobolondo (igobolondo eliyigugu),
    I-synchronizer (igugu lokuvumelanisa),
    I-ThreadsWait (igugu le-thwait),
    I-E2MM (igugu le-e2mmap).

  • Amamojula we-stdlib azenzakalelayo ashicilelwa ku-rubygems.org:
    uphawu lokulinganisa,
    cgi,
    isithunywa,
    getoptlong,
    i-net pop,
    net smtp,
    vula3,
    isitolo,
    i-singleton. Amamojula okuqapha awahanjiswanga ku-rubygems.org
    isibukeli,
    isikhathi siphelile,
    umkhondo,
    u-uri,
    yaml, ezithunyelwa kuphela nge-ruby-core.

  • Ukwakha iRuby manje kudinga i-C compiler esekela izinga le-C99.

Source: opennet.ru

Engeza amazwana