Vilket .NET-språk skall jag välja?
Av: Andreas Håkansson
Publicerad: 2004-04-02
En av de vanligaste frågorna jag får, av personer som är intresserade av att börja med .NET, är "Vilket språk tycker du att jag skall satsa på?". De flesta blir väldigt förvånade när jag svarar att det inte spelar någon roll vilket av språken som du väljer då det bara är en syntax. Hur kan det då vara så att det inte har någon större betydelse vilket språk du väljer? Det måste väl i alla fall påverka prestanda? Eller måste det verkligen det?
Varför alla dessa språk? Ett av de största frågorna som Microsoft hade när det började planera för .NET, var hur man skulle få folk att flytta från sitt, då nuvarande, programmeringsspråk till något helt nytt? Svaret på denna fråga kom till att ligga som grund för hur hela .NET framework formades och implementerades. De valde att helt enkelt göra .NET totalt språkoberoende och istället erbjuda utvecklarna en rad olika språkdialekter (syntax), som skulle underlätta för utvecklare att fatta beslutet om att ta steget över. Detta resulterade att Microsoft, sen första versionen av .NET, skickar med fyra olika språkdialekter; Managed C++ (MC++), Visual Basic.NET (VB.NET), C-Sharp (C#) samt JScript.NET och det är här frågorna börjar dyka upp hos nya utvecklare. Om det nu inte har någon större betydelse vilket av dessa språk jag väljer, hur kan det då vara skillnad när det t.ex. tidigare varit totalt annorlunda att programmera i C++ eller Visual Basic? Den observante läsaren har lagt märket till att jag inte använt termen programmeringsspråk, utan programmeringsdialekt, när jag talat om .NET utveckling. En förenklad förklaring till detta är att .NET endast talar ett språk men kan hantera flera olika dialekter, med hjälp av vad man enklast kan beskriva som tolkar. Detta kan liknas med att vi i Sverige har rikssvenska, men vi har en rad olika dialekter så som skånska, stockholmska och norrländska. Vilka är då dessa delsystem, och vad har de för uppgift, som .NET använder sig av för att möjliggöra detta? Vad krävs för att bli språkoberoende? Vad krävs då för att göra en utvecklingsplattform, så som .NET, språkoberoende? Vad krävs för att man skall kunna kalla något språkoberoende? Det krävs att alla språkelement; datatyper, klasser, gränssnitt etc, fungerar på exakt samma sätt mellan de olika språken. Om vi tar oss en titt på t.ex C++ och Visual Basic så är en int (heltalsvariabel) 4-bytes (32-bit) i C++ medan samma datatyp i Visual Basic är 2-byte (16-bit). Vidare så är C++ helt objektorienterat och Visual Basic stöder sin egen form av klasser. Med denna typ av skillnad blir det svår att skriva en enhetlig miljö där dessa programmen skall byta information och dela kod, samt kunna köras (ha då i tanken att Visual Basic använder sig av en runtime som ligger mellan programmet och Windows). Vad använder då .NET för att bli språkoberoende och för att stödja flera olika programmeringsdialekter? Vi kan sammanfatta dessa saker i fyra punkter, som alla dialekter måste ha gemensamt:
En närmare titt på varje enskild punkt i denna lista kommer att beskriva vad dess uppgift är. Common Language Runtime (CLR) Den exekveringsmiljö som alla .NET program använder sig av kallas Common Language Runtime. Förutom att enskilt ansvara för exekveringen av .NET program, så har CLR:n ansvar för en rad olika saker, såsom:
Common Intermediate Language (CIL) Samtliga språkdialekter som är anpassade för att användas med .NET måste levereras med en kompilator som klarar av att omvandla dialekten till det grundspråk som .NET använder sig av. |
|
Detta språk kallas för Common Intermediate Language och är en form av plattformsoberende assembler. Microsoft har gett sin implementation av detta språk namnet Microsoft Intermediate Language (MSIL). Vid exekvering av ett program, använder sig .NET av en teknik som kallas för Just-In-Time (JIT) kompilering för att omvandla CIL koden till platsformsberoende kod. Det är även möjligt att skriva program direkt i CIL, men det finns inga prestandafördelar att vinna här, så som det tidigare fanns att skriva i assembler. Detta beror på att även om de olika kompilatorerna för språkdialekterna skapar lite olika CIL kod för samma program, så är JIT kompilatorn väldigt effektiv på att optimera CIL koden vid exekvering och slutresultatet blir i princip det samma. Common Type System (CTS) Detta delsystemet ansvarar för att definiera tydliga regler för hur en datatyp är deklarerad, hur den får användas och hur CLR skall behandla dem. Det har även till uppgift att beskriva samma regler för andra språkelement så som klasser, gränssnitt, vektorer, pekare och egendefinierade typer. Dessa regler är en av de viktigaste grundstenarna i en miljö som är språkoberoende. Om de olika dialekterna skall kunna kommunicera och dela kod med varandra så är det ett måste att alla följer dessa regler till punkt och pricka.
Common Language Specification (CLS) Den sista punken i listan över krav för att kunna utveckla en språkoberoende miljö, var att det ska finnas ett dialektregelverk tillgängligt. I .NET är Common Language Specification detta regelverk. CLS:n är i sig ett delsystem av CTS:n och anger ännu striktare regler för hur datatyper och andra språkelement får användas för att de skall kunna garanteras att fungera mellan de olika språkdialekterna. Exampel på regler som CLS:n definierar är t.ex att metodöverlagring (flera metoder med samma namn, men med olika parametrar) inte är giltigt om enbart returtypen av en metod är annorlunda, eller att osignerade (saknar negativtalföljd) datatyper inte ingår i listan över språkelement som alla språkdialekter måste ha stöd för. All utvecklare av en språkdialekt måste uppfylla de regler som CLS:n definerar, men kan utöka funktionaliteten ytterligare, så som C# tillåter användning av just osignerade datatyper. Om man som utvecklare använder sig av saker som inte finns definierade i CLS:n riskerar man att inte kunna återanvända koden i en annan dialekt. Vilket språk skall jag då välja? Vid detta laget hoppas jag att du insett att de frågorna som ställdes i början inte skall vara avgörande när du gör ditt val. Vad ska avgöra vilket språk du väljer? Kommer något av språken att ge dig en fördel på arbetsmarknaden? Tyvärr ser man fortfarande platsannonser där man söker en C# programmerare, eller så söker man en Visual Basic .NET programmerare. För mig är detta helt oförståeligt då jag anser att man skall söka en .NET programmerare. Kan du programmera i en av språkdialekterna, så kommer du inte ha några större problem att lära dig en annan. Min rekommendation vid val av språkdialekt är att välja den som du känner dig mest bekväm vid. Detta är trots allt anledningen till att det finns mer än en språkdialekt tillgänglig. |