Op de onlangs gehouden BUILD Conference in Amerika lag de nadruk op Windows 8. Logisch want Windows 8 is echt een revolutie. Daarnaast waren er ook nog veel sessies over de nieuwe development ontwikkelingen, waaronder de nieuwe mogelijkheden van C#, VB in de 4.5 versie van het .Net Framework.

Op de onlangs gehouden BUILD Conference in Amerika lag de nadruk op Windows 8. Logisch want Windows 8 is echt een revolutie. Daarnaast waren er ook nog veel sessies over de nieuwe development ontwikkelingen, waaronder de nieuwe mogelijkheden van C#, VB in de 4.5 versie van het .Net Framework.
Asynchroon
De belangrijkste toevoeging in C# en VB betreft het asynchroon programmeren. Dit zal steeds belangrijker worden met het oog op Windows 8, die duidelijk meer op tablets gericht is. Touch-enabled tablets moeten natuurlijk altijd goed blijven reageren op user input (er is geen zandlopertje meer bij touch) en terwijl het wachten juist toe zal nemen door de beperktere rekenkracht en wireless dataverbindingen (ten opzichte van desktops).
Voorheen was dit wel mogelijk door bijvoobeeld Threading. Sinds .Net 4.0 is er de Task Parallel Library, waar je d.m.v. Lambda expressies het een en ander asynchroon kon uit voeren. Een hele vooruitgang, maar je code moest toch behoorlijk worden aangepast en met die lambda’s kun je nog wel eens behoorlijk in de war raken, zeker wanneer je met loops aan de gang gaat.
Hieronder een voorbeeld van hoe een asynchrone aanroep er in .Net 4.5 uit kan zien:
Public async Task<XElement> GetXmlAsync(string url)
{
       var client = new HttpClient();
       var response = await client.getAsync(url);
       var text = response.Context.ReadAsString();
       return XElement.Parse(text);
}
Deze methode lijkt erg op de manier waarop we een normale 'synchrone' methode zouden schrijven. Let echter op de keywords 'async' en 'await'. Met het 'async' keyword wordt aangeduid dat de methode asynchroon uitgevoerd gaat worden. De methode wordt uitgevoerd tot aan het 'await' keyword. Daar wordt 'gewacht' tot de 'client.getAsync(url)' aanroep terug komt met een response. Normaal gesproken zou dit betekenen dat de UI-thread geblokkeerd zou worden en de applicatie in de tussentijd dus niet meer reageert, echter is dat met deze notatie niet het geval. De compiler heeft op de achtergrond de Lambda voor je aangemaakt en zorgt ervoor dat de user interface gewoon blijft werken. Zodra de de response terug komt, wordt de lambda uitgevoerd die door de compiler aangemaakt was.
Overigens zal dit gebeuren op de UI-thread. Het is dus geen multi-threading oplossing en daarmee ook niet geschikt voor processor intensieve taken uit tevoeren. Het is dus specifiek gericht op dingen die 'op zich laten wachten' zoals webrequests.
Javascript interop
In Windows 8 is het mogelijk om met .Net applicaties te ontwikkelen, maar ook met HTML5 en Javascipt. Als HTML5 enthousiast vindt ik dit wel een interssante optie. Alle talen maken gebruik van de Windows Runtime (ook wel WinRT genoemd). Hierdoor is het ook mogelijk om deze talen te laten samenwerken. Je kunt dus een Javascript front-end maken, terwijl je C# (eventueel async) als Business Logic Layer gebruikt. Visual Studio heeft ook volledige ondersteuning. Dus breakpoints, intellisence, enz.
Project Roslyn - Compiler as a Service
Ongeveer 2 jaar geleden was ik op de Professional Developer Conference in Amerika en daar was een sessie over 'Compiler as a service'. Microsoft ging starten met een project om de compiler d.m.v. API’s aanroepbaar te maken. Het moest mogelijk worden om de compiler te beinvloeden en aan te spreken. Inmiddels zijn we bijna 2 jaar verder en is het project (dat de naam Roslyn heeft gekregen) in een ver gevorderd stadium. Over een maand wordt de CTP vrijgegeven.
Ik vroeg me destijds af wat ik eigenlijk zou moeten met een Compiler as a service, maar nu het tastbaar wordt ziet het er erg leuk uit. Het idee is dat de compiler je code kan bekijken/gebruiken, hierdoor kun je bijvoorbeeld zelf een componentje schrijven die code kan refactoren op de manier die jij wilt. Anders Hejlsberg (de man achter C#) liet wat praktische mogelijkheden zien, zoals een 'interactive' of 'immediate' window, waarin je C# code kunt typen en direct kunt uitvoeren. Het window roept de compiler aan voor het stukje tekst en voert het uit. Super makkelijk om een stukje code te testen.
Een andere leuke demo was het copy/pasten naar een andere taal. Je selecteerd een stukje C# en paste het als VB in een ander project (en vise versa). De compiler zal het naar IL compileren en vervolgens de-compilen naar de andere taal. Ideaal als je ergens een stuk code gevonden hebt dat je wilt gebruiken, maar in een andere taal geschreven is. De mogelijkheden zijn eindeloos, dus wellicht krijgen we over een aantal maanden allerlij leuke plugins in Visual Studio die het programmeren weer een stukje sneller en makkelijker maken. Ik houd jullie op de hoogte!