የሩቢ ፕሮግራሚንግ ቋንቋ መለቀቅ 3.2

Ruby 3.2.0 ተለቋል፣ ተለዋዋጭ ነገር ተኮር የፕሮግራም አወጣጥ ቋንቋ በፕሮግራም ልማት ውስጥ በጣም ቀልጣፋ እና የፐርል፣ ጃቫ፣ ፓይዘን፣ ስሞልቶክ፣ ኢፍልል፣ አዳ እና ሊስፕ ምርጥ ባህሪያትን ያካትታል። የፕሮጀክት ኮድ በ BSD ("2-clause BSDL") እና "Ruby" ፈቃዶች ስር ተሰራጭቷል፣ እሱም የቅርብ ጊዜውን የጂፒኤል ፍቃድ ስሪት የሚያመለክት እና ከ GPLv3 ጋር ሙሉ በሙሉ ተኳሃኝ ነው።

ዋና ማሻሻያዎች፡-

  • በድር አሳሽ ውስጥ ለመስራት ወይም እንደ wasmtime ባሉ ገለልተኛ የሩጫ ጊዜዎች ወደ WebAssembly መካከለኛ ኮድ የሚያጠናቅቅ የ CRUby አስተርጓሚ የመጀመሪያ ወደብ ታክሏል። በተናጠል ሲሰራ ከስርዓተ ክወናው ጋር ቀጥተኛ መስተጋብር ለማግኘት WASI (WebAssembly System Interface) API ጥቅም ላይ ይውላል። ከሌሎች ነገሮች በተጨማሪ, የቪኤፍኤስ መጠቅለያ በ WASI አናት ላይ ይቀርባል, ይህም ሙሉውን የ Ruby መተግበሪያ በአንድ የዋሽ ፋይል መልክ ወደ ማቅረቢያ ማሸግ ያስችላል. በአሳሽ ውስጥ መሮጥ እንደ TryRuby ያሉ የሥልጠና እና የማሳያ ድር አገልግሎቶችን ለመፍጠር ሊያገለግል ይችላል። አሁን ባለው የዕድገት ደረጃ፣ ወደቡ የ Thread API የማይጠቀሙትን መሰረታዊ እና የቡትስትራፕ የሙከራ ስብስቦችን በተሳካ ሁኔታ አልፏል። ወደቡ እንዲሁ Fibersን፣ ልዩ ሁኔታዎችን ወይም ቆሻሻን አይደግፍም።
  • የባቡር ሀዲድ ማዕቀፍን የሚጠቀሙ እና ብዙ ዘዴዎችን የሚጠሩትን የሩቢ ፕሮግራሞችን አፈፃፀም ለማሳደግ በተነሳው ተነሳሽነት በ Shopify ኢ-ኮሜርስ መድረክ ገንቢዎች የተፈጠረው YJIT በሂደት ላይ ያለው JIT አጠናቃሪ የተረጋጋ እና ዝግጁ መሆኑ ታውጇል። የምርት አጠቃቀም. ቀደም ሲል ጥቅም ላይ ከዋለው MJIT JIT compiler የሚለየው ቁልፍ ልዩነት ሙሉ ዘዴዎችን በማዘጋጀት ላይ የተመሰረተ እና በ C ቋንቋ ውጫዊ ማጠናከሪያን ይጠቀማል, YJIT Lazy Basic Block Versioning (LBBV) ይጠቀማል እና የተቀናጀ JIT ማጠናቀርን ይዟል. በኤልቢቢቪ፣ JIT በመጀመሪያ የስልቱን መጀመሪያ ብቻ ያጠናቅራል፣ እና የቀረውን ከተወሰነ ጊዜ በኋላ ያጠናቅራል፣ በአፈፃፀም ወቅት ጥቅም ላይ የዋሉት ተለዋዋጮች እና ክርክሮች ከተወሰኑ በኋላ። YJIT ለ x86-64 እና arm64/arch64 አርክቴክቸር በሊኑክስ፣ማክኦኤስ፣ቢኤስዲ እና ሌሎች UNIX መድረኮች ይገኛል።

    እንደ Ruby ሳይሆን፣ የYJIT ኮድ በሩስት ቋንቋ የተፃፈ ሲሆን ለመጠናቀር rustc 1.58.0+ ማጠናቀርን ይፈልጋል፣ ስለዚህ YJIT ግንባታ በነባሪነት ተሰናክሏል እና አማራጭ ነው። YJITን በሚጠቀሙበት ጊዜ፣ የyjit-bench ፈተናን ሲያካሂዱ ከትርጓሜ ጋር ሲነጻጸር የ41% የአፈጻጸም ጭማሪ ተመዝግቧል።

    የሩቢ ፕሮግራሚንግ ቋንቋ መለቀቅ 3.2

  • ውጫዊ መረጃን ውጤታማ ባልሆነ እና ጊዜ በሚወስድ መደበኛ አገላለጾች (ReDoS) ሲሰራ የአገልግሎት ጥቃቶችን ውድቅ ለማድረግ ተጨማሪ ጥበቃ ታክሏል። የማስታወሻ ዘዴን የሚጠቀመው ተዛማጅ ስልተ ቀመር በከፍተኛ ሁኔታ ተሻሽሏል። ለምሳሌ '/^a*b?a*$/ =~ "a" * 50000 + "x" የሚለው አገላለጽ የሚፈጸምበት ጊዜ ከ10 ወደ 0.003 ሰከንድ ተቀንሷል። የማመቻቸት ዋጋ የማህደረ ትውስታ ፍጆታ መጨመር ነው, የፍጆታ ፍጆታው ከግቤት መረጃ መጠን በግምት 10 እጥፍ ይበልጣል. ሁለተኛው የደህንነት መለኪያ መደበኛው አገላለጽ መከናወን ያለበትን ጊዜ ማብቂያ (ለምሳሌ "Regexp.timeout = 1.0") የመግለጽ ችሎታ ነው.
  • የአገባብ_ጠቋሚ ሁነታ ተካትቷል፣ ይህም ከጎደለ ወይም ተጨማሪ የመዝጊያ "መጨረሻ" አገላለጽ ጋር የተዛመዱ ስህተቶችን መንስኤ ለማወቅ ይረዳል። የማይዛመደው 'መጨረሻ'፣ ቁልፍ ቃል ይጎድላል ​​('አድርገው'፣ 'def'፣ `if'፣ ወዘተ)? 1 ክፍል ውሻ> 2 defbark> 3 ጫፍ 4 ጫፍ
  • ከአይነቶች እና ክርክሮች ጋር ለተያያዙ ስህተቶች ክርክሮችን የመለየት ችሎታ ወደ ስህተቱ የመገኛ ቦታ ማሳያ ሁነታ ላይ ተጨምሯል፡ ለምሳሌ፡ test.rb:2:in `+': nil ወደ ኢንቲጀር (TypeError) sum = ary ሊገደድ አይችልም [0] + ary [1] ^^^^^
  • የክርክር ስብስቦችን ወደ ሌሎች ዘዴዎች ለማዞር አዲስ አገባብ ታክሏል፡ def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler ቀርቧል - የድሮው MJIT JIT ማቀናበሪያ ተለዋጭ፣ በሩቢ ቋንቋ እንደገና የተጻፈ። MJIT በMJIT ሰራተኛ ክር ውስጥ ከመሮጥ ይልቅ በተለየ ሂደት ውስጥ መሄዱን አረጋግጧል።
  • በBundler 2.4 ውስጥ፣ ጥገኝነት ማቀናበር የPubGrub ሥሪት ማወቂያን ይጠቀማል፣ እንዲሁም ለዳርት ቋንቋ በመጠጥ ቤት ጥቅል አስተዳዳሪ ውስጥ ጥቅም ላይ ይውላል። ቀደም ሲል ጥቅም ላይ የዋለው ሞሊኒሎ አልጎሪዝም በ RubyGems ውስጥ ጥቅም ላይ መዋሉን ቀጥሏል፣ ነገር ግን ለወደፊቱ በPubGrub ይተካል።
  • አብሮ የተሰሩ የጌጣጌጥ ሞጁሎች እና በመደበኛ ቤተ-መጽሐፍት ውስጥ የተካተቱ የተዘመኑ ስሪቶች።

ምንጭ: opennet.ru

አስተያየት ያክሉ