Нашри забони барномасозии Ruby 2.7.0

Пас аз як соли рушд нашр кардааст релиз Рубли 2.7.0, забони барномасозии динамикии ба объект нигаронидашуда, ки дар таҳияи барнома хеле самаранок аст ва беҳтарин хусусиятҳои Perl, Java, Python, Smalltalk, Eiffel, Ada ва Lisp-ро дар бар мегирад. Рамзи лоиҳа дар доираи литсензияҳои BSD ("2-банди BSDL") ва "Ruby" паҳн карда мешавад, ки ба версияи охирини иҷозатномаи GPL дахл дорад ва бо GPLv3 комилан мувофиқ аст. Ruby 2.7 ҳафтумин версияи асосӣ мебошад, ки ҳамчун як қисми раванди банақшагирифташудаи рушд истеҳсол мешавад, ки ҷудо кардани як солро барои такмил додани хусусият ва барориши ямоқи 2-3 моҳ дар бар мегирад.

асосӣ беҳбудиҳо:

  • таҷрибавӣ дастгирӣ мутобиқати намуна (Мутобиқати намуна) барои такрор кардани объекти додашуда ва таъин кардани арзиш, агар мувофиқати намуна мавҷуд бошад.

    парванда [0, [1, 2, 3]] дар [a, [b, *c]] pa #=> 0
    pb #=> 1
    компютер #=> [2, 3] анҷом

    ҳолат {a: 0, b: 1}
    дар{a:0,x:1}
    : дастнорас
    дар {a: 0, b: var}
    p var #=> 1
    Поён

  • Қабати ҳисобҳои интерактивии irb (REPL, Read-Eval-Print-Loop) ҳоло имкони таҳрири чандсатро дорад, ки бо истифода аз китобхонаи мувофиқи сатр амалӣ карда мешавад. релиндар Ruby навишта шудааст. дастгирии rdoc ҳамгиро карда шудааст, ки ба шумо имкон медиҳад, ки маълумоти истинодро дар бораи синфҳо, модулҳо ва усулҳои мушаххас дар irb дидан кунед. Ранги равшании сатрҳои код, ки тавассути Binding#irb ва натиҷаҳои санҷиши объектҳои синфи асосӣ нишон дода шудаанд.

    Нашри забони барномасозии Ruby 2.7.0

  • Як коллектори партовҳои паймоне (Compaction GC) илова карда шуд, ки метавонад як минтақаи хотираро дефрагментация кунад, мушкилоти иҷрои суст ва зиёдшавии истеъмоли хотираро аз сабаби тақсимоти хотира, ки ҳангоми кори баъзе замимаҳои бисёрсоҳаи Ruby рух медиҳад, ҳал кунад. Барои бастабандии объектҳо дар теппа пешниҳод кардааст Усули GC.compact барои кам кардани шумораи саҳифаҳои хотираи истифодашуда ва оптимизатсияи теппа барои амалиёт
    CoW (нусха ба навиштан).

  • Иҷро шудан омодагӣ ба ҷудо кардани далелҳо дар асоси мавқеъ дар рӯйхат ("def foo(a,b,c)") ва калимаҳои калидӣ ("def foo(key:val)"). Табдилдиҳии худкори аргументҳо дар асоси калимаҳои калидӣ ва мавқеъ бекор карда шудааст ва дар филиали Ruby 3.0 дастгирӣ намешавад. Аз ҷумла, истифодаи аргументи охирин ҳамчун параметрҳои калимаи калидӣ, интиқол додани далелҳои ба калимаи калидӣ ҳамчун параметри охирини хэш ва тақсим кардани аргументи охирин ба параметрҳои мавқеъӣ ва калидӣ бекор карда шудааст.

    def foo (калид: 42); Поён; foo({калид: 42}) #огоҳ дод
    def foo(**kw); Поён; foo({калид: 42}) #огоҳ дод
    def foo (калид: 42); Поён; foo(**{калид: 42}) # Хуб
    def foo(**kw); Поён; foo(**{калид: 42}) # Хуб

    def foo(h, **kw); Поён; foo(калид: 42) #огоҳӣ
    def foo(h, калид: 42); Поён; foo(калид: 42) #огоҳӣ
    def foo(h, **kw); Поён; foo({калид: 42}) # Хуб
    def foo(h, калид: 42); Поён; foo({калид: 42}) # Хуб

    def foo(h={}, калид: 42); Поён; foo("калид" => 43, калид: 42) #огоҳӣ
    def foo(h={}, калид: 42); Поён; foo({"key" => 43, калид: 42}) # огоҳ карда шуд
    def foo(h={}, калид: 42); Поён; foo({"key" => 43}, калид: 42) # Хуб

    def foo (opt = {}); Поён; foo (калид: 42) # Хуб

    def foo(h, **нил); Поён; foo (калид: 1) # ArgumentError
    def foo(h, **нил); Поён; foo(**{калид: 1}) # ArgumentError
    def foo(h, **нил); Поён; foo("str" ​​=> 1) # ArgumentError
    def foo(h, **нил); Поён; foo({калид: 1}) # Хуб
    def foo(h, **нил); Поён; foo({"str" ​​=> 1}) # Хуб

    h = {}; def foo(*a) a end; foo(**h) # [] h = {}; def foo(а) хотима; foo(**h) # {} ва огоҳӣ
    h = {}; def foo(*a) end; foo(h) # [{}] h = {}; def foo(a) end; foo(h) # {}

  • Имконият бо нобаёнӣ бо истифода аз номҳои тағйирёбанда рақамгузорӣ барои параметрҳои блок.

    [1, 2, 3].ҳар { мегузорад @1 } # лайк [1, 2, 3].ҳар { |i| мегузорад ман }

  • Дастгирии таҷрибавӣ барои диапазонҳо бидуни арзиши ибтидоӣ.

    ary[..3] # ҳамон тавре ки ary[0..3] rel.where(фурӯш: ..100)

  • Усули Enumerable#tally илова карда шуд, ки он чанд маротиба рух додани ҳар як элементро ҳисоб мекунад.

    ["a", "b", "c", "b"].ҳисоб
    #=> {"a"=>1, "b"=>2, "c"=>1}

  • Зангҳои усули хусусӣ бо литерали "self" иҷозат дода мешавад

    def foo
    Поён
    хусусӣ: foo
    self.foo

  • Усули Enumerator::Lazy#eager барои тавлиди барӯйхатгирии муқаррарӣ аз рӯйхатҳои танбал (Рӯйхатгир::Лазй) илова карда шуд.

    a = %w(foo bar baz)
    e = a.lazy.map {|x | x.upcase }.харитаи {|x| x + "!" }.хавас
    p e.class #=> Барӯйхатгиранда
    д.харитаи {|x| x + "?" } #=> [“FOO!?”, “БАР!?”, “БАЗ!?”]

  • Таҳияи як компилятори таҷрибавии JIT идома ёфт, ки метавонад кори барномаҳоро дар забони руби ба таври назаррас беҳтар кунад. Компилятори JIT, ки дар Ruby пешниҳод шудааст, аввал рамзи C-ро ба диск менависад ва баъд аз он як компилятори берунии C-ро барои тавлиди дастурҳои мошин даъват мекунад (GCC, Clang ва Microsoft VC ++ дастгирӣ мешаванд). Версияи нав усули ҷойгиркунии дохилиро дар ҳолати зарурӣ татбиқ мекунад, истифодаи интихобии режимҳои оптимизатсия ҳангоми тартибдиҳӣ, арзиши пешфарзии "--jit-min-calls" аз 5 то 10000 зиёд карда мешавад ва "--jit-max-cache" аз 1000 то 100.
  • Фаъолияти беҳтаршудаи CGI.escapeHTML, Monitor ва MonitorMixin.
  • Модул#ном, true.to_s, false.to_s ва nil.to_s кафолат медиҳанд, ки сатр барои объекти муайяншуда бетағйир боқӣ мемонад.
  • Андозаи файлҳои дуӣ, ки бо усули RubyVM::InstructionSequence#to_binary тавлид шудаанд, кам карда шуд;
  • Версияҳои навшудаи ҷузъҳои дарунсохт, аз ҷумла
    Bundler 2.1.2, RubyGems 3.1.2,
    Racc 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    StringScanner 1.0.3;

  • Китобхонаҳо аз бастаи асосӣ ба бастаҳои ганҷҳои беруна гузаронида шуданд
    CMath (ганҷҳои cmath),
    Scanf (гавҳари сканф),
    Shell (гавҳари сангин)
    Синхронизатор (синхронизатсия),
    ThreadsWait (гавҳари интизорӣ),
    E2MM (гами e2mmap).

  • Модулҳои пешфарз stdlib дар rubygems.org нашр мешаванд:
    меъёр,
    cgi,
    вакил,
    Getoptlong,
    net pop,
    net smtp,
    кушода 3,
    мағоза,
    синглтон. Модулҳои монитор ба rubygems.org интиқол дода нашудаанд
    нозир,
    поёни вақт,
    пайгирӣкунанда
    ури,
    ямл, ки тандо бо рубои-до фиристода мешаванд.

  • Ҳоло барои сохтани Ruby як компилятори C талаб мекунад, ки стандарти C99-ро дастгирӣ мекунад.

Манбаъ: opennet.ru

Илова Эзоҳ