Ruby програмчлалын хэлний хувилбар 2.7.0

Жилийн хөгжлийн дараа нийтэлсэн суллах RubN 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]] in [a, [b, *c]] pa #=> 0
    pb #=> 1
    pc #=> [2, 3] төгсгөл

    тохиолдол {a: 0, b: 1}
    {a:0,x:1}-д
    : хүрэх боломжгүй
    {a: 0, b: var}-д
    p var #=> 1
    Төгсгөл

  • irb интерактив тооцооллын бүрхүүл (REPL, Унших-Үнэлэх-Хэвлэх-Loop) нь унших мөртэй нийцтэй номын санг ашиглан олон мөрт засварлах боломжтой болсон. дахин татахRuby дээр бичсэн. Rdoc-ийн дэмжлэгийг нэгтгэсэн бөгөөд энэ нь irb-д заасан анги, модуль, аргуудын талаархи лавлагаа мэдээллийг үзэх боломжийг олгодог. Binding#irb-ээр харуулсан код бүхий мөрүүдийг өнгөөр ​​тодруулж, үндсэн ангийн объектуудыг шалгасны үр дүнг харуулав.

    Ruby програмчлалын хэлний хувилбар 2.7.0

  • Зарим олон урсгалтай Ruby програмуудыг ажиллуулах явцад үүсдэг санах ойн хуваагдалаас болж санах ойн бүс нутгийг дефрагментаци хийх, удаан ажиллагаатай, санах ойн хэрэглээ нэмэгдэх зэрэг асуудлыг шийдэж чадах авсаархан хог цуглуулагч (Compaction GC) нэмэгдсэн. Объектуудыг овоолон боох санал болгосон 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("key" => 43, түлхүүр: 42) #санууллаа
    def foo(h={}, түлхүүр: 42); Төгсгөл; foo({"key" => 43, түлхүүр: 42}) # анхааруулсан
    def foo(h={}, түлхүүр: 42); Төгсгөл; foo({"key" => 43}, түлхүүр: 42) # OK

    def foo(opt={}); Төгсгөл; foo( түлхүүр: 42 ) # За

    def foo(h, **тэг); Төгсгөл; foo(түлхүүр: 1) # Аргументийн алдаа
    def foo(h, **тэг); Төгсгөл; foo(**{түлхүүр: 1}) # ArgumentError
    def foo(h, **тэг); Төгсгөл; foo("str" ​​=> 1) # АргументийнАлдаа
    def foo(h, **тэг); Төгсгөл; foo({түлхүүр: 1}) # ЗА
    def foo(h, **тэг); Төгсгөл; foo({"str" ​​=> 1}) # ЗА

    h = {}; def foo(*a) төгсгөл; foo(**h) # [] h = {}; def foo(a) төгсгөл; foo(**h) # {} болон анхааруулга
    h = {}; def foo(*a) төгсгөл; foo(h) # [{}] h = {}; def foo(a) төгсгөл; 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" литералаар зөвшөөрнө

    deffoo
    Төгсгөл
    хувийн :foo
    self.foo

  • Залхуу (Тоологч::Залхуу) тоололоос тогтмол тооллого үүсгэхийн тулд Тоологч::Lazy#eager аргыг нэмсэн.

    a = %w(foo bar baz)
    e = a.залхуу.газрын зураг {|x| x.upcase }.map {|x| x + "!" }. хүсэл тэмүүлэлтэй
    p e.class #=> Тоологч
    e.газрын зураг {|x| x + "?" } #=> [“FOO!?”, “BAR!?”, “BAZ!?”]

  • Туршилтын JIT хөрвүүлэгчийг хөгжүүлэх ажил үргэлжилж байгаа бөгөөд энэ нь Ruby хэл дээрх програмуудын гүйцэтгэлийг мэдэгдэхүйц сайжруулж чадна. Ruby-д санал болгож буй JIT хөрвүүлэгч нь эхлээд C кодыг диск рүү бичдэг бөгөөд дараа нь машины зааварчилгаа үүсгэхийн тулд гадаад С хөрвүүлэгчийг дууддаг (GCC, Clang болон Microsoft VC ++ дэмждэг). Шинэ хувилбар нь шаардлагатай бол шугамд байршуулах аргыг хэрэгжүүлдэг, эмхэтгэлийн явцад оновчтой горимуудыг сонгон хэрэглэж, "--jit-min-calls"-ын өгөгдмөл утгыг 5-аас 10000 болгон нэмэгдүүлж, "--jit-max-cache" 1000-аас 100 хүртэл.
  • CGI.escapeHTML, Monitor болон MonitorMixin-ийн гүйцэтгэл сайжирсан.
  • Module#name, true.to_s, false.to_s, nil.to_s нь заасан объектын хувьд өөрчлөгдөөгүй мөрийг буцааж өгөхийг баталгаажуулдаг.
  • RubyVM::InstructionSequence#to_binary аргаар үүсгэсэн хоёртын файлуудын хэмжээг багасгасан;
  • Суулгасан бүрэлдэхүүн хэсгүүдийн шинэчилсэн хувилбарууд, үүнд
    Багцлагч 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;

  • Номын сангууд үндсэн түгээлтээс гадаад эрдэнийн багц руу шилжсэн
    CMath (cmath эрдэнийн чулуу),
    Сканф (эрдэнийг хайх),
    Бүрхүүл (бүрхүүл),
    Синхрончлогч (синхрончлолын үнэт чулуу),
    ThreadsWait (thwait эрдэнэ),
    E2MM (e2mmap эрдэнийн чулуу).

  • Өгөгдмөл stdlib модулиудыг rubygems.org дээр нийтэлсэн:
    жишиг,
    cgi,
    төлөөлөгч,
    getoptlong,
    цэвэр поп,
    цэвэр smtp,
    нээлттэй3,
    дэлгүүр,
    синглтон. Мониторын модулиудыг rubygems.org руу шилжүүлээгүй
    ажиглагч,
    завсарлага,
    мөрдөгч,
    uri,
    ямл, тэдгээр нь зөвхөн бадмаараг цөмтэй хамт тээвэрлэгддэг.

  • Ruby-г бүтээхэд одоо C99 стандартыг дэмждэг C хөрвүүлэгч шаардлагатай.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх