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.
Go 1.25 – Nya funktioner, snabbare prestanda och experimentella tekniker

Go-projektet har släppt version 1.25 av sitt programmeringsspråk, och uppdateringen är full av förbättringar inom både verktyg, kompilator, runtime och standardbibliotek. Som vanligt kommer versionen precis sex månader efter föregångaren, men den här gången introduceras flera spännande nyheter – inklusive två större experimentella funktioner.
Ny experimentell Garbage Collector
En av de mest intressanta nyheterna är en ny garbage collector som är optimerad för att hantera många små objekt mer effektivt. Tester visar att den kan minska minneshanteringskostnaden med 10–40 % i praktiska scenarier. Den är inte aktiverad som standard – utvecklare behöver slå på den själva och kan sedan lämna feedback till Go-teamet.
Snabbare och mer flexibel JSON-hantering
Den andra stora experimentella nyheten är paketet encoding/json/v2. Det är en uppdaterad JSON-implementation som lovar snabbare avkodning och fler konfigurationsmöjligheter. Även den här funktionen kräver att man aktivt väljer att använda den.
Automatisk optimering i container-miljöer
Go 1.25 gör att GOMAXPROCS nu automatiskt anpassar sig efter tillgängliga CPU-resurser i miljöer som Kubernetes. Tidigare krävdes manuell konfigurering för att uppnå detta.
Förbättringar i kompilatorn
- Snabbare allokering av slices.
- DWARF5-debuginformation, vilket minskar storleken på binärer och påskyndar länkning, särskilt i större projekt.
Förbättrade utvecklingsverktyg
- Nya
go vet-kontroller som fångar upp vanliga programmeringsfel. - Möjlighet att ignorera mappar direkt i
go.mod. go dockan nu köra en lokal dokumentationsserver med flaggan-http.- Ett helt nytt paket –
testing/synctest– gör det lättare att testa parallell kod utan risk för klassiska race condition-problem.
Standardbiblioteket och säkerhet
- Förbättrad prestanda i kryptografiska algoritmer.
- Mer konsekvent hantering av ASN.1-data.
- Nya funktioner för nätverks- och TLS-anslutningar.
Plattformsförändringar
- Äldre versioner av macOS stöds inte längre.
- Go 1.25 är den sista versionen med stöd för 32-bitars Windows/ARM, som nu tas ur bruk.
Tillgänglighet
Go 1.25 kan laddas ned som färdiga binärfiler och installationspaket från den officiella nedladdningssidan. En fullständig lista över alla ändringar finns i Go 1.25 Release Notes, och fler blogginlägg från utvecklingsteamet väntas de närmaste veckorna.
Exempel i språket go
Ett enkelt program som skriver Hello, World! i terminalen:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
Förklaring:
package main– anger att programmet är ett körbart program.import "fmt"– tar in paketetfmtför utskrift.func main()– huvudfunktionen som körs först.fmt.Println(...)– skriver ut text med radbrytning.
Kör programmet:
go run hello.go
Kompilera till en binärfil:
go build -o hello hello.go
./hello
Faktaruta: programmeringsspråket Go
Översikt
Go (även kallat Golang) är ett kompilerat, statiskt typat språk från Google med inbyggd
stöd för samtidighet (goroutines och kanaler), snabb kompilering och enkel distribution
som fristående binärer.
Vad språket klarar
- Högpresterande nätverks- och serverprogram med låg latens.
- Massiv samtidighet via
goroutinesochchanutan trådbekymmer. - Snabb kompilering till statiska, portabla binärer (lätt att containerisera).
- Inbyggd minnessäkerhet och garbage collection.
- Stort standardbibliotek: nätverk, HTTP, kryptografi, testning m.m.
- Förstklassiga verktyg:
go build,go test,go fmt,go vet, moduler.
Vanliga användningsområden
- Moln- och mikrotjänster, REST/GraphQL-API:er.
- Distribuerade system, nätverksservrar, proxyer och gateways.
- DevOps- och plattformsverktyg (t.ex. Docker, delar av Kubernetes-ekosystemet).
- Kommandoradsverktyg och automation.
- Data- och meddelandeflöden (streaming), observability/telemetri.
Kort historik
- Startat på Google av Robert Griesemer, Rob Pike och Ken Thompson.
- Offentligt presenterat 2009; version
1.0släpptes 2012. - Designmål: enkelhet, snabbhet, effektiv samtidighet och stark verktygskedja.
Styrkor & saker att känna till
- Styrkor: enkel syntax, snabb kompilering, robust standardbibliotek, utmärkt samtidighetsmodell.
- Observera: minimalistisk generik (finns), inga undantag (errors hanteras explicit), mindre fokus på OOP-arv; GUI och mycket tunga numeriska arbetsflöden görs ofta i andra ekosystem.
Exempel (körbar binär i en fil): go build -o app .


