Microsoft börjar prata om sitt nästa generations programmeringsspråk, C# för systemprogrammering

Lästid ikon 3 min. läsa


Läsare hjälper till att stödja MSpoweruser. Vi kan få en provision om du köper via våra länkar. Verktygstipsikon

Läs vår informationssida för att ta reda på hur du kan hjälpa MSPoweruser upprätthålla redaktionen Läs mer

Joe Duffy, en arkitekt och utvecklare på ett forskningsoperativsystem på Microsoft har bloggat om nästa generations programmeringsspråk de har arbetat med under de senaste åren. Microsoft beskriver nu detta kommande språk som "systemprogrammering"-tillägg till C#. Microsoft försöker presentera detta språk som en korsning mellan säkerhets- och produktivitetscentrerad C#, Java, etc, och prestandacentrerad C++.

Här är de 6 viktiga funktionerna i språket,

) Livstidsförståelse. C++ har RAII, deterministisk förstörelse och effektiv allokering av objekt. C# och Java lockar båda utvecklarna att förlita sig för mycket på GC-högen och erbjuder endast "löst" stöd för deterministisk förstörelse via IDisposable. En del av vad mitt team gör är att regelbundet konvertera C#-program till detta nya språk, och det är inte ovanligt att vi stöter på 30-50 % tid i GC. För servrar dödar detta genomströmning; för klienter försämrar det upplevelsen genom att injicera latens i interaktionen. Vi har stulit en sida från C++ — inom områden som rvalue-referenser, flyttsemantik, förstörelse, referenser/låning — och ändå behållit de nödvändiga säkerhetselementen och slagit samman dem med idéer från funktionella språk. Detta tillåter oss att aggressivt stapla allokera objekt, deterministiskt förstöra och mer.

2) Förståelse av biverkningar. Detta är utvecklingen av det vi publicerade i OOPSLA 2012, vilket ger dig element av C++ const (men återigen med säkerhet), tillsammans med förstklassig oföränderlighet och isolering.

3) Asynkron programmering i skala. Gemenskapen har varit "rund och" runt den här, nämligen om man ska använda fortsättningspasserande eller lätta blockerande koroutiner. Detta inkluderar C# men också i stort sett alla andra språk på planeten. Nyckelinnovationen här är ett komponerbart typsystem som är agnostiskt mot exekveringsmodellen och kan mappa effektivt till båda. Det skulle vara arrogant att hävda att vi har det enda rätta sättet att avslöja det här, men med erfarenhet av många andra tillvägagångssätt älskar jag var vi landade.

4) Typsäker systemprogrammering. Det brukar hävdas att med typsäkerhet kommer en inneboende prestandaförlust. Det är sant att kontroll av gränser inte är förhandlingsbar och att vi föredrar spillkontroll som standard. Det är förvånande vad en bra optimeringskompilator kan göra här, jämfört med JIT-kompilering. (Och man behöver bara nonchalant granska några nya säkerhetsbulletiner för att se varför dessa funktioner är fördelaktiga.) Andra områden inkluderar att låta dig göra mer utan att allokera. Som att ha lambda-baserade API:er som kan anropas med noll tilldelningar (snarare än de vanliga två: en för delegaten, en för displayen). Och att enkelt kunna skära ut sub-arrays och sub-strings utan att allokera.

5) Modern felmodell. Detta är ytterligare en som samhället inte är överens om. Vi har valt vad jag tror är den söta punkten: kontrakt överallt (förutsättningar, eftervillkor, invarianter, påståenden, etc), felsnabb som standardpolicy, undantag för det sällsynta dynamiska felet (analys, I/O, etc). och skriv undantag endast när du absolut behöver rika undantag. Allt integrerat i typsystemet på ett 1:a klass sätt, så att du får allt korrekt subtypningsbeteende som krävs för att göra det säkert och sunt.

6) Moderna ramar. Det här är en catch-all-bucket som täcker saker som async LINQ, förbättrat uppräkningsstöd som konkurrerar med C++-iteratorer i prestanda och som inte kräver dubbel-gränssnittsutskick för att extrahera element, etc. För att vara helt ärlig, det är detta område vi har den största listan med "designade men ännu inte implementerade funktioner", som omfattar saker som void-as-a-1st-class-type, non-null-typer, egenskaper, 1:a klass effekttypning och mer. Jag förväntar mig att vi har några av dessa i mitten av 2014, men inte alla.

Läs mer från länken här..

Mer om ämnena: c#, utvecklare, microsoft