Kutolewa kwa lugha ya programu ya Ruby 2.7.0

Baada ya mwaka wa maendeleo iliyochapishwa kutolewa Ruby 2.7.0, lugha ya programu inayolengwa na kitu ambayo ina ufanisi mkubwa katika uundaji wa programu na inajumuisha vipengele bora vya Perl, Java, Python, Smalltalk, Eiffel, Ada na Lisp. Msimbo wa mradi unasambazwa chini ya leseni za BSD ("2-clause BSDL") na "Ruby", ambayo inarejelea toleo jipya la leseni ya GPL na inaoana kikamilifu na GPLv3. Ruby 2.7 ni toleo kuu la saba kuzalishwa kama sehemu ya mchakato wa maendeleo uliopangwa unaojumuisha kutenga mwaka kwa ajili ya uboreshaji wa vipengele na toleo la kiraka la miezi 2-3.

kuu maboresho:

  • Majaribio kusaidia kulinganisha muundo (Kulinganisha muundo) kusisitiza juu ya kitu ulichopewa na kupeana thamani ikiwa kuna muundo unaolingana.

    kesi [0, [1, 2, 3]] katika [a, [b, *c]] pa #=> 0
    pb #=> 1
    pc #=> [2, 3] mwisho

    kesi {a: 0, b: 1}
    katika {a: 0, x: 1}
    : haipatikani
    katika {a: 0, b: var}
    p var #=> 1
    mwisho

  • Ganda la hesabu shirikishi irb (REPL, Read-Eval-Print-Loop) sasa ina uhariri wa mistari mingi, unaotekelezwa kwa kutumia maktaba inayooana na laini. mstari, iliyoandikwa kwa Ruby. Usaidizi wa rdoc umeunganishwa, hukuruhusu kutazama maelezo ya marejeleo kwenye madarasa maalum, moduli na mbinu katika irb. Hutoa uangaziaji wa rangi wa mistari ya msimbo iliyoonyeshwa kupitia Binding#irb na matokeo ya ukaguzi wa vitu vya darasa la msingi.

    Kutolewa kwa lugha ya programu ya Ruby 2.7.0

  • Imeongeza mkusanyiko wa takataka (Compaction GC) ambao unaweza kutenganisha eneo la kumbukumbu, kutatua masuala ya utendakazi na matumizi ya kumbukumbu yanayosababishwa na mgawanyiko wa kumbukumbu unaotokea katika baadhi ya programu za Ruby zenye nyuzi nyingi. Kupakia vitu kwenye lundo iliyopendekezwa Mbinu ya GC.compact ili kupunguza idadi ya kurasa za kumbukumbu zinazotumika na kuboresha lundo kwa ajili ya uendeshaji
    CoW (nakala-ya-kuandika).

  • Imetekelezwa kuandaa kutenganisha hoja kulingana na msimamo katika orodha ("def foo(a,b,c)") na maneno muhimu ("def foo(key: val)"). Ugeuzaji wa hoja otomatiki kulingana na manenomsingi na nafasi umeacha kutumika na hautaauniwa katika tawi la Ruby 3.0. Hasa, imeahirishwa kutumia hoja ya mwisho kama vigezo vya neno kuu, kupitisha hoja zenye msingi wa neno kuu kama kigezo cha mwisho cha heshi, na kugawanya hoja ya mwisho katika vigezo vya muda na vya neno kuu.

    def foo (ufunguo: 42); mwisho; foo({ufunguo: 42}) #imeonywa
    def foo(**kw); mwisho; foo({ufunguo: 42}) #imeonywa
    def foo (ufunguo: 42); mwisho; foo(**{ufunguo: 42}) # SAWA
    def foo(**kw); mwisho; foo(**{ufunguo: 42}) # SAWA

    def foo(h, **kw); mwisho; foo(ufunguo: 42) #imeonywa
    def foo(h, ufunguo: 42); mwisho; foo(ufunguo: 42) #imeonywa
    def foo(h, **kw); mwisho; foo({ufunguo: 42}) # SAWA
    def foo(h, ufunguo: 42); mwisho; foo({ufunguo: 42}) # SAWA

    def foo(h={}, ufunguo: 42); mwisho; foo("ufunguo" => 43, ufunguo: 42) #umeonywa
    def foo(h={}, ufunguo: 42); mwisho; foo({"ufunguo" => 43, ufunguo: 42}) # alionywa
    def foo(h={}, ufunguo: 42); mwisho; foo({"ufunguo" => 43}, ufunguo: 42) # SAWA

    def foo(opt={}); mwisho; foo( ufunguo: 42 ) # SAWA

    def foo(h, **nil); mwisho; foo(ufunguo: 1) # Hitilafu ya Hoja
    def foo(h, **nil); mwisho; foo(**{ufunguo: 1}) # Hitilafu ya Hoja
    def foo(h, **nil); mwisho; foo("str" ​​=> 1) # Hitilafu ya Hoja
    def foo(h, **nil); mwisho; foo({ufunguo: 1}) # SAWA
    def foo(h, **nil); mwisho; foo({"str" ​​=> 1}) # SAWA

    h = {}; def foo(*a) mwisho; foo(**h) # [] h = {}; def foo(a) mwisho; foo(**h) # {} na onyo
    h = {}; def foo(*a) mwisho; foo(h) # [{}] h = {}; def foo(a) mwisho; foo(h) # {}

  • Fursa kutumia majina ya chaguo-msingi yenye nambari kwa vigezo vya kuzuia.

    [1, 2, 3].kila { huweka @1 } # sawa na [1, 2, 3].kila { |i| anaweka i}

  • Usaidizi wa majaribio kwa masafa bila thamani ya awali.

    ary[..3] # sawa na ary[0..3] rel.where(mauzo: ..100)

  • Njia ya Kuhesabika#iliyohesabiwa, ambayo huhesabu mara ambazo kila kipengele hutokea.

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

  • Simu ya njia ya kibinafsi inaruhusiwa na "binafsi" halisi

    deffoo
    mwisho
    faragha :foo
    mwenyewe.mjinga

  • Aliongeza Hesabu::Mbinu ya mvivu#ya kuhesabia mara kwa mara kutoka kwa hesabu mvivu (Mwenye kuhesabu::Mvivu).

    a = %w(foo bar baz)
    e = a.lazy.ramani {|x| x.upcase }.ramani {|x| x + "!" }. hamu
    p e.darasa #=> Mhesabuji
    p e.ramani {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]

  • Utengenezaji wa mkusanyaji wa majaribio wa JIT umeendelea, ambao unaweza kuboresha kwa kiasi kikubwa utendakazi wa programu katika lugha ya Ruby. Mkusanyaji wa JIT wa Ruby huandika kwanza msimbo wa C kwenye diski, na kisha huita mkusanyaji wa C wa nje kutoa maagizo ya mashine (inasaidia kupiga simu kwa GCC, Clang, na Microsoft VC++). Toleo jipya hutekelezea mbinu ya utumaji wa ndani ikiwa ni lazima, matumizi ya kuchagua ya njia za uboreshaji wakati wa ujumuishaji yanahakikishwa, thamani chaguo-msingi ya "--jit-min-calls" inaongezwa kutoka 5 hadi 10000, na "--jit-max- cache" kutoka 1000 hadi 100.
  • Utendaji ulioboreshwa wa CGI.escapeHTML, Monitor na MonitorMixin.
  • Moduli#name, true.to_s, false.to_s, na nil.to_s huhakikisha kuwa mfuatano unarudishwa ambao haujabadilishwa kwa kitu kilichobainishwa.
  • Ukubwa wa faili jozi zinazozalishwa na mbinu ya RubyVM::InstructionSequence#to_binary imepunguzwa;
  • Matoleo yaliyosasishwa ya vipengele vilivyojengwa, ikiwa ni pamoja na
    Bundler 2.1.2, RubyGems 3.1.2,
    Mbio 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    StringScanner 1.0.3;

  • Maktaba zilihamishwa kutoka usambazaji msingi hadi vifurushi vya vito vya nje
    CMath (kito cha cmth),
    Scanf (scanf gem),
    Shell (shell gem)
    Kilandanishi (sawazisha vito),
    ThreadsWait (kito cha thwait),
    E2MM (kito cha e2mmap).

  • Moduli chaguo-msingi za stdlib zinachapishwa kwenye rubygems.org:
    alama,
    cgi,
    mjumbe,
    getoptlong,
    pop wavu,
    wavu smtp,
    wazi3,
    duka,
    singleton. moduli za kufuatilia hazijahamishwa kwa rubygems.org
    mwangalizi,
    muda umeisha,
    mfanyabiashara,
    URI,
    yaml, ambayo hutolewa tu katika ruby-core.

  • Kuunda Ruby sasa kunahitaji mkusanyiko wa C unaotumia kiwango cha C99.

Chanzo: opennet.ru

Kuongeza maoni