Kuburitswa kweRuby programming mutauro 2.7.0

Mushure megore rebudiriro yakabudiswa kusunungura Ruby 2.7.0, mutauro une simba, wakatarisana nechinhu unoshanda zvakanyanya mukuvandudza chirongwa uye unobatanidza zvakanakisa zvePerl, Java, Python, Smalltalk, Eiffel, Ada, uye Lisp. Iyo kodhi yeprojekiti inogoverwa pasi peBSD ("2-clause BSDL") uye "Ruby" marezinesi, iyo inoreva vhezheni yazvino yerezinesi reGPL uye inoenderana zvizere neGPLv3. Ruby 2.7 ndiyo yechinomwe kuburitswa kukuru zvichitevera chirongwa chakarongwa chekusimudzira chinotora gore kugadzirira kuvandudzwa kwebasa uye kuburitsa kuburitswa kwekuchengetedza mwedzi 2-3 yega yega.

chikuru kuvandudzika:

  • experimental kutsigira kuenzanisa muenzaniso (Kuenzanisa muenzaniso), iyo inokutendera kuti udzokorore pamusoro pechinhu chakapihwa uye kupa kukosha kana paine machisi kune pateni.

    nyaya [0, [1, 2, 3]] mu [a, [b, *c]] pa #=> 0
    pb #=> 1
    pc #=> [2, 3] kupera

    nyaya {a: 0, b: 1}
    mu{a: 0, x: 1}
    :hazvipo
    mu{a: 0, b: var}
    p var #=> 1
    magumo

  • Iyo goko remaverengero ekuverenga irb (REPL, Read-Eval-Print-Loop) ikozvino ine mukana we-multi-line editing, inoshandiswa uchishandisa raibhurari yekuverenga-inoenderana. lineyakanyorwa muRuby. Tsigiro yerdoc yakabatanidzwa, iyo inobvumira kutarisa referenzi ruzivo pamakirasi akatsanangurwa, ma module uye nzira mu irb. Kuratidzira kwemavara kwemitsara ine kodhi inoratidzwa kuburikidza neBinding#irb uye mhedzisiro yekuongorora base base class zvinhu zvinopihwa.

    Kuburitswa kweRuby programming mutauro 2.7.0

  • Yakawedzera compact marara muunganidzi (Compaction GC) iyo inogona kukanganisa dunhu rendangariro, kugadzirisa matambudziko ekuita zvishoma nezvishoma uye kuwedzera ndangariro kushandiswa nekuda kwekuparadzaniswa kwendangariro kunoitika panguva yekushanda kwemamwe akawanda-akarukwa Ruby application. Kurongedza zvinhu pamurwi suggested GC.compact nzira, iyo inokutendera kuti uderedze huwandu hwemapeji endangariro anoshandiswa uye kukwidziridza murwi wekushanda
    CoW (copy-on-write).

  • Kuitwa kugadzirira kupatsanura nharo zvichienderana nenzvimbo yerondedzero ("def foo(a,b,c)") uye mazwi akakosha ("def foo(kiyi: val)"). Kushandura otomatiki kwegakava kunoenderana nemazwi akakosha uye chinzvimbo chakaregwa uye hachizotsigirwa mubazi reRuby 3.0. Kunyanya, yakasiya kushandisa iyo yekupedzisira nharo senge keyword paramita, ichipfuura keyword-based nharo seyekupedzisira hashi parameter, uye kupatsanura iyo yekupedzisira nharo kuita chinzvimbo uye keyword paramita.

    def foo(kiyi: 42); end; foo({kiyi: 42}) # yambiro
    def foo(**kw); end; foo({kiyi: 42}) # yambiro
    def foo(kiyi: 42); end; foo(**{kiyi: 42}) # OK
    def foo(**kw); end; foo(**{kiyi: 42}) # OK

    def foo(h, **kw); end; foo(kiyi: 42) # yambiro
    def foo(h, kiyi: 42); end; foo(kiyi: 42) # yambiro
    def foo(h, **kw); end; foo({kiyi: 42}) # OK
    def foo(h, kiyi: 42); end; foo({kiyi: 42}) # OK

    def foo(h={}, kiyi: 42); end; foo("kiyi" => 43, kiyi: 42) #warned
    def foo(h={}, kiyi: 42); end; foo({"kiyi" => 43, kiyi: 42}) # yambiro
    def foo(h={}, kiyi: 42); end; foo({"kiyi" => 43}, kiyi: 42) # OK

    def foo(opt={}); end; foo( kiyi: 42 ) # OK

    def foo(h, **nil); end; foo(kiyi: 1) #ArgumentError
    def foo(h, **nil); end; foo(**{kiyi: 1}) #KupokanaKukanganisa
    def foo(h, **nil); end; foo("str" ​​=> 1) #KupokanaKukanganisa
    def foo(h, **nil); end; foo({kiyi: 1}) # OK
    def foo(h, **nil); end; foo({"str" ​​=> 1}) # OK

    h = {}; def foo(*a) kuguma; foo(**h) # [] h = {}; def foo(a) kuguma; foo(**h) # {} uye yambiro
    h = {}; def foo(*a) kuguma; foo(h) # [{}] h = {}; def foo(a) kuguma; foo(h) # {}

  • Mukana uchishandisa mazita akaverengerwa default akasiyana e block paramita.

    [1, 2, 3].mumwe nemumwe { anoisa @1 } # zvakafanana ne [1, 2, 3].mumwe nemumwe { |i| anoisa i}

  • Rutsigiro rwekuedzwa kwemarenji asina kukosha kwekutanga.

    ary[..3] # zvakafanana neari[0..3] rel.where(sales: ..100)

  • Yakawedzerwa Enumerable#tally nzira, iyo inoverenga nhamba yenguva chimwe nechimwe chinhu chinoitika.

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

  • Inotenderwa kudaidza yakavanzika nzira ine chaiyo "self"

    deffoo
    magumo
    private :foo
    self.foo

  • Akawedzera Muverengi ::Simbe#Nzira yechido yekugadzira nhamba yenguva dzose kubva kumunhu ane usimbe (Muverengeri ::Simbe).

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

  • Kuvandudzwa kwekuedza JIT compiler kwaenderera mberi, iyo inogona kuvandudza zvakanyanya kushanda kwezvikumbiro mumutauro weRuby. Ruby's JIT compiler anotanga anyora C kodhi kudhisiki, obva afonera wekunze C compiler kuti agadzire mirairo yemuchina (inotsigira kufona GCC, Clang, uye Microsoft VC ++). Iyo vhezheni nyowani inoshandisa nzira yekuisa inline kana zvichidikanwa, yakasarudzika mashandisirwo ekugadzirisa modes panguva yekubatanidza inovimbiswa, iyo default kukosha kwe "-jit-min-call" inowedzerwa kubva pa5 kusvika 10000, uye "-jit-max- cache" kubva ku1000 kusvika ku100.
  • Kuvandudzwa kwekuita kweCGI.escapeHTML, Monitor uye MonitorMixin.
  • Module#zita, true.to_s, false.to_s, uye nil.to_s inovimbisa kuti tambo yadzoswa isina kuchinjika pachinhu chataurwa.
  • Saizi yemabhinari mafaira akagadzirwa neRubyVM::MurairoSequence#to_binary; nzira yadzikiswa.
  • Yakagadziridzwa shanduro yezvakavakirwa-mukati zvikamu, kusanganisira
    Bundler 2.1.2, RubyGems 3.1.2,
    Racc 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    StringScanner 1.0.3;

  • Maraibhurari akatama kubva pakugoverwa kwepasi kuenda kune ekunze gem package
    CMath (cmth gem),
    Scanf (scanf gem),
    Shell (shell gem)
    Synchronizer (sync gem),
    ThreadsWait (thwait gem),
    E2MM (e2mmap gem).

  • Iwo default stdlib modules anoburitswa pane rubygems.org:
    bhenji,
    cgi,
    nhume,
    getoptlong,
    net pop,
    net-smtp
    vhura3,
    chitoro,
    singleton. tarisa ma modules haana kutamiswa kune rubygems.org
    mucherechedzi,
    nguva yapera,
    tracer
    uri,
    yaml, iyo inongopihwa muruby-core.

  • Kuvaka Ruby ikozvino kunoda C compiler inotsigira C99 standard.

Source: opennet.ru

Voeg