Spaningar från MS Build

Vi tänkte dela med oss av några spaningar från MS Build i maj i Seattle, några intensiva dagar med intressanta föreläsningar.

MS Build 2017

Visual Studio

Under eventet visade de en livedemo av det nya interfacet för enhetstester. Dessa tester kör live när man kodar och på så sätt får man reda i realtid ifall ens kod hänger ihop med det kontext man utgått ifrån när man skrev testerna. De visade också en ny AI som kan generera en kodkonvention utifrån en befintlig kodbas. Konventionen läggs i editorkonfigurationen som vanligt.

Några sidonoteringar de gjorde var att det finns ett enkelt sätt att definera ”dockers” i efterhand för ens ”containers”. Stödet för Mac i Visual Studio är mer utbrett och med ett enkelt högerklick går det att deploya direkt till Azure. Dessutom visade de att Windows nu har nativ stöd för Linux kommandotolk och att man kan ladda ner Ubuntu och Suse mm via Store och köra dessa virtuellt. Detta är för att skapa ett bredare utvecklingsstöd för de som inte bara utvecklar mot Windows-miljöer. Som slutpunkt på de olika sidonoteringarna visade de att de numer stödjer programmeringsspråket R i Visual Studio-editorn.

Kanske var det fräckaste på den här sessionen när de laddade ner en ”debugger snapshot” ifrån Azure och laddade Visual Studio-debuggern med denna. Detta är en stor fördel om man behöver undersöka fel som uppstått i produktion då det också går att kolla på variablerna i Visual Studios ”watcher”.

Future of C#

De börjar nu med point releases och 7.2 kommer vara ”low level code”-lösningar. 7.3 å andra sidan kommer vara pattern matching.

I den här sessionen sas det inte mycket mer än det vi redan vet, det här var något som vi tog upp på 3bits interna konferens i januari. Det som var nytt var t ex att de vill få in tuples i standardbiblioteken i stället för i ett separat som det är nu. Fördelen med att ha det som de gjort nu är att det inte kräver en uppgradering utav .NET som antagligen bryter en hel del beroenden av gammal kod.

Tuples kommer kunna uttyda variabelnamn utifrån den syntax man angett, dvs ”syntactic suger” för nameof fast direkt i tuple-deklarationen. De har också lagt till stöd i Visual Studio-Intellisensen för att kunna byta mellan lambdaoperatorer olika ”expression bodies”, dvs ”=>” & ”{}”.

De pratade sedan om kommande versioner och saker de eventuellt skulle kunna tänka sig att stödja. En sådan sak var ”mutable structs”, vilket inte fick några applåder. Dock är tuples redan ”mutable structs” som går att dekonstruera till variabler men som alltså är mutable structs i sitt originalutförande.

I kommande punktnoteringar vill de tillåta async task i main, ”public static task main() { await ...}”. Detta underlättar enormt om man bara vill kicka igång ett konsolprogram för att testa lite parallellprogrammering. Här passade de också på att visa lite autocompletion som autoinitierade konstruktorargument, väldigt bra om man arbetar mycket med dependency injektion. Min spontana reaktion var: ”varför finns inte redan detta?”.

Nästa grej de arbetar på som kommer att komma i en punktuppgradering till C# 7, antagligen 7.3, är pattern matching och då också ”wildcards” som kommer skrivas med underscore.

I kommande ”major” uppdatering, dvs C# 8, funderar de på att tillåta interface att kunna implementera kod. Detta fick som kanske väntat inte så mycket support av publiken men det tog de tillbaka när de avslöjade att de vill göra typecheckern mer strikt. Detta kommer de göra som det är gjort i typescript, dvs att om du inte har definerat nullable kommer kompilatorn att klaga om du inte gör nullcheckar eller tillåter din metod att kunna returnera null utan att ha angivit det i metodsignaturen. På så sätt minskar de risken för null-referenser avsevärt men det kommer också innebära en breaking change eftersom 99 % av världens kod oavsiktligt tillåter.

Som en sista grej visade de en autocomplete på alla comparatorer och hashfunktioner. Detta är kod som man många gånger borde implementera för att ge rätt beteenden till sina objekt men gör det inte, nu är det lättare att göra det.

Signal R

Signal R-teamet kommer att porta teknologin in till .NET Core-biblioteken. De vill också stödja message queueing på så sätt att de kan skicka data där över med.

De har plockat bort beroendet till jQuery vilket både är på gott och ont eftersom jQuery gör livet lättare men det gör ens kod mer löst sammankopplad vilket stärker uppgraderingsmöjligheterna.

Det kommer tillåta .NET routing för att hitta sina hubbar i stället för att hårdkoda dessa. Detta är också en del i ett större grepp för att hantera skalning. En av de saker som inte har stött skalning har varit message id och det globala scopet. Detta har de nu arbetat om och de tillåter också Graceful shutdown.

De har också tagit bort ”reconnect message replay” vilket på ett sätt är tråkigt då det är en bra feature men den drar också ner prestandan och därför får man nu implementera detta själv.

Saker som de experimenterar med och visade på en demo var binär data och multi-platform-support. I demon filmade de sig själva med en Andriod-telefon och skickade datan framgångsrikt till en webbsajt de satt upp där de visade bilden i realtid och en Linux-server där de visade bilden i ascii-grafik via kommandotolken i realtid.

Det var många givande sessioner och vi tar med oss mycket hem i det fortsatta arbetet på 3bits.