Tso tawm Ruby programming lus 2.7.0

Tom qab ib xyoos ntawm kev loj hlob luam tawm tso tawm Ruby 2.7.0, ib hom lus hais txog kev ua haujlwm zoo uas muaj txiaj ntsig zoo hauv kev txhim kho cov haujlwm thiab suav nrog cov yam ntxwv zoo tshaj plaws ntawm Perl, Java, Python, Smalltalk, Eiffel, Ada thiab Lisp. Txoj haujlwm code tau muab faib raws li BSD ("2-clause BSDL") thiab "Ruby" cov ntawv tso cai, uas yog hais txog qhov tseeb version ntawm GPL daim ntawv tso cai thiab tau ua tiav nrog GPLv3. Ruby 2.7 yog qhov thib xya loj tshaj tawm los ua ib feem ntawm cov txheej txheem kev tsim kho uas suav nrog kev teeb tsa ib xyoos rau kev txhim kho feature thiab 2-3 lub hlis tso tawm.

ntsiab kev txhim kho:

  • kev sim yug qauv matching (Txawv sib piv) txhawm rau iterate dua cov khoom muab thiab muab tus nqi yog tias muaj cov qauv sib tw.

    case [0, [1, 2, 3]] hauv [a, [b, *c]] pa #=> 0
    pb #=> 1
    pc #=> [2, 3] ua

    case {a:0,b:1}
    ua 0,x:1.
    : unreachable
    hauv {a: 0, b: var}
    p var #=> 1
    kawg

  • Lub plhaub ntawm kev sib tham sib xam irb (REPL, Nyeem-Eval-Print-Loop) tam sim no muaj peev xwm ntawm kev kho ntau kab, siv los siv lub tsev qiv ntawv nyeem-tshaj kabsau rau hauv Ruby. Kev them nyiaj yug rau rdoc tau koom ua ke, uas tso cai rau saib cov ntaub ntawv siv ntawm cov chav kawm, cov qauv thiab cov txheej txheem hauv irb. Xim qhov tseem ceeb ntawm cov kab nrog cov lej qhia los ntawm Binding #irb thiab cov txiaj ntsig ntawm kev tshuaj xyuas cov khoom hauv chav kawm yog muab.

    Tso tawm Ruby programming lus 2.7.0

  • Ntxiv cov khoom khib nyiab compact (Compaction GC) uas tuaj yeem defragment thaj tsam ntawm lub cim xeeb, daws cov teeb meem ntawm kev ua haujlwm qeeb thiab kev siv lub cim xeeb ntau ntxiv vim lub cim xeeb tawg uas tshwm sim thaum lub sijhawm ua haujlwm ntawm qee cov xov tooj Ruby. Txhawm rau ntim cov khoom ntawm lub heap npaj GC.compact txoj kev los txo cov naj npawb ntawm cov nplooj ntawv nco siv thiab ua kom zoo dua cov heap rau kev ua haujlwm
    CoW (copy-on-write).

  • Ua tiav npaj cais cov lus sib cav raws li txoj haujlwm hauv daim ntawv teev npe ("def foo(a,b,c)") thiab cov ntsiab lus ("def foo(key: val)"). Tsis siv neeg sib cav hloov dua siab tshiab raws li cov lus tseem ceeb thiab txoj hauj lwm tau raug deprecated thiab yuav tsis tau txais kev txhawb nqa hauv Ruby 3.0 ceg. Tshwj xeeb, nws tau raug txwv tsis pub siv cov lus sib cav zaum kawg raws li cov ntsiab lus tseem ceeb, kom dhau cov lus sib cav raws li qhov kawg hash parameter, thiab faib cov lus sib cav kawg rau hauv qhov chaw thiab cov ntsiab lus tseem ceeb.

    def foo(key: 42); kawg; foo({key: 42}) #warned
    def foo(**kw); kawg; foo({key: 42}) #warned
    def foo(key: 42); kawg; foo(**{key: 42}) # OK
    def foo(**kw); kawg; foo(**{key: 42}) # OK

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

    def foo(h={}, key: 42); kawg; foo("key" => 43, key: 42) #warned
    def foo(h={}, key: 42); kawg; foo({"key" => 43, key: 42}) # ceeb toom
    def foo(h={}, key: 42); kawg; foo({"key" => 43}, key: 42) # OK

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

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

    h = {}; def foo(*a) kawg; foo(**h) # [] h = {}; def foo(a) kawg; foo(**h) # {} thiab ceeb toom
    h = {}; def foo(*a) kawg; foo(h) # [{}] h = {}; def foo(a) kawg; foo(h) # {}

  • Sijhawm siv cov naj npawb ntawm cov npe hloov pauv hloov pauv rau cov kev txwv tsis pub dhau.

    [1, 2, 3].each { puts @1 } # like [1, 2, 3].each { |i| tso i }

  • Kev sim txhawb nqa rau ntau yam uas tsis muaj nqi pib.

    ary[..3] # tib yam li ary[0..3] rel.where(muag: ..100)

  • Ntxiv cov Enumerable #tally method, uas suav pes tsawg zaus txhua lub caij tshwm sim.

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

  • Kev hu xov tooj ntiag tug tso cai nrog "tus kheej" literal

    defhoo
    kawg
    private: foos
    self.foo

  • Added Enumerator::Lazy#eager method to generate regular enumeration from tub nkeeg (Enumerator::Lazy) enumeration.

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

  • Kev txhim kho ntawm kev sim JIT compiler tau txuas ntxiv mus, uas tuaj yeem txhim kho kev ua tau zoo ntawm kev siv hauv cov lus Ruby. Lub JIT compiler tau npaj rau hauv Ruby thawj zaug sau C code rau disk, tom qab ntawd nws hu rau sab nraud C compiler los tsim cov lus qhia tshuab (GCC, Clang thiab Microsoft VC ++ tau txais kev txhawb nqa). Tus tshiab version siv ib txoj kev rau inline xa mus yog tias tsim nyog, xaiv daim ntawv thov ntawm optimization hom thaum muab tso ua ke, lub neej ntawd tus nqi ntawm "--jit-min-hu" yog nce los ntawm 5 mus rau 10000, thiab "--jit-max-cache" los ntawm 1000 mus rau 100.
  • Txhim kho kev ua tau zoo ntawm CGI.escapeHTML, Saib xyuas thiab MonitorMixin.
  • Module #name, true.to_s, false.to_s, thiab nil.to_s xyuas kom meej tias ib txoj hlua rov qab uas tsis hloov pauv rau cov khoom teev tseg.
  • Qhov loj ntawm cov ntaub ntawv binary tsim los ntawm RubyVM::InstructionSequence#to_binary txoj kev tau raug txo;
  • Hloov tshiab versions ntawm built-in Cheebtsam, suav nrog
    Bundler 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;

  • Cov tsev qiv ntawv tau txav los ntawm lub hauv paus faib mus rau cov pob khoom sab nraud
    CMath (lub pov haum cmath),
    Scanf (scanf lub pov haum),
    Plhaub (plhaub lub pov haum),
    Synchronizer (lub pov haum synchronization),
    ThreadWait (thwait gem),
    E2MM (e2mmap lub pov haum).

  • Lub default stdlib modules tau luam tawm ntawm rubygems.org:
    ntsuas ntsuas,
    cgi,
    tus sawv cev,
    getoptlong,
    net pop,
    net smtp,
    qhib 3,
    pstore,
    singleton. Saib xyuas modules tsis txav mus rau rubygems.org
    neeg soj ntsuam,
    ncua sijhawm,
    taug qab,
    koj,
    yaml, uas tsuas yog xa nrog ruby-core.

  • Lub Tsev Ruby tam sim no xav tau C compiler uas txhawb nqa C99 tus qauv.

Tau qhov twg los: opennet.ru

Ntxiv ib saib