Lëshimi i gjuhës së programimit Ruby 2.7.0

Pas një vit zhvillimi është publikuar lëshimi Ruby 2.7.0, një gjuhë programimi dinamike, objektor-orientuar, e cila shquhet për efikasitetin e saj në zhvillimin e softuerit dhe përfshin karakteristikat më të mira nga Perl, Java, Python, Smalltalk, Eiffel, Ada dhe Lisp. Kodi i projektit shpërndahet nën licencat BSD ("2-clause BSDL") dhe "Ruby", e cila referon versionin e fundit të licencës GPL dhe është plotësisht e pajtueshme me GPLv3. Ruby 2.7 është versioni i shtatë i rëndësishëm, i përgatitur në kuadër të procesit planifikues të zhvillimit, i cili parashikon një vit për përgatitjen e përmirësimeve funksionale dhe publikimin çdo 2-3 muaj të versioneve korrigjuese.

Ndryshimet kryesore përmirësime:

  • Eksperimentale mbĂ«shtetje nĂ« lidhje me modelet (Pattern matching), e cila lejon tĂ« kalosh njĂ« objekt tĂ« caktuar dhe tĂ« caktohesh njĂ« vlerĂ« nĂ«se ka njĂ« pĂ«rputhje me modelin.

    case [0, [1, 2, 3]]
    in [a, [b, *c]]
    p a #=> 0
    p b #=> 1
    p c #=> [2, 3]
    end

    case {a: 0, b: 1}
    in {a: 0, x: 1}
    :unreachable
    in {a: 0, b: var}
    p var #=> 1
    end

  • NĂ« shell-in interaktiv tĂ« llogaritjeve irb (REPL, Read-Eval-Print-Loop) Ă«shtĂ« shtuar mundĂ«sia pĂ«r redaktim shumĂ«-rreshtor, implementuar me njĂ« bibliotekĂ« e cila Ă«shtĂ« e pajtueshme me readline reline, e shkruar nĂ« gjuhĂ«n Ruby. ËshtĂ« integruar mbĂ«shtetje pĂ«r rdoc, e cila lejon shikimin e informacionit ndihmĂ«s nĂ« irb pĂ«r klasat, modulet dhe metodat e caktuara. JanĂ« siguruar ngjyrosje tĂ« kodit me ngjyra pĂ«r rreshtat e kodit qĂ« shfaqen pĂ«rmes Binding#irb dhe rezultatet e inspektimit tĂ« objekteve tĂ« klasave bazĂ«.

    Lëshimi i gjuhës së programimit Ruby 2.7.0
  • ËshtĂ« shtuar njĂ« grumbullues i ngjeshjes (Compaction GC), i cili mund tĂ« kryejĂ« defragmimin e hapĂ«sirĂ«s sĂ« kujtesĂ«s, duke zgjidhur problemet e uljes sĂ« performancĂ«s dhe rritjes sĂ« konsumit tĂ« kujtesĂ«s pĂ«r shkak tĂ« fragmentimit tĂ« kujtesĂ«s, i cili ndodh gjatĂ« funksionimit tĂ« disa aplikacioneve Ruby me shumĂ« threads. PĂ«r paketimin e objekteve nĂ« grumbull suggested metoda GC.compact, e cila lejon tĂ« reduktohet numri i faqeve tĂ« pĂ«rdorura tĂ« kujtesĂ«s dhe tĂ« optimizohet heap pĂ«r operacionet
    CoW (copy-on-write).
  • ËshtĂ« kryer pĂ«rgatitja pĂ«r ndarjen e argumenteve, tĂ« pĂ«rcaktuar nĂ« bazĂ« tĂ« pozicionit nĂ« listĂ« ("def foo(a,b,c)") dhe fjalĂ«ve kyçe ("def foo(key: val)"). Automatikisht tĂ« transformuara argumentet nĂ« bazĂ« tĂ« fjalĂ«ve kyçe dhe pozicionit janĂ« shpallur tĂ« vjetra dhe nuk do tĂ« mbĂ«shteten nĂ« degĂ«n Ruby 3.0. NĂ« veçanti, Ă«shtĂ« shpallur e vjetruar pĂ«rdorimi i argumentit tĂ« fundit si parametra pĂ«r fjalĂ«t kyçe, kalimi i argumenteve nĂ« bazĂ« tĂ« fjalĂ«ve kyçe si argumenti i fundit i hash-it dhe ndarja e argumentit tĂ« fundit nĂ« parametrat pozicionalĂ« dhe tĂ« fjalĂ«ve kyçe.

    def foo(key: 42); end; foo({key: 42}) # warned
    def foo(**kw); end; foo({key: 42}) # warned
    def foo(key: 42); end; foo(**{key: 42}) # OK
    def foo(**kw); end; foo(**{key: 42}) # OK

    def foo(h, **kw); end; foo(key: 42) # warned
    def foo(h, key: 42); end; foo(key: 42) # warned
    def foo(h, **kw); end; foo({key: 42}) # OK
    def foo(h, key: 42); end; foo({key: 42}) # OK

    def foo(h={}, key: 42); end; foo(«key» => 43, key: 42) # warned
    def foo(h={}, key: 42); end; foo({«key» => 43, key: 42}) # warned
    def foo(h={}, key: 42); end; foo({«key» => 43}, key: 42) # OK

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

    def foo(h, **nil); end; foo(key: 1) # ArgumentError
    def foo(h, **nil); end; foo(**{key: 1}) # ArgumentError
    def foo(h, **nil); end; foo(«str» => 1) # ArgumentError
    def foo(h, **nil); end; foo({key: 1}) # OK
    def foo(h, **nil); end; foo({«str» => 1}) # OK

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

  • MundĂ«sia pĂ«rdorimi i emrave tĂ« numĂ«ruar tĂ« variablave pĂ«r parametĂ«r blokun.

    [1, 2, 3].each { puts @1 } # si analogji [1, 2, 3].each { |i| puts i }

  • MbĂ«shtetje eksperimentale pĂ«r intervalet pa vlerĂ« fillestare.

    ary[..3] # e njëjtë me ary[0..3]
    rel.where(sales: ..100)

  • Metoda e shtuar Enumerable#tally, e cila llogarit sa herĂ« shfaqet çdo element.

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

  • Lejohet thirrja e metodĂ«s private me literalin «self»

    def foo
    end
    private :foo
    self.foo

  • Metoda e shtuar Enumerator::Lazy#eager pĂ«r tĂ« gjeneruar njĂ« enumerim tĂ« zakonshĂ«m nga njĂ« enumerim "lenj" (Enumerator::Lazy).

    a = %w(foo bar baz)
    e = a.lazy.map {|x| x.upcase }.map {|x| x + «!» }.eager
    p e.class #=> Enumerator
    p e.map {|x| x + «?» } #=> [«FOO!?», «BAR!?», «BAZ!?»]

  • Vazhdon zhvillimi i JIT-kompiluese eksperimentale, e cila lejon tĂ« rritet ndjeshĂ«m performanca e aplikacioneve nĂ« gjuhĂ«n Ruby. JIT-kompiluese e propozuar nĂ« Ruby nĂ« fillim regjistron kodin nĂ« gjuhĂ«n C nĂ« disk, pastaj thĂ«rret njĂ« kompilator tĂ« jashtĂ«m tĂ« C pĂ«r tĂ« gjeneruar instruksionet makine (mbĂ«shtetet thirrja e GCC, Clang dhe Microsoft VC++). NĂ« versionin e ri Ă«shtĂ« implementuar njĂ« metodĂ« pĂ«r shpĂ«rndarjen inline sipas nevojĂ«s, Ă«shtĂ« siguruar pĂ«rdorimi selektiv i modeleve tĂ« optimizimit gjatĂ« kompilimit, vlera e paracaktuar "—jit-min-calls" Ă«shtĂ« rritur nga 5 nĂ« 10000, dhe "—jit-max-cache" nga 1000 nĂ« 100.
  • Rritur performanca e CGI.escapeHTML, Monitor dhe MonitorMixin.
  • NĂ« Module#name, true.to_s, false.to_s dhe nil.to_s Ă«shtĂ« siguruar kthimi i njĂ« stringu, i pandryshuar pĂ«r objektin e specifikuar.
  • Eshte reduktuar madhĂ«sia e skedave binarĂ« qĂ« gjenerohen nga metoda RubyVM::InstructionSequence#to_binary;
  • Versionet e pĂ«rbĂ«rĂ«sve tĂ« integruar janĂ« pĂ«rditĂ«suar, 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,
    StringScanner 1.0.3;
  • Disa biblioteka janĂ« zhvendosur nga shpĂ«rndarja bazĂ« nĂ« paketat e jashtme gem
    CMath (cmath gem),
    Scanf (scanf gem),
    Shell (shell gem),
    Synchronizer (sync gem),
    ThreadsWait (thwait gem),
    E2MM (e2mmap gem).
  • NĂ« rubygems.org janĂ« publikuar modulet e standardeve tĂ« ofruara si parazgjedhje:
    benchmark,
    cgi,
    delegate,
    getoptlong,
    net-pop,
    net-smtp,
    open3,
    pstore,
    singleton. Modulet që nuk janë transferuar në rubygems.org janë monitor,
    observer,
    timeout,
    tracer,
    uri,
    yaml, të cilat ofrohen vetëm në ruby-core.
  • Tani pĂ«r ndĂ«rtimin e Ruby nevojitet njĂ« kompajler C qĂ« mbĂ«shtet standardin C99.

Burimi: opennet.ru

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster