Lanzamento da linguaxe de programación Ruby 3.2

Lanzouse Ruby 3.2.0, unha linguaxe de programación dinámica orientada a obxectos que é altamente eficiente no desenvolvemento de programas e que incorpora as mellores características de Perl, Java, Python, Smalltalk, Eiffel, Ada e Lisp. O código do proxecto distribúese baixo as licenzas BSD ("BSDL de dúas cláusulas") e "Ruby", que fai referencia á última versión da licenza GPL e é totalmente compatible con GPLv2.

Melloras principais:

  • Engadiuse un porto inicial dun intérprete CRuby que se compila en código intermedio de WebAssembly para executalo nun navegador web ou en tempos de execución autónomos como wasmtime. Para a interacción directa co sistema operativo cando se executa por separado, utilízase a API WASI (WebAssembly System Interface). Entre outras cousas, ofrécese unha ligazón VFS enriba de WASI, que lle permite empaquetar toda a aplicación en linguaxe Ruby nunha vista en forma dun único ficheiro wasm. A execución nun navegador pódese usar para crear servizos web de titoriais e de demostración como TryRuby. Na fase actual de desenvolvemento, o porto supera con éxito as probas básicas e de arranque, que non usan a API Thread. O porto tampouco admite fibra, excepcións nin recollida de lixo.
  • O compilador JIT en proceso YJIT, creado polos desenvolvedores da plataforma de comercio electrónico Shopify como parte dunha iniciativa para aumentar o rendemento dos programas Ruby que usan o marco Rails e chaman a moitos métodos, foi declarado estable e listo para uso da produción. A diferenza fundamental co compilador MJIT JIT usado anteriormente, que se basea no procesamento de métodos e usa un compilador C externo, é que YJIT usa Lazy Basic Block Versioning (LBBV) e contén un compilador JIT integrado. Grazas a LBBV, JIT compila só o principio do método ao principio, e compila o resto despois dun tempo, despois de que se determinen os tipos de variables e argumentos utilizados durante a execución. YJIT está dispoñible para arquitecturas x86-64 e arm64/aarch64 en Linux, MacOS, BSD e outras plataformas UNIX.

    A diferenza de CRuby, o código YJIT está escrito en Rust e require o compilador rustc 1.58.0+ para compilalo, polo que a compilación YJIT está desactivada por defecto e é opcional. Ao usar YJIT, rexistrouse un aumento do 41% no rendemento ao executar a proba de banco yjit en comparación co uso da interpretación.

    Lanzamento da linguaxe de programación Ruby 3.2

  • Engadiuse protección adicional contra ataques que provocan denegación de servizo ao procesar datos externos en expresións regulares (ReDoS) ineficientes e de longa duración. Algoritmo de coincidencia significativamente mellorado, que utiliza a técnica de memorización. Por exemplo, o tempo de execución da expresión '/^a*b?a*$/ =~ "a" * 50000 + "x"' reduciuse de 10 a 0.003 segundos. O prezo da optimización é un aumento do consumo de memoria, cuxo consumo é unhas 10 veces maior que o tamaño dos datos de entrada. A segunda medida de seguridade é a capacidade de definir un tempo de espera (por exemplo, "Regexp.timeout = 1.0"), para o cal a expresión regular debe ter tempo para ser procesada.
  • Inclúese o modo syntax_suggest para axudar a diagnosticar as causas dos erros asociados cunha instrución de peche "end" que falta ou redundante. `fin' non coincidente, falta unha palabra clave (`facer', `def`, `se`, etc.)? 1 clase Can > 2 defbark > 3 end 4 end
  • Engadiuse a capacidade de marcar argumentos en caso de erros relacionados con tipos e argumentos ao modo de localización de erros, por exemplo: test.rb:2:in `+': non se pode forzar nil a Integer (TypeError) sum = ary[ 0] + ary [1] ^^^^^^
  • Engadida nova sintaxe para redireccionar a outros métodos de conxunto de argumentos: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler proposto - unha variante do antigo compilador MJIT JIT, reescrito na linguaxe Ruby. Asegurouse a execución de MJIT nun proceso separado, en lugar da execución no fío de traballo MJIT.
  • En Bundler 2.4, o manexo de dependencias usa o buscador de versións de PubGrub, tamén usado polo xestor de paquetes pub para Dart. O algoritmo de Molinillo usado anteriormente segue usándose en RubyGems, pero tamén será substituído por PubGrub no futuro.
  • Versións actualizadas dos módulos de xoias da biblioteca estándar e integrados.

Fonte: opennet.ru

Engadir un comentario