Ruby 4.0 släppt med Ruby Box-isolering och ny ZJIT-kompilator
Ruby 4.0 är nu tillgängligt och introducerar den experimentella Ruby Box-isoleringsfunktionen, den nya ZJIT-kompilatorn samt förbättringar av prestanda och samtidighet.
Ruby 4.0, ett högnivå, allmänt programmeringsspråk, har släppts och introducerar ny isolerings- och kompileringsteknik tillsammans med omfattande uppdateringar av prestanda, samtidighet och standardbibliotek.
Den mest uppmärksammade nyheten är Ruby Box, en ny experimentell mekanism utformad för att isolera definitioner inom en körande Ruby-process. När den aktiveras via miljövariabeln RUBY_BOX=1 tillåter Ruby Box att klasser, moduler, globala variabler, monkey patches och till och med inlästa bibliotek begränsas till en specifik box.
Detta möjliggör användningsfall som att köra testsviter säkert när monkey patches används, köra flera versioner av en webbapplikation sida vid sida för blue-green-distributioner, eller utvärdera uppgraderingar av beroenden parallellt genom att jämföra körbeteende.
En annan stor förändring är introduktionen av ZJIT, en ny experimentell just-in-time-kompilator som efterträdde YJIT. ZJIT är en metodbaserad JIT byggd med större kompilationsenheter och en SSA-baserad mellanrepresentation, för att höja Rubys långsiktiga prestandatak och göra kompilatorn mer tillgänglig för externa bidragsgivare.
ZJIT kräver Rust 1.85 eller nyare för att byggas och kan aktiveras med –zjit-alternativet eller vid körning. I Ruby 4.0 presterar ZJIT redan bättre än tolken, även om den fortfarande ligger efter YJIT. Ruby-kärnteamet avråder från användning i produktion och rekommenderar experimentering, med det uttalade målet att göra ZJIT redo för produktion och snabbare än YJIT i Ruby 4.1.
Dessutom introducerar Ruby 4.0 den nya Ractor::Port-klassen för att ge en tydligare och mer robust kommunikationsmekanism mellan Ractors, som ersätter tidigare API:er som Ractor.yield och Ractor#take, vilka nu har tagits bort. Ractors drar också nytta av minskad konkurrens om globala lås, mindre delat internt tillstånd och förbättrat CPU-cachebeteende, vilket alla bidrar till bättre parallell prestanda.
På språkets nivå inkluderar Ruby 4.0 flera anmärkningsvärda förändringar. Logiska operatorer i början av en rad fortsätter nu den föregående raden, vilket förbättrar läsbarheten i flerradiga villkor. Hanteringen av *nil har justerats för att stämma överens med andra splat-beteenden, och felrapporteringen för mismatch i antalet argument har förbättrats med tydligare backtraces och kontextuella kodsnuttar.
Kärnklasser och moduler får en rad förbättringar. Arrayer får mer effektiva sökmetoder, Enumerator blir bättre på att känna till storleken, File::Stat visar filens skapelsestid på Linux när det stöds av kärnan och filsystemet, och Set har flyttats från standardbiblioteket till en kärnklass med en förenklad inspect-utdata.
Pathname är nu också en kärnklass, och Unicode-stödet har uppdaterats till version 17.0, inklusive Emoji 17.0. Många API:er inom IO, Fiber, Thread, Socket och Kernel har förfinats, utökats eller rensats genom att ta bort länge föråldrade funktioner.
Standardbiblioteket har också omorganiserats. Flera medföljande gems har uppgraderats från standardstatus, andra har uppdaterats till nyare större versioner, och vissa komponenter har tagits bort eller delats upp, såsom CGI-biblioteket, som inte längre tillhandahålls i fullständig version som standard.
På implementeringssidan erbjuder Ruby 4.0 omfattande prestandaförbättringar. Objekt skapande är snabbare, särskilt när nyckelordsargument används. Skräpsamling är mer effektiv på flera sätt, åtkomst till instansvariabler har optimerats internt, och låsning har minskats i många kritiska sektioner.
Slutligen introducerar Ruby 4.0 även kompatibilitetsförändringar som utvecklare behöver känna till. Flera föråldrade API:er har tagits bort, inklusive äldre process-skapande beteenden och äldre Ractor-metoder, och vissa C-API:er har blivit föråldrade eller justerade för att förbättra säkerhet och korrekthet. Stöd för Windows kräver nu Visual Studio 2015 eller nyare.
För mer information, se tillkännagivandet.
