Tso tawm Ruby programming lus 3.2

Ruby 3.2.0 tau tso tawm, ib hom lus hais txog kev ua haujlwm zoo uas muaj txiaj ntsig zoo hauv kev tsim kho thiab suav nrog cov yam ntxwv zoo tshaj plaws ntawm Perl, Java, Python, Smalltalk, Eiffel, Ada thiab Lisp. Txoj haujlwm code yog muab faib raws li BSD ("2-clause BSDL") thiab "Ruby" cov ntawv tso cai, uas yog hais txog qhov tseeb version ntawm GPL daim ntawv tso cai thiab tau ua tiav nrog GPLv3.

Kev txhim kho tseem ceeb:

  • Ntxiv qhov chaw nres nkoj thawj zaug ntawm Cruby tus neeg txhais lus, uas suav nrog rau hauv WebAssembly intermediate code rau khiav hauv lub web browser lossis nyob rau hauv standalone runtimes xws li wasmtime. Rau kev sib cuam tshuam ncaj qha nrog lub operating system thaum khiav sib cais, WASI (WebAssembly System Interface) API yog siv. Ntawm lwm yam, VFS wrapper yog muab rau saum WASI, uas tso cai rau koj ntim tag nrho Ruby daim ntawv thov rau hauv kev nthuav qhia hauv daim ntawv ntawm ib qho ntaub ntawv wasm. Khiav hauv browser tuaj yeem siv los tsim kev cob qhia thiab kev pabcuam hauv web xws li TryRuby. Nyob rau theem tam sim no ntawm txoj kev loj hlob, qhov chaw nres nkoj ntse dhau qhov kev sim thiab bootstrap suites, uas tsis siv Xov API. Qhov chaw nres nkoj kuj tsis txhawb Fibers, kev zam, lossis kev khaws cov khib nyiab.
  • Lub YJIT hauv txheej txheem JIT compiler, tsim los ntawm cov neeg tsim khoom ntawm Shopify e-lag luam platform ua ib feem ntawm kev pib ua kom muaj kev ua tau zoo ntawm Ruby cov kev pabcuam uas siv lub Rails lub moj khaum thiab hu rau ntau txoj hauv kev, tau tshaj tawm tias ruaj khov thiab npaj txhij rau. kev siv ntau lawm. Qhov sib txawv tseem ceeb los ntawm yav dhau los siv MJIT JIT compiler, uas yog ua raws li kev ua tiav tag nrho cov txheej txheem thiab siv cov compiler sab nraud hauv hom C, yog tias YJIT siv Lazy Basic Block Versioning (LBBV) thiab muaj cov JIT compiler integrated. Nrog LBBV, JIT thawj zaug suav tsuas yog qhov pib ntawm txoj kev, thiab suav nrog qee lub sijhawm tom qab, tom qab hom kev hloov pauv thiab cov lus sib cav siv tau txiav txim siab thaum ua tiav. YJIT muaj rau x86-64 thiab arm64 / aarch64 architectures ntawm Linux, MacOS, BSD thiab lwm lub platforms UNIX.

    Tsis zoo li Ruby, YJIT code yog sau ua lus Rust thiab xav tau rustc 1.58.0+ compiler rau muab tso ua ke, yog li YJIT tsim yog neeg xiam los ntawm lub neej ntawd thiab yog xaiv tau. Thaum siv YJIT, 41% nce hauv kev ua tau zoo tau sau tseg thaum khiav qhov kev xeem yjit-lub rooj ntev zaum piv rau kev siv txhais lus.

    Tso tawm Ruby programming lus 3.2

  • Ntxiv kev tiv thaiv ntxiv rau kev tsis lees paub ntawm kev pabcuam kev tawm tsam thaum ua cov ntaub ntawv sab nraud hauv kev siv tsis tau thiab siv sijhawm ntev (ReDoS). Qhov sib txuam algorithm, uas siv cov txheej txheem nco, tau ua kom zoo dua qub. Piv txwv li, lub sijhawm ua tiav ntawm cov lus qhia '/^a*b?a*$/ =~ "a" * 50000 + "x"' raug txo los ntawm 10 mus rau 0.003 vib nas this. Tus nqi ntawm optimization yog ib qho kev nce hauv kev nco, kev noj uas yog kwv yees li 10 npaug siab dua qhov loj ntawm cov ntaub ntawv nkag. Qhov kev ntsuas kev ruaj ntseg thib ob yog lub peev xwm los txhais lub sijhawm (piv txwv li, "Regexp.timeout = 1.0") thaum lub sijhawm qhia yuav tsum tau ua tiav.
  • Lub syntax_suggest hom yog suav nrog, uas yuav pab txheeb xyuas qhov ua rau ntawm qhov ua tsis raug cuam tshuam nrog qhov ploj lossis kaw ntxiv "kawg" qhia. Unmatched 'kawg', ploj lo lus tseem ceeb ('do', 'def', 'if', thiab lwm yam) ? 1 chav Aub> 2 defbark> 3 kawg 4 kawg
  • Lub peev xwm los cim cov lus sib cav rau qhov tsis raug cuam tshuam txog hom thiab cov lus sib cav tau ntxiv rau qhov yuam kev qhov chaw tso saib hom, piv txwv li: test.rb:2:in `+': nil tsis tuaj yeem raug yuam ua Integer (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • Ntxiv cov syntax tshiab rau kev hloov pauv cov lus sib cav rau lwm txoj hauv kev: def foo(*) bar(*) kawg def baz(**) quux(**) kawg
  • Ruby_vm/mjit/compiler yog npaj siab - ib qho txawv ntawm MJIT JIT compiler qub, rov sau ua lus Ruby. Xyuas kom meej tias MJIT khiav hauv cov txheej txheem sib cais es tsis txhob khiav hauv MJIT cov neeg ua haujlwm xov.
  • Hauv Bundler 2.4, kev vam khom siv cov PubGrub version detector, kuj siv rau hauv pub pob tus thawj tswj rau cov lus Dart. Cov kev siv yav dhau los Molinillo algorithm txuas ntxiv siv hauv RubyGems, tab sis tseem yuav raug hloov los ntawm PubGrub yav tom ntej.
  • Hloov tshiab versions ntawm built-in lub pov haum modules thiab cov uas muaj nyob rau hauv cov qauv tsev qiv ntawv.

Tau qhov twg los: opennet.ru

Ntxiv ib saib