Roslyn

Siden C# blev skabt er kompileringen blevet udført af en compiler der er skrevet i C++. Allerede for år tilbage var der rygter om at Microsoft gerne ville ændre på dette og lade sproget kompilere sig selv – Mads Torgersen jokede dengang med at de blot skulle de-kompilere compileren til C# med Reflector.

Det er selvfølgeligt ikke sådan at det er foregået – projektet har haft mange andre målsætninger end blot at oversætte miljøet til et andet sprog og har ført frem til det de i dag kalder compiler as a service og på GOTO konferencen i Århus præsenterede Mads Torgersen resultatet.

Open-source

En af de store ændringer er at hele compileren nu er open-source og findes på Codeplex. Det betyder naturligvis at man kan forke kode, lave pull-requests osv. Det har uden tvivl også lettet arbejdet for Xamarin-folkene (der laver C#-til-native-compilere til de mobile platforme), hvis compiler rent faktisk allerede var skrevet i C#. I forbindelse med dette har Microsoft og Xamarin skabt en uafhængig organisation, .NET Foundation til at dele og fremme open-source-miljøet omkring .NET.

SDK

En af motivationerne for at have compileren i C# har naturligvis været at øge produktiviteten internt i Microsoft – i stedet for at C# eksperter til at sidde og tæske rundt i C++ for at skabe nye funktioner, kan alt udvikling nu foregå i sproget selv.

Men ud over dette har motivationen også været at give os som udviklere helt nye måder at arbejde med vores kode på. Tidligere var alle redskaber til læsning, analyse, modifikation af kode forbeholdt de få, nu har Microsoft skabt et rigt API med mange udvidelsespunkter som vi alle kan bruge.

Med Roslyn har Microsoft udgivet et SDK der indeholder eksempler, projektskabeloner, værktøjer osv. der gør det let at komme i gang med at skabe sine egne små kode-regler og værktøjer. Installerer man SDK’et får man ligeledes nogle nye redskaber i Visual Studio, der visuelt viser et parse-træ over ens kode, klar til analyser og manipulationer. Drømmen er at projekter i fremtiden kan komme med kode-analysering, lige som de i dag ofte kommer med kode-tests.

C♯

Selvom fokus på næste udgivelse af .NET har været Roslyn – har der også været plads til at forbedre lidt på sprogene – og nogle af de nye små features i C# 6 er:

Binære literaler

Skulle man i gamle dage konvertere fra en binær værdi kunne det foregå sådan her:

int i = Convert.ToInt32("01101101", 2);

Og det kan med den nye udgave gøres enklere (adskillere er optionelle):

int i = 0b0010_0110_0000_0011;

Import af statiske klassemedlemmer

Hvis man i dag skal kalde en statisk funktion på en klasse skal klassen stå først:

import System;

Console.WriteLine("hello world")

Nu kan det gøres med:

import System.Console;

WriteLine("hello world")

Primary constructors

En funktion der ligner meget det man har i TypeScript; automatisk oprettelse af felter. Her er felterne dog på selve klassedeklarationen:

public class Person(string navn, private int alder)
{
}

Her vil compileren give adgang til navn inden for scopet i klassen, samt for alder vil den oprette et privat felt for alder.

Inline variabler
For tidligere at kalde en funktion med out-parametre skulle man først erklære sine variabler for sig og herefter kalde funktionen:

int alder;
int.TryParse("23", out alder);

Dette kan nu gøres i ét og endda med automatisk type-udledning og initialisering:


int.TryParse("23", out var alder = 42;

Se flere nye features på Codeplex.

Med den nye udgave af .NET sprogene er det ikke længere forbeholdt sprognørder at analysere og modificere source. Selvom det i dag ikke er et behov der står øverst på ønskelisten er det med denne udgivelse blevet så nemt at arbejde med koden at vi nærmest skal betragte det som et nyt paradigme.

Det er ikke utænkeligt at teams i fremtiden vil have deres egen kodeanalysering som en del af deres bygge-proces, fx. for på forkant at fange den irriterende fejl de nu har rettet for tredje gang.

Lige som med TypeScript er C#-compileren nu helt open-source – det bliver spændende at se hvilke projekter der kan komme ud af det.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *