Ruby 2.7.0 proqramlaşdırma dilinin buraxılışı

Bir illik inkişafdan sonra nəşr olundu buraxın Ruby 2.7.0, proqram inkişafında yüksək effektiv olan və Perl, Java, Python, Smalltalk, Eiffel, Ada və Lisp-in ən yaxşı xüsusiyyətlərini özündə birləşdirən dinamik obyekt yönümlü proqramlaşdırma dili. Layihə kodu GPL lisenziyasının ən son versiyasına istinad edən və GPLv2 ilə tam uyğun gələn BSD ("3-bəndli BSDL") və "Ruby" lisenziyaları altında paylanır. Ruby 2.7, xüsusiyyət təkmilləşdirmələri və 2-3 aylıq yamaq buraxılışı üçün bir il ayırmağı əhatə edən planlaşdırılmış inkişaf prosesinin bir hissəsi kimi istehsal ediləcək yeddinci əsas buraxılışdır.

Əsas irəliləyişlər:

  • eksperimental dəstək nümunə uyğunluğu (Nümunə uyğunluğu) verilmiş obyekt üzərində təkrarlamaq və nümunə uyğunluğu varsa, qiymət təyin etmək.

    halda [0, [1, 2, 3]] in [a, [b, *c]] pa #=> 0
    pb #=> 1
    pc #=> [2, 3] sonu

    hal {a: 0, b: 1}
    {a: 0, x: 1} ilə
    :əlçatmaz
    {a: 0, b: var} ilə
    p var #=> 1
    son

  • irb interaktiv hesablamalar qabığı (REPL, Read-Eval-Print-Loop) indi oxunuş xəttinə uyğun kitabxanadan istifadə etməklə həyata keçirilən çoxsətirli redaktə edir uzanmaq, Ruby dilində yazılmışdır. rdoc dəstəyi inteqrasiya olunub ki, bu da irb-də müəyyən edilmiş siniflər, modullar və metodlar haqqında arayış məlumatlarına baxmaq imkanı verir. Binding#irb vasitəsilə göstərilən kod sətirlərinin rənglə vurğulanması və əsas sinif obyektlərinin təftişinin nəticələri.

    Ruby 2.7.0 proqramlaşdırma dilinin buraxılışı

  • Bəzi çox yivli Ruby proqramlarının işləməsi zamanı baş verən yaddaşın parçalanması səbəbindən yavaş işləmə və yaddaş istehlakının artması problemlərini həll edən, yaddaşın bir hissəsinin defraqmentasiyasını həyata keçirə bilən yığcam zibil toplayıcısı (Compaction GC) əlavə edildi. Obyektləri yığının üzərinə yığmaq üçün təklif etdi İstifadə olunan yaddaş səhifələrinin sayını azaltmaq və əməliyyatlar üçün yığını optimallaşdırmaq üçün GC.compact metodu
    İnək (yazılı surətdə).

  • Həyata keçirilən siyahı mövqeyi (“def foo(a,b,c)”) və açar sözlər (“def foo(açar: val)”) əsasında arqumentləri ayırmağa hazırlaşır. Açar sözlərə və mövqeyə əsaslanan avtomatik arqument çevrilməsi köhnəlib və Ruby 3.0 filialında dəstəklənməyəcək. Xüsusilə, o, son arqumenti açar söz parametrləri kimi istifadə etməyi, açar sözə əsaslanan arqumentləri son hash parametri kimi ötürməyi və sonuncu arqumenti mövqe və açar söz parametrlərinə bölməyi ləğv etdi.

    def foo (açar: 42); son; foo({açar: 42}) # xəbərdarlıq edildi
    def foo(**kw); son; foo({açar: 42}) #xəbərdar edildi
    def foo (açar: 42); son; foo(**{açar: 42}) # OK
    def foo(**kw); son; foo(**{açar: 42}) # OK

    def foo(h, **kw); son; foo(açar: 42) # xəbərdarlıq edildi
    def foo(h, açar: 42); son; foo(açar: 42) # xəbərdarlıq edildi
    def foo(h, **kw); son; foo({açar: 42}) # OK
    def foo(h, açar: 42); son; foo({açar: 42}) # OK

    def foo(h={}, açar: 42); son; foo("key" => 43, açar: 42) # xəbərdarlıq edildi
    def foo(h={}, açar: 42); son; foo({"key" => 43, açar: 42}) # xəbərdarlıq edildi
    def foo(h={}, açar: 42); son; foo({"key" => 43}, açar: 42) # OK

    def foo(opt={}); son; foo( açar: 42 ) # OK

    def foo (h, ** sıfır); son; foo(açar: 1) # ArqumentError
    def foo (h, ** sıfır); son; foo(**{açar: 1}) # ArqumentError
    def foo (h, ** sıfır); son; foo("str" ​​=> 1) # ArqumentError
    def foo (h, ** sıfır); son; foo({açar: 1}) # OK
    def foo (h, ** sıfır); son; foo({"str" ​​=> 1}) # OK

    h = {}; def foo(*a) son; foo(**h) # [] h = {}; def foo(a) son; foo(**h) # {} və xəbərdarlıq
    h = {}; def foo(*a) son; foo(h) # [{}] h = {}; def foo(a) sonu; foo(h) # {}

  • Imkan blok parametrləri üçün standart olaraq nömrələnmiş dəyişən adlarından istifadə.

    [1, 2, 3].hər biri { @1 qoyur } # [1, 2, 3] ilə eynidir.hər biri { |i| qoyur mən}

  • İlkin dəyəri olmayan diapazonlar üçün eksperimental dəstək.

    ary[..3] # ary[0..3] ilə eyni rel.harada(satış: ..100)

  • Hər bir elementin neçə dəfə baş verdiyini hesablayan Enumerable#tally metodu əlavə edildi.

    ["a", "b", "c", "b"].cəmi
    #=> {“a”=>1, “b”=>2, “c”=>1}

  • Şəxsi metod çağırışına "self" hərfi ilə icazə verilir

    def foo
    son
    şəxsi: foo
    self.foo

  • Tənbəl sayıcıdan müntəzəm siyahı yaratmaq üçün Sayımçı::Lazy#eager metodu əlavə edildi (Saylayıcı::Lazy).

    a = %w(foo bar baz)
    e = a.tənbəl.xəritə {|x| x.upcase }.xəritə {|x| x + "!" }.istəkli
    p e.class #=> Sayıcı
    p e.xəritə {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]

  • Ruby dilində tətbiqlərin işini əhəmiyyətli dərəcədə yaxşılaşdıra bilən eksperimental JIT kompilyatorunun inkişafı davam etdi. Ruby-də təklif olunan JIT kompilyatoru əvvəlcə diskə C kodu yazır, bundan sonra maşın təlimatlarını yaratmaq üçün xarici C kompilyatorunu çağırır (GCC, Clang və Microsoft VC ++ dəstəklənir). Yeni versiya, zəruri hallarda daxili yerləşdirmə metodunu həyata keçirir, kompilyasiya zamanı optimallaşdırma rejimlərinin seçmə tətbiqi, "--jit-min-zənglər"in standart dəyəri 5-dən 10000-ə qədər artırılır və "--jit-max-cache" 1000-dən 100-ə qədər.
  • CGI.escapeHTML, Monitor və MonitorMixin-in təkmilləşdirilmiş performansı.
  • Module#name, true.to_s, false.to_s və nil.to_s təmin edir ki, göstərilən obyekt üçün dəyişməz sətir qaytarılır.
  • RubyVM::InstructionSequence#to_binary metodu ilə yaradılan ikili faylların ölçüsü azaldılıb;
  • Daxil olmaqla daxili komponentlərin yenilənmiş versiyaları
    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;

  • Kitabxanalar əsas paketdən xarici qiymətli daş paketlərinə köçürüldü
    CMath (cmath gem),
    Scanf (scanf gem),
    Qabıq (qabıq daş)
    Sinxronizator (sinxronizasiya incisi),
    ThreadsWait (gözləyin),
    E2MM (e2mmap gem).

  • Standart stdlib modulları rubygems.org saytında dərc olunur:
    etalon,
    cgi,
    nümayəndə
    getoptlong,
    net pop,
    net-smtp
    açıq3,
    mağaza,
    singleton. monitor modulları rubygems.org saytına köçürülmədi
    müşahidəçi,
    vaxt,
    izləyici,
    uri,
    yaml, yalnız ruby-core ilə göndərilir.

  • Ruby qurmaq indi C99 standartını dəstəkləyən C kompilyatorunu tələb edir.

Mənbə: opennet.ru

Добавить комментарий