Kutulutsidwa kwa chilankhulo cha pulogalamu ya Ruby 2.7.0

Pambuyo pa chaka cha chitukuko losindikizidwa kumasula Ruby 2.7.0, chinenero chokhazikika chokhazikika pa chinthu chomwe chimagwira ntchito bwino pakupanga mapulogalamu ndipo chimaphatikizapo zinthu zabwino kwambiri za Perl, Java, Python, Smalltalk, Eiffel, Ada ndi Lisp. Khodi ya polojekitiyi imagawidwa pansi pa ziphaso za BSD ("2-clause BSDL") ndi "Ruby", zomwe zikutanthauza mtundu waposachedwa wa laisensi ya GPL ndipo imagwirizana kwathunthu ndi GPLv3. Ruby 2.7 ndiye kumasulidwa kwakukulu kwachisanu ndi chiwiri kuti kupangidwe ngati gawo lachitukuko chomwe chinakonzedweratu chomwe chimaphatikizapo kupatula chaka chimodzi kuti chiwonjezeke ndi kumasulidwa kwa mwezi wa 2-3.

waukulu kuwongolera:

  • Zoyeserera thandizo kufananiza mawonekedwe (Kufananiza ndi chitsanzo) kubwereza chinthu chomwe wapatsidwa ndikugawa mtengo ngati pali chofanana.

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

    nkhani {a: 0, b: 1}
    mu{a:0,x:1}
    :osafikika
    mu {a: 0, b: var}
    p ndi #=> 1
    TSIRIZA

  • The shell of interactive calculations irb (REPL, Read-Eval-Print-Loop) tsopano ili ndi kuthekera kosintha mizere yambiri, kukhazikitsidwa pogwiritsa ntchito laibulale yogwirizana ndi kuwerenga. mzereyolembedwa mu Ruby. Thandizo la rdoc laphatikizidwa, lomwe limalola kuti muwone zambiri zowunikira pamagulu otchulidwa, ma modules ndi njira mu irb. Kuwunikira kwamitundu ya mizere yokhala ndi ma code omwe amawonetsedwa kudzera mu Binding#irb ndipo zotsatira zowunika zinthu zoyambira zimaperekedwa.

    Kutulutsidwa kwa chilankhulo cha pulogalamu ya Ruby 2.7.0

  • Anawonjezera chojambulira zinyalala (Compaction GC) yomwe imatha kusokoneza chigawo cha kukumbukira, kuthana ndi zovuta zapang'onopang'ono ndikuwonjezera kukumbukira kukumbukira chifukwa cha kugawikana kwa kukumbukira komwe kumachitika panthawi yogwiritsira ntchito ma Ruby amitundu yambiri. Kunyamula zinthu pa mulu analimbikitsa Njira ya GC.compact yochepetsera kuchuluka kwa masamba okumbukira omwe amagwiritsidwa ntchito ndikukulitsa mulu wa ntchito
    CoW (koperani-lembani).

  • Zidachitidwa kukonzekera kulekanitsa mikangano potengera udindo pamndandanda ("def foo(a,b,c)") ndi mawu osakira ("def foo(key: val)"). Kutembenuza mikangano kutengera mawu osakira ndi malo kwatsitsidwa ndipo sikudzathandizidwa munthambi ya Ruby 3.0. Makamaka, zatsitsidwa kugwiritsa ntchito mkangano womaliza ngati magawo a mawu ofunika, kupititsa mfundo zozikidwa pa mawu osakira ngati gawo lomaliza la hashi, ndikugawa mkangano womaliza kukhala magawo okhazikika ndi mawu osakira.

    def foo (kiyi: 42); TSIRIZA; foo({kiyi: 42}) #warned
    def foo (**kw); TSIRIZA; foo({kiyi: 42}) #warned
    def foo (kiyi: 42); TSIRIZA; foo(**{kiyi: 42}) # CHABWINO
    def foo (**kw); TSIRIZA; foo(**{kiyi: 42}) # CHABWINO

    def foo(h, **kw); TSIRIZA; foo(kiyi: 42) #warned
    def foo(h, kiyi: 42); TSIRIZA; foo(kiyi: 42) #warned
    def foo(h, **kw); TSIRIZA; foo({kiyi: 42}) # CHABWINO
    def foo(h, kiyi: 42); TSIRIZA; foo({kiyi: 42}) # CHABWINO

    def foo(h={}, kiyi: 42); TSIRIZA; foo("key" => 43, key: 42) #warned
    def foo(h={}, kiyi: 42); TSIRIZA; foo({"kiyi" => 43, kiyi: 42}) # anachenjeza
    def foo(h={}, kiyi: 42); TSIRIZA; foo({"kiyi" => 43}, kiyi: 42) # OK

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

    def foo(h, **nil); TSIRIZA; foo(kiyi: 1) # Zolakwitsa Zotsutsana
    def foo(h, **nil); TSIRIZA; foo(**{key: 1}) # ArgumentError
    def foo(h, **nil); TSIRIZA; foo("str" ​​=> 1) # Zolakwika Zotsutsana
    def foo(h, **nil); TSIRIZA; foo({kiyi: 1}) # CHABWINO
    def foo(h, **nil); TSIRIZA; foo({"str" ​​=> 1}) # CHABWINO

    h = {}; def foo(*a) mapeto; foo(**h) # [] h = {}; def foo(a) mapeto; foo(**h) # {} ndi chenjezo
    h = {}; def foo(*a) mapeto; foo(h) # [{}] h = {}; def foo(a) mapeto; foo(h) # {}

  • Mwayi kugwiritsa ntchito manambala osinthika osinthika pamagawo a block.

    [1, 2, 3].aliyense { amaika @1 } # monga [1, 2, 3].aliyense { |i| amaika i}

  • Thandizo loyesera lamagulu opanda mtengo woyambira.

    ary[..3] # chimodzimodzi monga ary[0..3] rel.where(sales: ..100)

  • Anawonjezera njira yowerengeka #tally, yomwe imawerengera kangati chinthu chilichonse chimachitika.

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

  • Kuyimba kwachinsinsi komwe kumaloledwa ndi "self" yeniyeni

    deffoo
    TSIRIZA
    private :foo
    self.foo

  • Wowonjezera Wowonjezera ::Njira yaulesi#yofunitsitsa yopangira kuwerengera pafupipafupi kuchokera ku ulesi (Wowerengera::Waulesi).

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

  • Kupanga makina oyesera a JIT kwapitilirabe, zomwe zitha kupititsa patsogolo magwiridwe antchito muchilankhulo cha Ruby. Wopanga JIT wopangidwa mu Ruby amalemba kachidindo ka C ku diski, pambuyo pake amayitanitsa wopanga C wakunja kuti apange malangizo pamakina (GCC, Clang ndi Microsoft VC ++ amathandizidwa). Mtundu watsopanowu umagwiritsa ntchito njira yotumizira ma inline ngati kuli kofunikira, kugwiritsa ntchito njira zokometsera pakuphatikiza, mtengo wokhazikika wa "-jit-min-calls" umachulukitsidwa kuchoka pa 5 mpaka 10000, ndi "-jit-max-cache" kuyambira 1000 mpaka 100.
  • Kuchita bwino kwa CGI.escapeHTML, Monitor ndi MonitorMixin.
  • Module#name, true.to_s, false.to_s, ndi nil.to_s zimatsimikizira kuti chingwe chabwezedwa chomwe sichinasinthidwe pa chinthu chomwe chatchulidwa.
  • Kukula kwa mafayilo a binary opangidwa ndi RubyVM::InstructionSequence#to_binary njira yachepetsedwa;
  • Mabaibulo osinthidwa a zigawo zomangidwa, kuphatikizapo
    Bundler 2.1.2, RubyGems 3.1.2,
    Mpikisano 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    Chingwe Scanner 1.0.3;

  • Malaibulale adasuntha kuchoka pagawo loyambira kupita kuzinthu zamtengo wapatali zakunja
    CMath (cmth gem),
    Scanf (scanf gem),
    Chipolopolo (mwala wamtengo wapatali),
    Synchronizer (kulunzanitsa mwala),
    ThreadsWait (thwait gem),
    E2MM (e2mmap mwala wamtengo wapatali).

  • Ma module a stdlib amasindikizidwa pa rubygems.org:
    benchmark,
    cgi,
    nthumwi,
    getoptlong,
    net pop,
    net smtp,
    tsegulani3,
    sitolo,
    singleton. Monitor modules sanasunthidwe ku rubygems.org
    wowonera,
    lekeza panjira
    tracer
    uwu,
    yaml, zomwe zimangotumizidwa ndi ruby-core.

  • Kumanga Ruby tsopano kukufunika C compiler yomwe imathandizira mulingo wa C99.

Source: opennet.ru

Kuwonjezera ndemanga