Artikel top billede

Foto: Torben Klint (Foto: Torben Klint)

Hejlsberg: Det ultimative udviklingssprog findes ikke

Den danske sprogdesigner Anders Hejlsberg fortæller om Microsofts tilgang til parallelprogrammering, nye features i C# 4.0, og hvordan det var at udvikle Turbo-Pascal.

I mere end 25 år har danskeren Anders Hejlsberg været kraftigt involveret i en række toneangivende programmeringssprog.

Computerworld har fået en snak med sprogdesigneren om det ultimative programmeringssprog, fremtidige planer for C#, parallelprogrammering, og hvordan det var at sende disketter med pakkepost fra Danmark til USA under udviklingen af Turbo-Pascal.

Disketter frem og tilbage over Atlanten

Det startede for mere end 25 år siden med Poly-Pascal, som Borland senere markedsførte som Turbo-Pascal.
(Denne skribent havde håbet at få en autograf på to 5 1/4 tomme floppydiske med Poly-Pascal ved mødet med Anders Hejlsberg, men de er desværre gået tabt under en flytning).

Anders Hejlsberg kender godt besværet med floppydiske. I de første par år var de den eneste reelle måde at sende kode frem og tilbage mellem Danmark og USA, hvor resten af Borlands udviklingsafdeling sad.

"Det var en anden tid. På mange måder en anden verden. Der var ikke den form for elektronisk kommunikation dengang, som i dag. Dengang havde KTAS monopol. Man kunne ikke engang købe sit eget 1.200 baud-modem, det skulle lejes af dem. Dengang var der ikke noget, der hed internet. Da jeg arbejdede for Borland-gutterne, var det som at sidde på en øde ø her i Danmark, når resten af produktudviklingen var i USA.

Disketter blev sendt frem og tilbage med pakkepost. Det tog sin tid. Det var upraktisk for mig at blive i Danmark," fortæller Anders Hejlsberg, som derfor tog til USA i 1987.

Efter nogle år hos Borland, hvor han blandt andet stod bag udviklingsmiljøet Delphi, startede han hos Microsoft i 1996.

Her var han med til at implementere Visual J++, Microsoft Foundation Classes, .Net-frameworket og designe C#-udviklingssproget.

Den beskedne sprogdesigner

Du har været involveret i J ++, stået bag Turbo-Pascal, Delphi og C# samt involveret i .Net-frameworket. Hvad er der galt med dig, hvorfor denne mani med at udvikle nye programmeringssprog?

"Ja, nu skal vi lige tage det med et gran salt. Jeg har implementeret Turbo-Pascal og Delphi. Visual J++ var vores version af et Java-udviklingsværktøj. Compileren, vi brugte, var en Java-kompiler, så sproget var allerede defineret, ligesom Pascal var.

C# var et nyt sprog, og det var en fantastisk oplevelse at få lov til at definere et helt nyt sprog.

Sprog har altid fascineret mig. Nu har jeg efterhånden gjort en karriere ud af det," griner Anders Hejlsberg.

Anders Hejlsberg understreger, at vi ikke skal forvente, at han kommer med et nyt programmeringssprog foreløbig.

"Der er masser af nye versioner tilbage i C#," vurderer Anders Hejlsberg.

Udfordringer ved parallelisering

Den kommende version 4.0 af C# skal eksempelvis forholde sig til, hvordan parallelprogrammering skal håndteres.

Efterhånden, som vi får multikerneprocessorer i flere og flere computere, vokser behovet for at kunne udnytte multikernerne effektivt ved at skrive programmer, der kan udføre flere opgaver parallelt.

Det afspejles blandt andet på Microsofts udviklerkonference, der begynder i Los Angeles i dag og varer til på torsdag.

Her er en række af sessionerne rettet mod parallelprogrammering, som en række eksperter ser som en kommende udfordring for udviklere.

Anders Hejlsberg er enig i den betragtning.

"Der er nogle problemstillinger, som skal løses i den forbindelse. Det gælder ikke kun for C#, men for alle imperative programmeringssprog som Java, C#, C++ og andre.

Den programmeringsmodel med state og side-effekter gør det sværere at skrive parallelle applikationer, fordi man kan komme ind i race-conditions, deadlocks og forvirring om, hvilken værdi af en variabel man læser i hvilken thread.

Der er ting i programmeringssprog, der kan gøre det nemmere. Ting som Pure functions der er uden sideeffekter, immutable objects, compilerchecket isolation, ting der sikrer, at der ikke er deling af et objekt mellem parallelle processer.

Nyt sprog eller udbygning af eksisterende

