Microsoft-dansker gør C#-udviklere klogere med nyt kodeværktøj

Microsofts nye Roslyn-compilere lover hurtigere og mere effektiv udvikling til C#- og Visual Basic-programmører. Men de når desværre ikke med i Visual Studio 2012.

GOTO Copenhagen 2012. Hvis du nogensinde skal forklare din mor, hvad en compiler er, kan det være en god idé at sammenligne den med et samlebånd i en fabrikshal.

I den ene ende hældes programmørens kildekode ned i et hul, som lander på båndet og bliver læst igennem, sorteret, oversat, optimeret og oversat igen. I den anden ende spyttes den ud som små, fintslebne stumper maskinkode, din computer kan arbejde med.

Sådan vil processen groft sagt se ud for et sprog som C - og lidt anderledes for Java og C#, hvor såkaldt 'intermediate code' først oversættes til maskinkode, når programmet køres.

Så langt så godt for mors vedkommende. Men faktisk kan processen mellem input og output også være lidt for tillukket for mange programmører, mener Microsoft.

Derfor har it-giganten sat gang i projektet Roslyn, som skal gøre trinene på samlebåndet endnu synligere og mere anvendelige for softwareudvikleren, der til daglig bruger Microsoft-sprogene C# og Visual Basic.

Med Roslyn kan programmøren hive langt flere informationer ud af compileren end tidligere gennem en stribe API'er. Dermed får programmører i Microsoft-verdenen bedre mulighed for at skrive egne værktøjer til analyse og refactoring af deres kode.

»Det interessante ved Roslyn er, at vi eksponerer compileren som et API og samtidig bygger flere andre API'er oven på, som vi også gør tilgængelige,« siger danske Brian Rasmussen, senior-softwareudvikler hos Microsoft, til Version2.

Han arbejder fuld tid på Roslyn-projektet for Microsoft i selskabets hovedkvarter i Redmond, Washington, og fortalte om Roslyn på udviklerkonferencen GOTO Copenhagen 2012 i denne uge.

Det nye er, at Roslyn giver C#- eller Visual Basic-programmøren bedre mulighed for at inspicere enkelte dele af for eksempel et C#-program undervejs i compiler-processen. Populært sagt giver Roslyn-compilerne, som altså kun findes i C#- og Visual Basic-udgaver, programmøren mulighed for at skrive kode, der forstår kode.

»Den traditionelle compiler fungerer meget som en black box. Med Roslyn kan du for eksempel bede om at få vist listen over variable, som bliver læst i et givent scope,« forklarer Brian Rasmussen.

Roslyn-projektet har også gjort det muligt for Microsoft at lave en såkaldt REPL til C# og Visual Basic.

REPL står for Read Evaluate Print Loop og dækker over muligheden for at skrive kodeudtryk og evaluere dem i en fortolker med direkte output på skærmen. Det kendes i forvejen fra dynamiske sprog som Ruby og Python.

»REPL er spændende nok i sig selv, fordi det giver programmøren en mere interaktiv måde at arbejde på. Du kan for eksempel sidde og prototype en grafisk brugergrænseflade hurtigere,« siger Brian Rasmussen til Version2.

Hvornår kan brugerne forvente, at Roslyn bliver en del af Visual Studio?

»Vi har allerede frigivet et CTP (Community Technology Preview, red.), som man kan downloade og lege med. Men Roslyn bliver ikke en del af Visual Studio 2012. Det er så meget, jeg kan sige lige nu,« siger Brian Rasmussen.

Han forsikrer dog, at Microsoft arbejder på at levere Roslyn som en del af Visual Studio-pakken så hurtigt som muligt.

Roslyn-versionerne af C#- og Visual Basic-compilerne er skrevet i henholdsvis C# og Visual Basic modsat standardversionerne, der er skrevet i C++.

Du kan læse mere om Roslyn-projektet og downloade CTP'et på Microsofts Visual Studio Blog.

Version2 er mediepartner på udviklerkonferencen GOTO Copenhagen 2012, som finder sted 21.-23. maj.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (4)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
#1 Casper Bang

Jeg kunne godt have tænkt mig at høre om hvad der adskiller Roslyn fra lignende projekter frem for blot at høre en liste af buzzwords.

Java har jo f.eks. altid ædt sin eget hundemad (compileren er skrevet i Java), og hvor javax.tools.* giver mulighed for "compiler as a service", javax.annotation.processing.* giver mulighed for at hooks ind i compileringsprocessen og javax.lang.model.* eksponerer selve AST'et.

Tager Roslyn et skridt længere eller opnår C#/Visual Studio nu bare paritet med Java?

  • 2
  • 2
#3 Uffe Seerup

.NET har i langt tid (fra starten?) haft et API - CodeDom - som "wrapper" compilers med mulighed for parsing, ASTs, kodegenerering m.v. Dette API benyttes allerede flittigt af Visual Studio og andre tools når der skal genereres kildekode som f.eks. når en ASP.NET side oversættes til en partial class eller når en WSDL eller XSD importeres og der dannes serialiserings/deserialiseringskode. På mange områder er dette API allerede langt mere avanceret end javax.tools.*, annotations mm.

CodeDom er principielt sprog-uafhængigt med en generel abstraktion over AST og specifikke implementeringer for compiler og kode(source) generering ud fra DOMen (AST) hhv. C# of VB.NET.

Så allerede nu kan man bede C# compileren (Microsoft.CSharp.CSharpCodeProvider) om at parse en text strøm og få et AST (kaldet CodeCompileUnit). Man kan derefter inspicere ASTen, ændre den og evt. danne kildetekst igen eller danne et assembly. AST'en er fælles for sprog som overholder CodeDom (C# og VB), så man kan faktisk allerede nu parse C# code og bede VB provideren om at kanne kildetekst igen. Eller omvendt.

Roslyn benytter ikke CodeDom. I stedet eksponereres meget mere end blot AST'en. Se fx. her: http://msdn.microsoft.com/en-us/hh500769#Toc306015667

Specielt eksponerer Roslyn også den semantiske del af compileren. AST er jo blot en parse struktur der endnu ikke er blevet semantisk checket og hvor variable m.v. endnu ikke er bundet.

Services går også videre end hvad man normalt tænker på som en compiler. F.eks. får vi adgang til de refactorings som Visual Studio benytter, intellisense mm. Compileren understøtter også fault-tolerance hvor man kan få compilerens bedste "gæt" på hvad det var udvikleren mente - selvom der er fejl. Det er jo ret anvendeligt i situationer med f.eks. intellisense, code completion og tildels in-editor kode generering.

  • 5
  • 0
Log ind eller Opret konto for at kommentere