.NET-ekspert om .NET 10: – Definitivt en feature vi vil ta i bruk

CTO Lars Alexander Jakobsen i Novanet har 20 års .NET-erfaring. Dette er de nye funksjonene han gleder seg til å prøve å .NET 10.

Lars Alexander Jakobsen er CTO i Novanet, med 20 års .NET-erfaring. Nå gleder han seg til .NET 10. 📸: Privat
Lars Alexander Jakobsen er CTO i Novanet, med 20 års .NET-erfaring. Nå gleder han seg til .NET 10. 📸: Privat Vis mer

Forrige uke lanserte Microsoft den første preview-versjonen av .NET 10, med en masse nytt blant annet i .NET Runtime, SDK-et, biblioteker, C#, ASP.NET Core, Blazor og .NET Maui.

Lars Alexander Jakobsen har 20 års erfaring som .NET-utvikler, og er CTO i Novanet, et konsulentselskap som har spesielisert seg på systemutvikling og arkitektur basert på nettopp .NET-plattformen. I tillegg er han styremedlem i .NET User Group Oslo (NNUG Oslo) og er med på å arrangere meetups for .NET-utviklere.

Jakobsen burde med andre ord vite hva han snakker om når vi spør han om hva han synes er det mest spennende nye i .NET 10:

– Av nyhetene som er presentert så langt, synes jeg HybridCache er den absolutt mest spennende. Selv om denne delvis har blitt lansert med .NET 9, er den nå helt klar i versjon 10, sier Jakobsen.

«Av nyhetene som er presentert så langt, synes jeg HybridCache er den absolutt mest spennende.»

Enklere caching

Jakobsen forteller at caching fort blir en viktig komponent når man skal lage løsninger der det fokuseres på ytelse.

– Man starter gjerne med caching i minnet, og i .NET bruker en ofte IMemoryCache til dette. I mer komplekse løsninger får man kanskje behov for en distribuert cache, som Redis, og kan introdusere dette via IDistributedCache, sier Jakobsen.

Han forklarer at man frem til nå selv har måttet ta ansvar for å kombinere disse to typene cache på en fornuftig måte, i tillegg til å løse komplekse utfordringer relatert til caching som «cache stampede» og «cache invalidation».

– Dette vil nå løses med HybridCache i .NET 10, og er definitivt en feature vi vil ta i bruk.

Bedre ytelse og flere forbedringer

Jakobsen ønsker ellers alle ytelsesforbedringer velkomne.

– De siste utgivelsene av .NET har hatt merkbare ytelsesforbedringer, både i kjøremiljøet (runtime) og når man bygger koden. .NET leverer veldig godt sammenlignet med andre rammeverk, selv om det ikke når helt opp til C++ og Rust ennå.

– Jeg håper på tilsvarende forbedringer i ytelse når .NET 10 kommer ut, så kanskje forskjellen blir enda mindre.

I tillegg til ytelsesforbedringene, nevner Jakobsen at de siste .NET-utgivelsene har kommet med viktige forbedringer i ASP.NET, spesielt forbedringer relatert til Blazor og MAUI. Dette er to relativt nye produkter bygget på .NET-rammeverket, hvor Blazor brukes til å lage webapplikasjoner og MAUI til å utvikle kryssplattformløsninger (iOS, Android, macOS og Windows).

«De siste utgivelsene av .NET har hatt merkbare ytelsesforbedringer.»

– Det er vel rundt 5 år siden disse produktene ble lansert, men det føles fremdeles som nye produkter med behov for både nye features og forbedringer rundt stabilitet og ytelse.

En av forbedringene i ASP.NET er støtte for OpenAPI 3.1, som ifølge Jakobsen er en viktig oppdatering, da denne versjonen av OpenAPI har flere endringer i forhold til forrige versjon. Flere tilsvarende endringer kommer i ASP.NET, hvor for eksempel MAUI vil støtte nyere versjoner av JDK (21), iOS (18.2), macOS (15.2) osv.

– Dette er viktig for at man skal kunne benytte seg av ny funksjonalitet i disse underliggende rammeverkene som ASP.NET og MAUI benytter seg av.

Noen er fortsatt på .NET 4.8!

– Det er jo ikke lenge siden .NET 9 kom. Hvor raskt hopper dere på nye versjoner etter hvert som de lanseres?

– Vi jobber ute i flere prosjekter, og her varierer det en del hvor raskt man hopper på nye .NET-versjoner. Generelt så ser vi at noen av de med større, komplekse løsninger holder seg til kun LTS-versjonene, da en oppgradering kan være omfattende arbeid, sier Jakobsen.