Så kan man overveje, om man skal lave et helt nyt programmeringssprog og programmeringsmiljø for at lave concurrent (samtidighed, red.) applikationer, eller om man kan flytte de eksisterende programmeringssprog og værktøjer til den nye verden," forklarer Anders Hejlsberg.

Han hælder mest til det sidste, da det er mere praktisk at bygge videre på det eksisterende, fremfor at starte forfra med et nyt programmeringssprog.

"Det er klart, at man med noget helt nyt kan lave den mest perfekte løsning. Problemet med det er, at i hver eneste nye programmeringssprog vil 90-95 procent af sproget være noget, der allerede er gjort før og bare skal være der.

Så man går ikke bare ud ud skriver et nyt programmeringssprog. Der skal være et standardbibliotek, en mase tooling og hvad ved jeg.

Folks forventer, at de ting er på plads og folks forventninger er i løbet af de sidste 25 år blevet meget meget højere.

Price of entry er derfor også blevet meget meget højere. Hvis man i stedet for kan flytte en eksisterende platform mod en bedre oplevelse for concurrency (samtidighed, red.), så er der reelt meget mere at vinde ved det. Vi har allerede en stor brugerskare og en stor base af applikationer.

Det vil være nemmere at bruge det som udgangspunkt for concurrency end at overbevise dem om at alt skal slettes og vi skal starte forfra.

Det har vi ikke råd til i dag. Det var meget billigere at gøre for 25 år siden.

Vi bliver nødt til at finde nye måder at stå på skuldrene af hvad der er lavet før," vurderer Anders Hejlsberg, som mener det kan lade sig gøre at introducere parallelprogrammering i eksisterende programmeringssprog.

"Det er muligt, men det er selvfølgelig svært at blive så konceptren som vi gerne vil være, og det er det, vi som sprogudviklere skal tænke over.

Men jeg synes da nok, at vi er kommet langt med at få sneget funktionel programmering ind i C# uden at det føles ubehageligt. Jeg tror på, at det også kan lade sig gøre med concurrency," lyder det fra Anders Hejlsberg.

Microsoft er allerede kommet med første bud på hvordan parallelprogrammering kan håndteres i eksisterende programmeringsframework.

Microsofts forslag til parallelisering

Microsoft har for nylig frigivet Parallel Extensions i en Community Technology Preview.

Parallel Extensions giver library-baseret understøttelse af parallelprogrammering i .Net-udviklingssprog som C#.

Målsætningen er, at det skal være med i næste version af .Net; version 4.0.

Parallel Extensions består af tre dele. Der er Task Parallel Library (TPL), Coordination Data Structures (CDS) og der er en parallel implementering af LINQ, som hedder PLINQ.

Parallelisering på højere abstraktionsniveau

"Taskparallelprogrammering gør det muligt at lave parallelprogrammering på et højere niveau end den eksisterende parallelprogrammeringsmodel vi har i .Net med tråde, locks og threadpools. Den model er meget lavniveau med en tynd indkapsling af styresystem-threads og -primitiver for parallellisering.

Parallel Extensions bringer det op på et mere logisk niveau, hvor man angiver parallelisering af tasks.

Man kan gøre det på flere måder. Eksempelvis kan man i et task-objekt angive koden for en task.

Man kan også mere simpelt angive det ved at skrive parallel.for
Det ligner en parallel for-sætning.
Hvis du siger parallel.for 1 to 1000, så har du faktisk angivet 1000 task som du gerne vil have udført.

Så sørger infrastrukturen for at måle hvor mange CPU'er der er til rådighed, hvor mange threads skal der startes og så deles de tusinde tasks ud," forklarer Anders Hejlsberg.

I øjeblikket er anvendelsen af parallelprogrammering stillet til rådighed som et API, som udviklingssprogene kan anvende. Det gør det muligt at eksperimentere med paralleliseringen.

"Vi kan eventuelt senere bygge det ind i selve sproget," siger Anders Hejlsberg.

Anders Hejlsberg er i forbindelse med parallelprogrammering specielt glad for LINQ.

"Da det er et deklarativt sprog, specificerer udvikleren ikke i detaljer hvordan en forespørgsel skal udføres, men hvad forespørgslen er. Det giver mulighed for internt at anvende parallelisering, uden at udvikleren behøves at tænke over det.

"Det smukke ved vores parallelle implementation af LINQ (PLINQ, red.) er, at med en LINQ-query programmerer du på et højt nok niveau, så vi ikke behøver en ny syntaks for at drage fordel af parallelitet. Med sådanne deklarative konstruktioner specificerer vi ikke hvordan, men hvad der skal foretages," forklarer Anders Hejlsberg.

Den parallelle tankegang

Selvom PLINQ løser noget af opgaven for udvikleren, så vil det parallelle paradigme betyde, at udviklere skal lære at tænke lidt anderledes.

