Microsoft inizia a parlare del loro linguaggio di programmazione di nuova generazione, C# per la programmazione di sistemi

Icona del tempo di lettura 3 minuto. leggere


I lettori aiutano a supportare MSpoweruser. Potremmo ricevere una commissione se acquisti tramite i nostri link. Icona descrizione comando

Leggi la nostra pagina informativa per scoprire come puoi aiutare MSPoweruser a sostenere il team editoriale Per saperne di più

Joe Duffy, architetto e sviluppatore di un sistema operativo di ricerca presso Microsoft, ha scritto sul blog del linguaggio di programmazione di nuova generazione su cui hanno lavorato negli ultimi due anni. Microsoft sta ora descrivendo questo linguaggio in arrivo come estensioni di "programmazione di sistemi" per C#. Microsoft sta cercando di presentare questo linguaggio come incrocio tra C# incentrato su sicurezza e produttività, Java, ecc. e C++ incentrato sulle prestazioni.

Ecco le 6 caratteristiche importanti della lingua,

) Comprensione a vita. C++ ha RAII, distruzione deterministica e allocazione efficiente degli oggetti. C# e Java convincono entrambi gli sviluppatori a fare troppo affidamento sull'heap GC e offrono solo un supporto "libero" per la distruzione deterministica tramite IDisposable. Parte di ciò che fa il mio team è convertire regolarmente i programmi C# in questo nuovo linguaggio e non è raro incontrare il 30-50% del tempo speso in GC. Per i server, questo uccide il throughput; per i clienti, degrada l'esperienza, iniettando latenza nell'interazione. Abbiamo rubato una pagina dal C++ - in aree come rivalutare i riferimenti, spostare la semantica, la distruzione, i riferimenti / prendere in prestito - e tuttavia abbiamo mantenuto gli elementi di sicurezza necessari e li abbiamo fusi con idee di linguaggi funzionali. Questo ci consente di impilare in modo aggressivo oggetti allocare, distruggere deterministicamente e altro ancora.

2) Comprensione degli effetti collaterali. Questa è l'evoluzione di ciò che abbiamo pubblicato in OOPSLA 2012, fornendo elementi di C++ const (ma ancora con sicurezza), insieme a immutabilità e isolamento di prima classe.

3) Programmazione asincrona su larga scala. La comunità è stata 'round and' round su questo, vale a dire se utilizzare coroutine di passaggio di continuazione o di blocco leggero. Ciò include C# ma anche praticamente tutte le altre lingue del pianeta. L'innovazione chiave qui è un sistema di tipi componibile che è agnostico rispetto al modello di esecuzione e può essere mappato in modo efficiente su uno dei due. Sarebbe arrogante affermare che abbiamo il modo giusto per esporre queste cose, ma avendo esperienza con molti altri approcci, adoro il modo in cui siamo arrivati.

4) Programmazione di sistemi type-safe. È comunemente affermato che con la sicurezza del tipo si ottiene una perdita intrinseca delle prestazioni. È vero che il controllo dei limiti non è negoziabile e che preferiamo il controllo dell'overflow per impostazione predefinita. È sorprendente ciò che un buon compilatore di ottimizzazione può fare qui, rispetto alla compilazione JIT. (E è sufficiente controllare casualmente alcuni recenti bollettini sulla sicurezza per vedere perché queste funzionalità sono valide.) Altre aree includono la possibilità di fare di più senza allocare. Come avere API basate su lambda che possono essere chiamate con zero allocazioni (anziché le solite due: una per il delegato, una per il display). Ed essere in grado di ritagliare facilmente sottoarray e sottostringhe senza allocare.

5) Modello di errore moderno. Questo è un altro su cui la comunità non è d'accordo. Abbiamo scelto quello che ritengo essere il punto debole: contratti ovunque (precondizioni, postcondizioni, invarianti, asserzioni, ecc.), fail-fast come politica predefinita, eccezioni per il raro fallimento dinamico (analisi, I/O, ecc.), ed eccezioni digitate solo quando hai assolutamente bisogno di eccezioni avanzate. Tutto integrato nel sistema di tipi in un modo di 1a classe, in modo da ottenere tutto il corretto comportamento di sottotipizzazione necessario per renderlo sano e salvo.

6) Quadri moderni. Questo è un bucket catch-all che copre cose come LINQ asincrono, supporto dell'enumeratore migliorato che compete con gli iteratori C++ in termini di prestazioni e non richiede l'invio della doppia interfaccia per estrarre elementi, ecc. Ad essere del tutto onesti, questa è l'area che abbiamo il più grande elenco di "caratteristiche progettate ma non ancora implementate", che abbraccia cose come vuoto come tipo di 1a classe, tipi non nulli, tratti, tipizzazione di effetti di 1a classe e altro ancora. Mi aspetto che ne avremo alcuni nel nostro checkpoint di metà 2014, ma non tutti.

Leggi di più dal link qui.

Maggiori informazioni sugli argomenti: c#, sviluppatori, microsoft