CoreRT di Microsoft trasforma C # in C ++ multipiattaforma

Microsoft sta lentamente cambiando la toolchain .Net per consentire la compilazione anticipata per applicazioni su piattaforme in cui non esiste una toolchain .Net.

Il progetto CoreRT open source elimina l'utilizzo del Command Line Runtime (CLR) standard di .Net per eseguire le applicazioni. Invece, genera codice C ++ da un determinato codice di app .Net C #, che può quindi essere compilato e collegato su qualsiasi piattaforma di destinazione che supporti C ++.

In un post sul blog di sviluppo AlphaGeek di Microsoft, Microsoft ha presentato brevemente i suoi piani su come funzionerà CoreRT, insieme alla sua motivazione per crearlo.

"Se voglio davvero scrivere un po 'di codice C # e farlo" funzionare "su un nuovo dispositivo IoT", ha scritto Microsoft, "non ho alcuna opzione finché RyuJIT non è in grado di generare codice macchina che funziona con quel processore e sistema operativo." Con la compilazione incrociata da C # a C ++, gli sviluppatori .Net possono quindi fornire le loro applicazioni senza dover attendere che .Net venga distribuito su una determinata piattaforma, afferma Microsoft.

Microsoft ha notato di aver compiuto un processo significativo verso questo obiettivo nel corso dell'anno, sebbene abbia riconosciuto che il compito è più facile a dirsi che a farsi. Il problema più evidente è comune ai progetti che implicano il transpiling da una lingua all'altra. C ++ e .Net non hanno una corrispondenza uno a uno tra le loro caratteristiche: la sintassi, le strutture dati, la logica del linguaggio e così via. Pertanto, CoreRT deve mappare elegantemente alcune funzionalità di .Net in C ++.

Un altro importante progetto che trasporta un linguaggio in C ++ per velocizzarne l'esecuzione è Nuitka, che converte i programmi Python in C ++. Nuitka è un progetto in corso che affronta molti degli stessi problemi di CoreRT e forse ha un tempo ancora più difficile per riconciliarli. La natura dinamica di Python rende difficile la conversione in un linguaggio compilato in anticipo, poiché ogni costruzione nel linguaggio è potenzialmente un oggetto con proprietà altamente mutabili. C # è meno problematico da questo punto di vista, poiché utilizza la tipizzazione statica per le variabili, ma come notato sopra, presenta ancora una serie di difficoltà.

C'è molto su CoreRT che discende direttamente dal riallineamento in corso di Microsoft intorno all'open source e alle popolari tecnologie non Microsoft. Ma Microsoft è sempre stata pragmatica sul perché lo fa, e qui il pragmatismo consiste nel vedere come le applicazioni .Net possono funzionare su piattaforme e in ecosistemi che in precedenza non le supportavano.

CoreRT può teoricamente ampliare la portata dell'ecosistema .Net senza che Microsoft debba compiere sforzi eccessivi. È più facile scrivere un sistema di transpilation una tantum da C # a C ++ che creare runtime per un numero qualsiasi di altre piattaforme di destinazione. Certo, terze parti possono creare tali runtime grazie a .Net che ora è una preoccupazione open source. Ma il piano di Microsoft è trovare un modo per salvare loro - e se stessa - il problema.