C# 4 bliver dynamisk

Anders Hejlsberg har i tide og utide propaganderet for multiparadigme-paradigmet. Nu sætter han handling bag ordene i den næste udgave af C#. Nyhederne er dynamiske typer, valgfri parametre, bedre Office-integration og kode, som evalueres under kørslen.

Microsofts Java-agtige sprog C# har gennemgået en rivende udvikling, og den stopper tilsyneladende ikke foreløbig. På konferencen PDC 2008, som afholdes i denne uge i Los Angeles, gav sprogets opfinder, danske Anders Hejlsberg, en smagsprøve på nyhederne i den kommende version fire.

Anders Hejlsberg har i lang slået på tromme for at nedbryde de klassiske skel i mellem programmeringssprog. Hans pointe er, at udviklerne bliver mere produktive, hvis de har objektorienterede, deklarative og dynamiske elementer til deres rådighed. Det følger han nu op på ved at putte mere af slagsen i C# og drysse retten med syntaks-sukker.

Compileren er en service

Det er normalt god latin først at kode, så kompilere, for så at afvikle programmet, men Anders Hejlsberg vil gerne sætte compileren i sving, mens programmet kører. Konceptet er at benytte compileren som en service for programmet. Det sker ved at benytte muligheden i C# for at manipulere med de abstrakte syntakstræer, som genereres når compileren hakker koden igennem.

Det udmønter sig i et nyt objekt med navnet CSharpEvaluator, der som navnet antyder har en eval-metode, der ligesom i dynamiske fortolkede sprog kan tage en streng, som indeholder C#-kode, og kompilere og udføre den færdige kode.

Det benyttede Anders Hejlsberg under foredraget til at skive en interaktiv C#-fortolker, som det kendes fra f.eks. Python, med solide klapsalver til følge.

I modsætning til fortolkede sprogs eval-funktioner, er der er ikke noget ydelsestab i C#.

»Det kører med nøjagtigt samme hastighed. Når først det er kompileret, så er det full speed ahead,« forklarer Anders Hejlsberg til Version2.

Dynamiske typer

Den største enkeltstående nyhed er, at det nu er muligt at bruge dynamiske typer i C#. Det sker ved at indføre et nyt nøgleord, "dynamic," som medfører at properties og metoder først tjekkes på kørselstidspunktet.

Det er ikke helt nemt at forstå, men C# er stadig et statisk sprog, i den forstand at dynamiske variabler har typen "dynamic."

»Er det kætteri?« spørger Anders Hejlsberg retorisk til publikum i den tætpakkede sal. Han forklarer, at han stadig er en stor fan af statiske sprog. Men C# er ikke en ø, men må være i stand til at tale med andre dynamiske sprog. Det er især bindingen til Javascript i Silverlight, som er vigtig. Andre eksempler er dom-objekter i XML og HTML, som kan glide mere gnidningsfrit ind i C#.

Det demonstrerer Anders Hejlsberg til publikums udtalte fornøjelse ved at kopiere Javascript fra en hjemmeside ind i C#-editoren, ændre "function" til "void" og skrive "dynamic" foran metodens parametre, og så er Javascript blevet til C#. Udvikleren kan skabe sine egne dynamiske objekter ved at implementere et interface med navnet IDynamicObject.

Valgfri parametre

En anden nyhed er valgfri parametre og navngivne parametre.

Valgfri parametre betyder, at visse parametre i metodekalde kan udelades, hvis der er angivet en standard-værdi i metodens definition. De valgfri parametre skal have en standardværdi og befinde sig i parameterlistens hale. Det kan f.eks. se sådan ud:

void (string s, int buffersize: 4086);

Det gør det kønnere at kalde COM-objekter, hvor den nuværende strategi er at benytte Type.Missing for valgfrie parameter i kald til COM-objekter. Det er især automatisering af Office, som eksponerer sine API'er ved hjæp af COM, som Anders Hejlsberg og kompagni har i tankerne.

Navngivne parametre gør det nemmere at undgå fejl ved kald af metoder med lange parameterlister.

Blandt andre nyheder i C# 4 er mulighed for at angive kovarians og kontravarians i forbindelse med parametriserede typer.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (9)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Torben Mogensen Blogger

har man Python :-)

Sidst jeg så, havde Python ikke nogen art af statisk typecheck. Ideen med dynamic typen i C# er, at man kun bruger den, når man ikke kan bruge en statisk type (dvs. sjældent), så 99% af ens program er statisk checket.

De fleste statisk typede OO sprog har iøvrigt allerede en sådan type: Den kaldes "object". Forskellen er bare, at man med object skal lave en downcast til en navngivet type for at kunne bruge en metode, mens dynamic blot tester, at den specifikke metode findes for den aktuelle værdi.

  • 0
  • 0
Carsten Frigaard

Er der så meget nyt i det...i C++ har man "valgfri parametre" (overloading), og dynamiske metoder kan nemt emuleres uden sprog understøttelse (men C++ har jo også har et dynamisk typesystem, hvis man ønsker at koble det til).

Det "Hejlsberg"-hypede multiparadigme er ikke nyt, og Bjarne Stroustrup er vel den egentlige skaber af et mutliparadime sprog, der jo er designet i 1980'erne. C# ser bare ud til at kopiere dette rigtige "design".

Få lidt it-historisk baggrund ved at læse om Bjarne, vor nok største IT guru her: http://www.research.att.com/~bs/

mvh
Carsten

  • 0
  • 0
Klaus Bo Larsen

Når Anders Hejlsberg bruger udtrykket multiparadigme, mener han ikke bare dynamiske typer og default værdier på parametre. Men derimod en mulighed for i programmeringssproget at udtrykke sig med udgangspunkt i flere forskellige paradigmer. Specielt at programmøren kan skifte mellem og kombinere imperative, objektorienterede, funktionelle, deklarative og constraint-erklærede metoder og teknikker i et program. Med direkte understøttelse fra programmeringssproget. Altså at programmeringssproget understøtter mange programeringsparadigmer. For mig er det klart noget nyt for et multi-purpose mainstream programeringssprog.

  • 0
  • 0
Jens Katz-Kolberg

Altså at programmeringssproget understøtter mange programeringsparadigmer. For mig er det klart noget nyt for et multi-purpose mainstream programeringssprog.

Det kommer vist helt an på definitionen af ordet "mainstream". Der er mange multiparadigme sprog, se f.eks.:
http://en.wikipedia.org/wiki/Multi-paradigm_programming_language

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