Lëshimi i gjuhës programuese Ruby 2.7.0

Pas një viti zhvillimi botuar lirimin Ruby 2.7.0, një gjuhë programimi dinamike e orientuar nga objekti që është shumë efikase në zhvillimin e programit dhe përfshin veçoritë më të mira të Perl, Java, Python, Smalltalk, Eiffel, Ada dhe Lisp. Kodi i projektit shpërndahet nën licencat BSD ("2-klauzolë BSDL") dhe "Ruby", i cili i referohet versionit më të fundit të licencës GPL dhe është plotësisht i pajtueshëm me GPLv3. Ruby 2.7 është lëshimi i shtatë i madh që do të prodhohet si pjesë e një procesi të planifikuar zhvillimi që përfshin caktimin e një viti për përmirësimet e veçorive dhe një lëshim patch 2-3 muajsh.

Kryesore përmirësime:

  • eksperimentale mbështetje përputhje modeli (Përputhja e modelit) për të përsëritur mbi objektin e dhënë dhe për të caktuar një vlerë nëse ka një përputhje modeli.

    rasti [0, [1, 2, 3]] në [a, [b, *c]] pa #=> 0
    pb #=> 1
    pc #=> [2, 3] fund

    rasti {a: 0, b: 1}
    në{a:0,x:1}
    :i paarritshëm
    në {a: 0, b: var}
    p var #=> 1
    fund

  • Predha e llogaritjeve interaktive irb (REPL, Read-Eval-Print-Loop) tani ka mundësinë e redaktimit me shumë rreshta, të zbatuar duke përdorur një bibliotekë të pajtueshme me linjën e leximit rreshtojshkruar në Ruby. Mbështetja për rdoc është integruar, e cila lejon shikimin e informacionit të referencës për klasat, modulet dhe metodat e specifikuara në irb. Sigurohet theksimi me ngjyra i linjave me kodin e treguar përmes Binding#irb dhe rezultatet e inspektimit të objekteve të klasës bazë.

    Lëshimi i gjuhës programuese Ruby 2.7.0

  • U shtua një kolektor kompakt mbeturinash (Compaction GC) që mund të kryejë defragmentimin e një zone të memories, duke zgjidhur problemet e performancës së ngadaltë dhe rritjes së konsumit të memories për shkak të fragmentimit të memories që ndodh gjatë funksionimit të disa aplikacioneve Ruby me shumë fije. Për të paketuar objekte në grumbull propozuar Metoda GC.compact për të reduktuar numrin e faqeve të kujtesës të përdorura dhe për të optimizuar grumbullin për operacione
    CoW (kopje-në-shkruaj).

  • E kryer përgatitja për të ndarë argumentet bazuar në pozicionin në listë ("def foo(a,b,c)") dhe fjalë kyçe ("def foo(kyç: val)"). Konvertimi automatik i argumentit bazuar në fjalë kyçe dhe pozicion është zhvlerësuar dhe nuk do të mbështetet në degën Ruby 3.0. Në veçanti, është shfuqizuar përdorimi i argumentit të fundit si parametra të fjalës kyçe, për të kaluar argumentet e bazuara në fjalë kyçe si parametri i fundit hash dhe për të ndarë argumentin e fundit në parametra pozicional dhe fjalë kyçe.

    def foo (çelësi: 42); fundi; foo({kyç: 42}) #paralajmëruar
    def foo(**kw); fundi; foo({kyç: 42}) #paralajmëruar
    def foo (çelësi: 42); fundi; foo(**{çelësi: 42}) # OK
    def foo(**kw); fundi; foo(**{çelësi: 42}) # OK

    def foo(h, **kw); fundi; foo(çelësi: 42) #paralajmëruar
    def foo(h, çelësi: 42); fundi; foo(çelësi: 42) #paralajmëruar
    def foo(h, **kw); fundi; foo({çelësi: 42}) # OK
    def foo(h, çelësi: 42); fundi; foo({çelësi: 42}) # OK

    def foo(h={}, çelësi: 42); fundi; foo("key" => 43, çelësi: 42) #paralajmëruar
    def foo(h={}, çelësi: 42); fundi; foo({"key" => 43, çelësi: 42}) # paralajmëruar
    def foo(h={}, çelësi: 42); fundi; foo({"key" => 43}, çelësi: 42) # OK

    def foo(opt={}); fundi; foo( çelësi: 42 ) # OK

    def foo(h, **nil); fundi; foo(çelësi: 1) # ArgumentError
    def foo(h, **nil); fundi; foo(**{çelësi: 1}) # ArgumentError
    def foo(h, **nil); fundi; foo("str"‎ => 1) #ArgumentError
    def foo(h, **nil); fundi; foo({çelësi: 1}) # OK
    def foo(h, **nil); fundi; foo({"str"‎ => 1}) # OK

    h = {}; def foo(*a) fund; foo(**h) # [] h = {}; def foo(a) fund; foo(**h) # {} dhe paralajmërim
    h = {}; def foo(*a) fund; foo(h) # [{}] h = {}; def foo(a) fund; foo(h) # {}

  • mundësi duke përdorur emra të numëruar të variablave të paracaktuar për parametrat e bllokut.

    [1, 2, 3].secili { vendos @1 } # si [1, 2, 3].secili { |i| vendos i }

  • Mbështetje eksperimentale për vargjet pa vlerë fillestare.

    ary[..3] # njëjtë si ary[0..3] rel.where(shitje: ..100)

  • U shtua metoda Numerable#tally, e cila numëron sa herë ndodh secili element.

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

  • Thirrja me metodë private lejohet me "vetë" fjalë për fjalë

    deffo
    fund
    private :foo
    vetë.foo

  • U shtua metodë Enumerator::Lazy#eager për të gjeneruar numërim të rregullt nga numërimi dembel (Enumerator::Lazy).

    a = %w(foo bar baz)
    e = a.dembel.hartë {|x| x.kase }.hartë {|x| x + "!" }.të etur
    p e.klasa #=> Regjistruesi
    e.harta {|x| x + "?" } #=> [“FOO!?”, “BAR!?”, “BAZ!?”]

  • Zhvillimi i një përpiluesi eksperimental JIT ka vazhduar, i cili mund të përmirësojë ndjeshëm performancën e aplikacioneve në gjuhën Ruby. Përpiluesi JIT i propozuar në Ruby fillimisht shkruan kodin C në disk, pas së cilës thërret një përpilues të jashtëm C për të gjeneruar udhëzime të makinës (mbështeten GCC, Clang dhe Microsoft VC ++). Versioni i ri zbaton një metodë për vendosjen inline nëse është e nevojshme, aplikim selektiv të mënyrave të optimizimit gjatë përpilimit, vlera e paracaktuar e "--jit-min-calls" rritet nga 5 në 10000 dhe "--jit-max-cache" nga 1000 në 100.
  • Performanca e përmirësuar e CGI.escapeHTML, Monitor dhe MonitorMixin.
  • Module#emri, true.to_s, false.to_s dhe nil.to_s sigurojnë që të kthehet një varg që është i pandryshuar për objektin e specifikuar.
  • Madhësia e skedarëve binare të krijuara nga metoda RubyVM::InstructionSequence#to_binary është zvogëluar;
  • Versionet e përditësuara të komponentëve të integruar, duke përfshirë
    Bundler 2.1.2, RubyGems 3.1.2,
    Racc 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    Skaneri i vargjeve 1.0.3;

  • Bibliotekat kaluan nga shpërndarja bazë në paketat e jashtme të gurëve të çmuar
    CMath (perlë cmath),
    Scanf (scanf perlë),
    Guaska (perlë guaska),
    Sinkronizuesi (perlë sinkronizuese),
    ThreadsPrisni (thwait perlë),
    E2MM (perlë e2mmap).

  • Modulet e paracaktuara stdlib publikohen në rubygems.org:
    pikë referimi,
    cgi,
    delegat,
    zgjatem,
    neto pop,
    net smtp,
    hapur3,
    pstore,
    beqare. Modulet e monitorit nuk janë zhvendosur te rubygems.org
    vëzhgues,
    timeout
    gjurmues,
    uri,
    yaml, të cilat dërgohen vetëm me bërthama rubin.

  • Ndërtimi i Ruby tani kërkon një përpilues C që mbështet standardin C99.

Burimi: opennet.ru

Shto një koment