• Ruby 4.0 – ett stort steg framåt för ett klassiskt språk

    Ruby 4.0 markerar ett av de största kliven i språkets historia, där fokus ligger på isolering, parallellism och prestanda utan att kompromissa med Rubys välkända läsbarhet. Med ny teknik som Ruby Box, en helt ny JIT-kompilator och ett kraftigt förbättrat stöd för parallell exekvering visar Ruby att språket är redo att möta moderna krav – samtidigt som det fortsätter att sätta utvecklarens upplevelse i centrum.

    När Ruby 4.0 nu har släppts markerar det mer än bara ännu en versionssiffra. Det är ett tydligt tecken på att ett av världens mest omtyckta programmeringsspråk fortsätter att utvecklas – både tekniskt och filosofiskt – i en tid där krav på prestanda, parallellism och säkerhet är högre än någonsin. Ruby har länge varit känt för sin läsbarhet och sin glädjeprincip: programmering ska vara roligt. Med Ruby 4.0 försöker utvecklarna bevisa att man inte längre behöver välja mellan elegans och råstyrka.

    Ruby Box – isolering utan containrar

    Den kanske mest nyskapande nyheten är Ruby Box, en experimentell teknik för isolering inuti samma Ruby-process. Genom att starta Ruby med miljövariabeln RUBY_BOX=1 kan man skapa separata ”lådor” där klasser, moduler, globala variabler, monkey patches och till och med inlästa bibliotek hålls helt åtskilda. Det gör det möjligt att köra testfall som använder aggressiva monkey patches utan att påverka andra tester, köra flera versioner av samma webbapplikation parallellt vid blue-green-driftsättning eller testa nya beroenden i realtid genom att jämföra beteende och svar. Allt detta sker utan containrar eller separata processer – isoleringen sker direkt i Ruby-motorn.

    ZJIT – nästa generations prestandasatsning

    Ruby 4.0 introducerar också ZJIT, en ny experimentell just-in-time-kompilator som är tänkt att på sikt ersätta YJIT. ZJIT är skriven i Rust och använder större kompileringsenheter samt en modern SSA-baserad mellanrepresentation. Resultatet är redan nu snabbare än den traditionella tolken, även om den fortfarande ligger efter YJIT. Utvecklarna är tydliga med att ZJIT ännu inte är redo för produktion, men ambitionen är att den ska vara både snabbare än YJIT och stabil nog för skarp drift i Ruby 4.1. För den nyfikne kan ZJIT aktiveras med flaggan –zjit.

    Ractor tar ett steg mot mognad

    Parallell programmering har länge varit en svag punkt i Ruby, men Ractor-modellen fortsätter att utvecklas. I Ruby 4.0 introduceras klassen Ractor::Port, som ersätter tidigare mer svårbegripliga API:er som Ractor.yield och Ractor#take. Kommunikation mellan parallella delar av ett program blir tydligare och mer robust. Samtidigt har interna datastrukturer förbättrats för att minska låsning kring globala resurser, minska delad intern data och förbättra CPU-cache-beteende. Tillsammans ger detta märkbart bättre parallell prestanda, och målet är att Ractor snart ska lämna sin experimentella status helt.

    Små språkliga förändringar med stor effekt

    Ruby 4.0 innehåller också flera språkliga justeringar som gör vardagen trevligare för utvecklare. Logiska operatorer som && och || kan nu stå i början av en rad och fortsätta föregående uttryck, vilket gör flerradiga villkor mer lättlästa. Beteendet för *nil har gjorts mer konsekvent och anropar inte längre nil.to_a, i linje med hur **nil redan fungerar. Felmeddelanden vid fel antal argument är tydligare och innehåller både bättre bakspårning och kodutdrag. Unicode-stödet har uppdaterats till version 17.0, inklusive nya emoji.

    Ett snabbare och renare Ruby under huven

    Bakom kulisserna har Ruby 4.0 fått omfattande prestandaförbättringar. Objekt skapas snabbare, särskilt när nyckelordsargument används. Garbage collectorn arbetar effektivare, intern åtkomst till instansvariabler har optimerats och många gamla låsningar i heta kodvägar har tagits bort. Standardbiblioteket har samtidigt städats upp: vissa komponenter har flyttats eller uppdaterats, andra – som delar av CGI-biblioteket – levereras inte längre fullt ut som standard.

    Framåtblick

    Ruby 4.0 är inte bara en inkrementell uppdatering utan ett tydligt ställningstagande. Språket vill fortsätta vara uttrycksfullt och lättläst, men samtidigt möta moderna krav på prestanda, parallellism och isolering. Med Ruby Box, ZJIT och ett allt mer moget Ractor-system visar Ruby att det går att förnya sig utan att förlora sin identitet. För utvecklare innebär det en tydlig signal: Ruby är långt ifrån färdigt – det har precis växlat upp.

    https://www.ruby-lang.org/en

    Fakta: Ruby 4.0
    Ny isolering: Ruby Box (experimentellt) isolerar klasser, moduler, globala variabler, monkey patches och även inlästa bibliotek per “box”. Aktiveras med RUBY_BOX=1.
    Ny JIT: ZJIT (experimentellt) efterföljare till YJIT – metodbaserad JIT med större kompileringsenheter och SSA-baserad IR. Byggkrav: Rust 1.85+. Aktiveras med –zjit.
    Parallellism: Ny Ractor::Port för tydligare kommunikation mellan Ractors. Äldre API:er som Ractor.yield och Ractor#take är borttagna.
    Språknytt: Logiska operatorer i början av rad (&&, ||, and, or) fortsätter föregående rad. *nil beter sig nu konsekvent och anropar inte längre nil.to_a.
    Standardbibliotek & core: Set och Pathname är core-klasser, och Unicode är uppdaterat till 17.0 (inkl. Emoji 17.0).
    Kompatibilitet: Flera deprecated API:er är borttagna (bl.a. äldre Ractor-metoder). Windows-bygg kräver Visual Studio 2015+.


Etikett: Ruby Box

  • Ruby 4.0 – ett stort steg framåt för ett klassiskt språk

    Ruby 4.0 markerar ett av de största kliven i språkets historia, där fokus ligger på isolering, parallellism och prestanda utan att kompromissa med Rubys välkända läsbarhet. Med ny teknik som Ruby Box, en helt ny JIT-kompilator och ett kraftigt förbättrat stöd för parallell exekvering visar Ruby att språket är redo att möta moderna krav –…