Derxistina zimanê bernamenûsê Ruby 2.7.0

Piştî salek pêşveçûn weşandin berdan Ruby 2.7.0, zimanek bernamesaziya dînamîkî ya objekt-oriented ku di pêşkeftina bernameyê de pir bikêrhatî ye û taybetmendiyên çêtirîn ên Perl, Java, Python, Smalltalk, Eiffel, Ada û Lisp vedihewîne. Koda projeyê di bin lîsansa BSD ("2-bend BSDL") û "Ruby" de tê belav kirin, ku guhertoya herî dawî ya lîsansa GPL-ê vedibêje û bi GPLv3 re bi tevahî hevaheng e. Ruby 2.7 heftemîn serbestberdana sereke ye ku wekî beşek ji pêvajoyek pêşkeftina plansazkirî tête hilberandin ku tê de salek ji bo pêşkeftinên taybetmendiyê veqetandin û serbestberdana patchê ya 2-3 mehan tê hilberandin.

sereke serrastkirinî:

  • ceribandin alîkarî lihevhatina nimûne (Lihevhatina nimûne) ku li ser tiştê hatî dayîn dubare bike û heke lihevhatinek nimûne hebe nirxek destnîşan bike.

    doza [0, [1, 2, 3]] di [a, [b, *c]] pa #=> 0
    pb #=> 1
    pc #=> [2, 3] dawî

    doz {a: 0, b: 1}
    in{a:0,x:1}
    :negihiştin
    di {a: 0, b: var}
    p var #=> 1
    dawî

  • Berhema hesabên înteraktîf irb (REPL, Read-Eval-Print-Loop) naha xwedan îmkana guherandina pir-xêz e, ku bi karanîna pirtûkxaneyek xwendin-lihevhatî tête bicîh kirin. xetbi Ruby hatiye nivîsandin. Piştgiriya rdoc-ê yekgirtî ye, ku destûrê dide dîtina agahdariya referansê li ser çîn, modul û rêbazên diyarkirî di irb de. Zehfkirina rengîn a rêzan bi koda ku bi Binding#irb ve hatî destnîşan kirin û encamên vekolîna tiştên çîna bingehîn têne peyda kirin.

    Derxistina zimanê bernamenûsê Ruby 2.7.0

  • Berhevkarek çopê ya kompakt (Compaction GC) lê zêde kir ku dikare defragmentasyona herêmek bîranînê pêk bîne, pirsgirêkên performansa hêdî û zêde vexwarina bîranînê çareser bike ji ber perçebûna bîranînê ya ku di dema xebitandina hin sepanên Ruby-ya pir-têlan de pêk tê. Ji bo pakkirina tiştan li ser giravê pêşniyar kirin Rêbaza GC.compact ji bo kêmkirina hejmara rûpelên bîranînê yên ku têne bikar anîn kêm dike û kelûmê ji bo operasyonan xweşbîn dike
    CoW (kopî-li-nivîsandin).

  • Çîbecî bû amadekirina veqetandina argumanan li ser bingeha pozîsyona di navnîşê de ("def foo(a,b,c)") û peyvên sereke ("def foo(key: val)"). Veguheztina argumana otomatîkî ya ku li ser bingeha keywords û pozîsyonê ye hate paşguh kirin û dê di şaxê Ruby 3.0 de neyê piştgirî kirin. Bi taybetî, ew hate betal kirin ku argumana paşîn wekî pîvanên peyva sereke were bikar anîn, argumanên li ser bingeha bêjeyê wekî parametreya hashê ya paşîn derbas bibe, û argumana paşîn li pîvanên pozîsyonê û peyva sereke veqetîne.

    def foo(key: 42); dawî; foo({key: 42}) #hişyarî
    def foo(**kw); dawî; foo({key: 42}) #hişyarî
    def foo(key: 42); dawî; foo(**{key: 42}) # OK
    def foo(**kw); dawî; foo(**{key: 42}) # OK

    def foo(h, **kw); dawî; foo(key: 42) #hişyarî
    def foo(h, key: 42); dawî; foo(key: 42) #hişyarî
    def foo(h, **kw); dawî; foo({key: 42}) # OK
    def foo(h, key: 42); dawî; foo({key: 42}) # OK

    def foo(h={}, key: 42); dawî; foo("key" => 43, key: 42) #warned
    def foo(h={}, key: 42); dawî; foo({"key" => 43, key: 42}) # hişyar kir
    def foo(h={}, key: 42); dawî; foo({"key" => 43}, key: 42) # OK

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

    def foo(h, **nil); dawî; foo(key: 1) # ArgumentError
    def foo(h, **nil); dawî; foo(**{key: 1}) # ArgumentError
    def foo(h, **nil); dawî; foo("str"‎ => 1) # ArgumentError
    def foo(h, **nil); dawî; foo({key: 1}) # OK
    def foo(h, **nil); dawî; foo({"str"‎ => 1}) # OK

    h = {}; def foo(*a) end; foo(**h) # [] h = {}; def foo(a) end; foo(**h) # {} û hişyarî
    h = {}; def foo(*a) end; foo(h) # [{}] h = {}; def foo(a) end; foo(h) # {}

  • Fersend ji bo pîvanên blokê navên guhêrbar ên bihejmar bi xwerû bikar tînin.

    [1, 2, 3].her yek { @1 dixe } # wek [1, 2, 3].her { |i| min dike}

  • Piştgiriya ezmûnî ji bo rêzikên ku nirxa destpêkê tune.

    ary[..3] # heman wekî ary[0..3] rel.where(firotin: ..100)

  • Rêbaza Enumerable#tally lê zêde kir, ku dihejmêre ka her hêman çend caran çêdibe.

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

  • Banga rêbaza taybet bi "xwe" rast tê destûr kirin

    deffoo
    dawî
    taybet :foo
    xwe.foo

  • Rêbaza Enumerator::Lazy#eager lê zêde kir ku ji hejmartina lazy (Enumerator::Lazy) jimartina birêkûpêk çêbike.

    a = %w(bar bar baz)
    e = a.lazy.map {|x| x.upcase }.nexşe {|x| x + "!" }.jîrane
    p e.class #=> Enumerator
    e.nexşe {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]

  • Pêşveçûnek berhevkerek JIT-ya ceribandinê berdewam kir, ku dikare performansa serîlêdanên di zimanê Ruby de bi girîngî baştir bike. Berhevkarê JIT-ê ku di Ruby de hatî pêşniyar kirin pêşî koda C-yê li dîskê dinivîse, dûv re ew gazî berhevkarek C-ya derveyî dike ku rêwerzên makîneyê çêbike (GCC, Clang û Microsoft VC ++ têne piştgirî kirin). Di guhertoya nû de ger hewce be, rêbazek ji bo vekirina hundurîn bicîh tîne, di dema berhevkirinê de serîlêdana bijartî ya modên xweşbîniyê, nirxa xwerû ya "--jit-min-call" ji 5 ber 10000 zêde dibe, û "--jit-max-cache" ji 1000 heta 100.
  • Performansa çêtirkirina CGI.escapeHTML, Monitor û MonitorMixin.
  • Module#name, true.to_s, false.to_s, and nil.to_s piştrast dikin ku stringek ku ji bo tişta diyarkirî nayê guhertin tê vegerandin.
  • Mezinahiya pelên binaryê yên ku bi rêbaza RubyVM::InstructionSequence#to_binary hatine çêkirin kêm bûye;
  • Guhertoyên nûvekirî yên pêkhateyên çêkirî, di nav de
    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;

  • Pirtûkxane ji belavkirina bingehîn berbi pakêtên gemarê yên derveyî ve çûn
    CMath (cmath gem),
    Scanf (scanf gem),
    Şell (gewrê şêlê),
    Senkronîzator (hevdengkirina gem),
    ThreadsWait (thwait gem),
    E2MM (e2mmap gem).

  • Modulên stdlib yên xwerû li rubygems.org têne weşandin:
    pîvan,
    cgi,
    nûner,
    dirêj bibe,
    net pop,
    net smtp,
    vekirî3,
    pstore,
    singleton. Modulên çavdêriyê nehatine veguhestin rubygems.org
    çavdêr,
    başim,
    şopger,
    uri,
    yaml, ku tenê bi rûbi-core têne şandin.

  • Avakirina Ruby naha pêdivî bi berhevkarek C heye ku standarda C99 piştgirî dike.

Source: opennet.ru

Add a comment