• GCC 16.1 är här – och C++ tar ett stort kliv in i 2020-talet

    GCC 16.1 är här och markerar början på en ny fas för GNU Compiler Collection. Med C++20 som nytt standardläge, experimentellt stöd för kommande C++26-funktioner och förbättringar för både diagnostik, optimering och modern hårdvara är detta en release som kan få stor betydelse för utvecklare. Samtidigt kan äldre kodbaser behöva ses över när kompilatorn tar ett tydligt steg bort från C++17-eran.

    Den fria kompilatorsamlingen GCC har fått en ny storversion. Med GCC 16.1 startar den nya GCC 16-serien, och även om en kompilatorrelease kanske inte låter som något som får pulsen att rusa hos alla, är detta en version som många utvecklare kommer att märka av.

    Den största nyheten är att GCC nu byter standardläge för C++: från GNU C++17 till GNU C++20.

    Det betyder att den som kompilerar C++-kod utan att själv ange språkversion nu automatiskt får C++20 som utgångspunkt. För moderna projekt är det goda nyheter. För äldre kodbaser kan det däremot innebära att vissa saker behöver justeras.

    C++20 blir det nya normala

    C++20 var ett stort steg för programmeringsspråket C++. Det introducerade bland annat nya sätt att skriva generisk kod, förbättrade standardbibliotek och funktioner som gör språket mer uttrycksfullt. Att GCC nu gör GNU C++20 till standard är därför en tydlig signal: C++20 är inte längre något framtidsläge, utan något utvecklare bör räkna med i vardagen.

    För de flesta projekt innebär det inte nödvändigtvis katastrof. Men kod som byggts med antagandet att kompilatorn använder C++17 kan börja bete sig annorlunda eller ge nya felmeddelanden. Lösningen är ofta enkel: ange uttryckligen vilken standard projektet ska byggas med, till exempel med flaggan -std=gnu++17, eller uppdatera koden så att den fungerar bra med C++20.

    GCC-utvecklarna meddelar också att stödet för C++20:s standardbibliotek nu räknas som stabilt. Däremot är C++20-moduler fortfarande experimentella och kräver särskild aktivering med -fmodules.

    En försmak av C++26

    GCC 16.1 blickar också framåt. Versionen innehåller experimentellt stöd för flera funktioner som är på väg in i C++26, alltså en kommande version av C++-standarden.

    Bland nyheterna finns stöd för reflection, där program kan undersöka delar av sin egen struktur, contracts, som kan användas för att uttrycka krav och garantier i kod, constexpr exceptions, vilket stärker möjligheterna att göra beräkningar vid kompilering, samt nya bibliotekstyper som std::simd, std::inplace_vector, std::copyable_function och std::function_ref.

    Det här är inte funktioner man bör kasta in i produktionskritisk kod hur som helst. De är fortfarande experimentella. Men för språkintresserade utvecklare och verktygsmakare är GCC 16.1 ett viktigt steg mot nästa generation C++.

    Algol 68 gör oväntad entré

    En av de mer oväntade nyheterna är att GCC nu får en experimentell frontend för Algol 68, kallad ga68.

    Algol 68 är ett klassiskt programmeringsspråk från datorhistoriens mer akademiska hörn. Det hade stort inflytande på senare språk, även om det aldrig blev lika vardagligt använt som C, Pascal eller Fortran. Att GCC nu får stöd för Algol 68 är därför både tekniskt intressant och lite nostalgiskt.

    Frontend:en bygger på språket så som det beskrivs i den reviderade rapporten, inklusive godkända rättelser, och innehåller dessutom vissa GNU-utökningar samt en POSIX-prelude.

    Bättre felmeddelanden och modernare analys

    Kompilatorer handlar inte bara om att omvandla kod till körbara program. De är också ett av utvecklarens viktigaste verktyg för att förstå vad som gått fel.

    I GCC 16.1 har diagnostiken förbättrats. GCC kan nu generera fel- och varningsmeddelanden i ett experimentellt HTML-format, vilket kan göra rapporter mer lättlästa i webbläsare eller utvecklingsverktyg.

    Samtidigt förbättras SARIF-stödet med ny information om kontrollflöde. SARIF är ett format som används för maskinläsbara analysrapporter, till exempel i säkerhetsverktyg och CI-system.

    Det äldre JSON-formatet för diagnostik har tagits bort. Användare som behöver maskinläsbara felrapporter hänvisas i stället till SARIF.

    Mer stöd för moderna språkfunktioner

    På C-sidan utökas stödet för C23 och typen _BitInt till fler processorarkitekturer, bland annat RISC-V, Arm, S/390 och LoongArch. Det gör det enklare att skriva kod som arbetar med heltal av mer exakt definierade bitstorlekar.

    C-frontend:en får också stöd för så kallad counted-by-attribution för pekarfält, vilket kan hjälpa kompilatorn och analysverktyg att förstå hur stora vissa datastrukturer är.

    Fortran-användare får dessutom förbättringar i coarray-stödet. På system med en enda nod finns nu stöd för delat minne med flera trådar, vilket kan förbättra parallella Fortran-program.

    Snabbare kod genom bättre optimeringar

    Som vanligt i en ny GCC-version finns även en rad optimeringsförbättringar. GCC 16.1 har bland annat bättre vektorisering, alltså förmågan att omvandla kod så att processorn kan utföra flera operationer parallellt.

    Kompilatorn kan nu också vektorisera vissa loopar där antalet varv inte är känt i förväg, och hanteringen av reduktioner och tidiga loopavbrott har förbättrats.

    Även Link-Time Optimization, LTO, har fått förbättringar. LTO gör det möjligt för kompilatorn att optimera över flera källfiler när programmet länkas ihop. I GCC 16.1 hanteras top-level assembly bättre med hjälp av flaggan -flto-toplevel-asm-heuristics.

    Dessutom har spekulativ devirtualisering byggts ut, vilket kan hjälpa kompilatorn att optimera indirekta funktionsanrop när den kan göra kvalificerade gissningar om vilken funktion som faktiskt kommer att köras.

    Nya processorer och mer hårdvarustöd

    GCC 16.1 uppdaterar också stödet för ny hårdvara.

    På x86-sidan tillkommer stöd för AMD Zen 6 med -march=znver6, Intel Wildcat Lake med -march=wildcatlake och Intel Nova Lake med -march=novalake.

    För AMD GPU-offloading finns nu experimentellt stöd för MI300, och även LoongArch och IBM Z får ytterligare förbättringar.

    För vanliga användare märks detta kanske inte direkt. Men för den som bygger program för nya servrar, superdatorer eller specialiserad hårdvara kan kompilatorstöd vara avgörande för att få ut maximal prestanda.

    En version som kan kräva städning

    Som med många stora kompilatoruppdateringar finns en hake: kod som fungerade i tidigare GCC-versioner kan behöva ändras.

    Det beror både på den nya C++20-standarden som standardläge och på att kompilatorn blivit bättre på att upptäcka problem. I praktiken kan detta leda till fler varningar eller kompileringsfel i projekt som tidigare byggde utan problem.

    För utvecklare är rådet enkelt: testa tidigt, ange språkstandard tydligt i byggsystemet och läs igenom varningarna. Många av dem kan peka på verkliga problem som tidigare bara råkade passera obemärkt.

    Sammanfattning

    GCC 16.1 är mer än bara ännu en versionssiffra. Det är en tydlig markering om vart C++-världen är på väg. Med C++20 som nytt standardläge, experimentellt stöd för C++26, förbättrad diagnostik, bättre optimeringar och stöd för ny hårdvara är detta en viktig release för både systemutvecklare och språkentusiaster.

    För den som arbetar med äldre C++-kod gäller det att vara uppmärksam. För den som vill använda modernare språkfunktioner är GCC 16.1 däremot ett välkommet steg framåt.

    ”`html

    Faktaruta: GCC 16.1

    > Release: GCC 16.1 är den första stabila versionen i GCC 16-serien.

    > Största nyheten: C++ använder nu GNU C++20 som standard i stället för GNU C++17.

    > För utvecklare: Äldre projekt kan behöva ange språkstandard med exempelvis -std=gnu++17.

    > Framtidsstöd: Experimentellt stöd finns för flera C++26-funktioner.

    > Övrigt: GCC 16.1 innehåller även bättre diagnostik, optimeringar och stöd för ny hårdvara.

    ”`
  • Go 1.25 – Nya funktioner, snabbare prestanda och experimentella tekniker

    Go är ett urgammalt strategibrädspel från Kina, spelat med svarta och vita stenar på ett rutnät. Målet är att omringa områden och fånga motståndarens stenar. Det har inget att göra med programmeringsspråket Go. Reglerna är enkla men spelet är djupt och komplext.I Go betyder atari att en sten eller grupp har bara en fri punkt kvar och riskerar att fångas nästa drag. Företaget Atari valde namnet för att det signalerar ett kritiskt och avgörande läge i spelet.

    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 doc kan 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 paketet fmt fö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 goroutines och chan utan 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.0 slä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 .

  • Första intrycket av Debian 13.0 – från VMware till äldre hårdvara

    Debian är känt som en stabil och flexibel Linux-distribution, ofta använd som grund för andra populära system som Ubuntu. Med version 13.0 är det tydligt att utvecklarna fortsätter att balansera på den svåra linjen mellan kraftfullt och lättillgängligt. Jag har testat den både i en virtuell miljö på toppmodern hårdvara och på en äldre laptop – två scenarier som ger helt olika perspektiv.

    Installation och första upplevelser

    För det första testet valde jag Debian 13 Netinstall, en ISO-fil på cirka 700 MB. Den är smidig att ladda ner, men kräver att det mesta av systemet hämtas via internet under installationen. För den som har begränsad uppkoppling, särskilt på landsbygden där 5G fortfarande är en dröm, är det bättre att välja en komplett ISO med fler paket inkluderade från början.

    Installationen i VMware gick snabbt och problemfritt. På min Intel i9 med 32 GB RAM var hela processen avklarad på några minuter. Det är dock viktigt att komma ihåg att detta inte säger mycket om hur systemet känns på äldre datorer – här får VMware ett oförtjänt försprång genom att buffra resurser.

    Skrivbordsmiljöer: från Gnome till KDE Plasma

    Debian erbjuder flera skrivbordsmiljöer direkt vid installationen. Jag började med Gnome, men fann snabbt att Debians standardkonfiguration inte passade mina vanor. I Ubuntu är jag van vid att aktivitetsfältet ligger till vänster, medan Debian placerar det högst upp på skärmen. Resultatet? Mer musrörelser och mindre effektivitet.

    Lösningen blev att byta till KDE Plasma. Med sitt mer traditionella upplägg – menyn längst ner till vänster – kändes det som hemma, kanske på grund av mina år av Windows-användning. Plasma i Debian är både responsivt och anpassningsbart, vilket gör det lätt att forma miljön efter sina behov.

    Prestanda i VM

    Trots att den virtuella maskinen bara fick 2 GB RAM och 2 processorkärnor var prestandan överraskande bra. Att surfa i Firefox, redigera bilder i GIMP 3 och skriva i LibreOffice gick utan problem. Först vid mer resurskrävande uppgifter, som att streama SVT Play, märktes en viss tröghet.

    Test på äldre hårdvara

    För att få en mer rättvis bild installerade jag Debian 13 på en HP-laptop med första generationens Intel i7, 4 GB RAM och mekanisk hårddisk – BIOS daterat 2011. Installationen tog betydligt längre tid än i VM, drygt en timme, men gick i övrigt smidigt.

    Jag valde att installera alla tillgängliga fönsterhanterare för att kunna jämföra. Här stötte jag dock på en bugg: att byta mellan dem fungerade inte alltid som det skulle. Genom att växla till konsolläge och skapa en ny användare löste jag problemet.

    Plasma på Wayland vs. XFCE

    Första valet blev Plasma på Wayland, men prestandan var medioker – gränssnittet kändes segt och tungt. När jag istället loggade in med XFCE förändrades upplevelsen totalt. Systemet drog då endast runt 2 GB RAM och klarade att streama SVT utan märkbara fördröjningar. Även KDE fungerade, men hade längre laddningstider.

    Detta är en av Debians styrkor: möjligheten att själv välja skrivbordsmiljö och anpassa systemet efter hårdvaran. På äldre datorer är XFCE en klar vinnare.

    Hårddiskens betydelse

    Den mekaniska hårddisken var den största flaskhalsen i testet. För den som vill återbruka äldre datorer är det nästan alltid värt att byta till SSD – skillnaden i hastighet är dramatisk, särskilt vid start och programladdning.

    Slutsats

    Debian 13.0 är en imponerande uppdatering. Distributionen har blivit betydligt mer användarvänlig än förr, utan att tappa sin flexibilitet eller tekniska styrka. På modern hårdvara är den blixtsnabb, och med rätt skrivbordsmiljö fungerar den även utmärkt på äldre datorer.

    För nybörjare kan installationen av Netinstall-varianten kännas teknisk, men den som ger Debian en chans får ett system som kan skräddarsys från minimalistiskt till fullspäckat – och som är redo att tjäna i många år framöver.

Etikett: optimering

  • GCC 16.1 är här – och C++ tar ett stort kliv in i 2020-talet

    GCC 16.1 är här och markerar början på en ny fas för GNU Compiler Collection. Med C++20 som nytt standardläge, experimentellt stöd för kommande C++26-funktioner och förbättringar för både diagnostik, optimering och modern hårdvara är detta en release som kan få stor betydelse för utvecklare. Samtidigt kan äldre kodbaser behöva ses över när kompilatorn tar…

  • 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 CollectorEn av de mest intressanta nyheterna är en…

  • Första intrycket av Debian 13.0 – från VMware till äldre hårdvara

    Debian är känt som en stabil och flexibel Linux-distribution, ofta använd som grund för andra populära system som Ubuntu. Med version 13.0 är det tydligt att utvecklarna fortsätter att balansera på den svåra linjen mellan kraftfullt och lättillgängligt. Jag har testat den både i en virtuell miljö på toppmodern hårdvara och på en äldre laptop…