Med LTS får man support og oppdateringer i en lengre periode enn med STS-versjonene (Standard Term Support). LTS-versjonene skal også være mer stabile, mens STS gir tidligere tilgang til nye features og forbedringer.

– Noen steder kjører fremdeles .NET 4.8! Det er den siste versjonen med «full framework» før overgangen til .NET Core (som dagens versjoner baserer seg på).

Det varierer ifølge Jakobsen veldig hvor klare kundene er for å ta i bruk de nye versjonene.

«Uansett har oppgradering til nye versjoner blitt mye enklere etter overgangen til .NET Core.»

– Uansett har oppgradering til nye versjoner blitt mye enklere etter overgangen til .NET Core, og er man over, vil jeg nok anbefale å oppgradere ganske raskt når det kommer en ny major-versjon (i så fall LTS). Da unngår man å bli sittende fast på en eldre versjon, og man drar nytte av forbedringer rundt ytelse og stabilitet.

Norwegian .NET User Group har lanseringsparty når det kommer nye LTS-versjoner. Lars Alexander Jakobsen i midten. 📸: Privat
Norwegian .NET User Group har lanseringsparty når det kommer nye LTS-versjoner. Lars Alexander Jakobsen i midten. 📸: Privat Vis mer

Jakobsen forteller at hver gang det kommer en ny LTS-versjon, så holder .NET User Group Oslo et «Release Party».

– Da samler vi .NET-interesserte for gjennomgang av de nyeste oppdateringene i .NET-releasen og har en hyggelig sosial samling etterpå. Følg med på .NET User Group Oslo sin gruppe på Meetup.com, så kan du være med i november når .NET 10 sannsynligvis slippes.

Spennede nytt i C# 14

– Med .NET 10 kommer det også en ny versjon av C#. Er det noe spesielt du vil trekke frem med C#14?

– C# er et modent programmeringsspråk som har vært tilgjengelig siden 2002, så det er naturlig at det ikke kommer store endringer i en ny versjon. Men det er allikevel et par spennende features C# 14, sier Jakobsen.

En feature han tror kan bli nyttig er det som kalles «Numeric ordering for string comparison», hvor man kan sammenligne numeriske strenger for eksempel for å sortere disse.

– Et typisk scenario for dette er hvis man ønsker å sortere data fra et system hvor det er brukt et strengfelt til noe annet enn det det skal brukes til, for eksempel CustomField1 = postnr + poststed. NumericOrdering gjør det enklere å sortere og sammenligne strenger som inneholder numeriske data, slik som vist under:

StringComparer numericStringComparer = 
    StringComparer.Create(CultureInfo.CurrentCulture, CompareOptions.NumericOrdering);

Console.WriteLine(numericStringComparer.Equals("1001", "0000000001001"));
// Output : True
var array = new[]
{
    "Oslo 1001",
    "Oslo 0903",
    "Oslo 902",
    "Oslo 00001002",
};
foreach (string area in array.Order(numericStringComparer))
{
    Console.WriteLine(area);
}
// Output:
// Oslo 902
// Oslo 0903
// Oslo 1001
// Oslo 00001002

– En annen feature jeg tror at jeg kommer til å bruke er «Field Access in Auto-properties». Dette er ikke en revolusjonerende ny feature, men noe som forenkler koden, slik som mange av oppdateringene i C# i de siste utgivelsene.

En auto-property er en enkel måte å eksponere en property på en klasse:

public string Foo { get; set; }

Tidligere måtte man opprette en variabel hvis man ønsket å gjøre noe mer med denne enn å eksponere den, som for eksempel å trimme verdien når den settes:

string foo;

public string Foo { get => foo; set => foo = value.Trim(); }

Nå trenger man ikke opprette en variabel selv. Denne genereres i bakgrunnen, og man kan gjøre endringer mot variabelen med field-nøkkelordet:

public string Bar { get => field; set => field = value.Trim(); }

– En feature som jeg hadde håpet skulle være med er «Discriminated Unions». «Discriminated Unions» gjør det mulig å lagre forskjellige typer i samme variabel. Dette brukes mye i funksjonelle språk som F#. I de siste C#-utgivelsene har vi sett at C# har begynt å inkludere flere funksjonelle konsepter.

I F# ser det slik ut:

type Shape =

| Rectangle of width : float * length : float

| Circle of radius : float

| Prism of width : float * float * height : float

– Man kan oppnå mye av det samme med OneOf-biblioteket, men det er fint om dette kan støttes direkte i C#.

Jakobsen nevner også Type Unions for C#, som er en foreslått ny feature.

– Så man kan jo håpe denne kommer med i .NET 10 selv om den ikke er med i preview’en. Jeg får vente i spenning frem til release av .NET 10 i november!