"Der skal tænkes på en anden måde, og en måde som ikke er helt så naturlig for vores hjerner som den typiske serielle programmering.

I dag uddannes programmører til at tænke på en trinvis måde. Først gør man det og så det, så looper jeg rundt her og hvis x er større end 10, så skal man gøre det og så videre. Det er lidt som et beslutningsdiagram.
Så kan man selv lege computer og tænke sig igennem hvordan algoritmen udføres.

Kigger man på funktionel programmering der skriver man en række ligninger, der beskriver løsningen. Man siger ikke specielt, at det skal udføres på den her måde.

Det er mere, at man siger alle sandhederne om løsningen og så finder systemet ud af hvordan det skal udføres.

Hvis man ser på parallelisering, så skal man lære at opdele et problem i underproblemer, der er uafhængige og som kan løses parallelt," siger Anders Hejlsberg, der erkender, at det er en lidt anderledes måde at tænke på, som udviklere skal lære, men han er fortrøstningsfuld.

"Det kan lade sig gøre. Det vil give udfordringer for udviklere, men nu er det jo heller ikke alt der skal paralleliseres.

Og allerede i dag ved vi, hvordan vi skal parallelisere en række problemer. Eksempelvis er vores webservere i stand til at håndtere mange requests på samme tid. Der er masser af fin concurrency der," forklarer Anders Hejlsberg.

Man kunne forledes til at tro, at på et tidspunkt vil alle nødvendige features være indbygget i et programmeringssprog og man vil således opnå det ultimative udviklingssprog.

Det afviser Anders Hejlsberg.

Det ultimative sprog findes ikke

Anders Hejlsberg forventer ikke, at man kommer frem til det ultimative programmeringssprog.

"Nej, det ultimative sprog findes ikke. Hvis man siger, at det findes, betyder det samtidig, at man forventer, at udviklingen er stoppet, og der ikke kommer til at ske mere nyt," mener Anders Hejlsberg.

Derfor mener han, at vi godt kan forvente, at der fremover kommer helt nye udviklingssprog og nye versioner af udviklingssprog.

C# version 4.0

En af de nye kommende versioner af eksisterende programmeringssprog er version 4.0 af C#.

Ifølge Andes Hejlsberg er frigivelsesdatoen for den nye C# version endnu ikke fastlagt.

"C# 4.0 har endnu ingen shipdate, men vi skyder efter 2010. Featurelisten er næsten fastlagt," siger Anders Hejlsberg, der ikke vil røbe for mange detaljer om C# på nuværende tidspunkt, men dog fortæller, at det bliver nemmere at tilgå ting skrevet i dynamisk typede sprog fra C#.

"Fra C# bliver der adgang til dynamiske sprogkonstruktioner. Det bliver en del af C# 4.0. Vi viser det første gang offentligt på PDC i Los Angeles," siger Anders Hejlsberg




Brancheguiden
Brancheguide logo
Opdateres dagligt:
Den største og
mest komplette
oversigt
over danske
it-virksomheder
Hvad kan de? Hvor store er de? Hvor bor de?
KEYBALANCE A/S
Udvikling og salg af økonomisystemer samt CRM og MPS. Systemer til blandt andet maskinhandlere, vvs-branchen, vognmænd, låsesmede,handelsvirksomheder

Nøgletal og mere info om virksomheden
Skal din virksomhed med i Guiden? Klik her

Kommende events
Sådan bruger du aktivt AI til at styrke din cybersikkerhedsindsats

Kan AI styrke din cybersikkerhed og forebygge f.eks. ransomwareangreb? Ja – og endda særdeles effektivt! På denne konference kan du blive klogere på, hvordan du i praksis anvender AI til at styrke dit sikkerhedsniveau – og gøre cyberbeskyttelsen mere fleksibel.

27. november 2024 | Læs mere


Styrk din virksomhed med relevant, pålidelig og ansvarlig AI integration med SAP

Kom og få indsigt i, hvordan du bruger AI til at transformere og effektivisere dine arbejdsgange. Vi kigger nærmere på AI-assistenten Joule, der vil revolutionere måden, brugerne interagere med SAP’s forretningssystemer. Og så får du konkret viden om, hvordan du kommer i gang med at bruge AI til at booste din forretningsudvikling.

03. december 2024 | Læs mere


Fyr op under vækst med dataanalyse, AI og innovation

Hvor langt er den datadrevne virksomhed nået i praksis? Det kan du høre om fra virksomheder, som har foretaget transformationen. Du kommer også til at høre, hvordan de anvender AI i processen, hvilke mål de har nået, hvordan de har høstet gevinsterne og hvilke nyskabelser, der er på vej i horisonten.

04. december 2024 | Læs mere