CoreRT на Microsoft превръща C # в междуплатформен C ++

Microsoft бавно променя веригата от инструменти .Net, за да позволи компилация преди време за приложения на платформи, където няма верига от инструменти .Net.

Проектът CoreRT с отворен код премахва използването на стандартното изпълнение на командния ред (CLR) на .Net за стартиране на приложения. Вместо това той генерира C ++ код от даден код .Net C # на приложението, който след това може да бъде компилиран и свързан на всяка целева платформа, която поддържа C ++.

В публикация в блога за развитие на AlphaGeek на Microsoft, Microsoft изложи накратко плановете си за това как ще работи CoreRT, заедно с обосновката си за създаването му.

„Ако наистина искам да напиша някакъв C # код и той„ просто да работи “на ново IoT устройство, пише Microsoft,„ нямам никакви опции, докато RyuJIT не е способен да генерира машинен код, който работи с този процесор и операционна система." Чрез кръстосано компилиране на C # в C ++, разработчиците на .Net след това могат да доставят своите приложения, без да се налага да изчакват .Net да бъде разположен на дадена платформа, казва Microsoft.

Microsoft отбеляза, че е направила значителен процес за постигането на тази цел през годината, въпреки че призна, че задачата е по-лесна за казване, отколкото за изпълнение. Най-известният проблем е често срещан при проекти, които включват транслиране на един език на друг. C ++ и .Net нямат индивидуално съответствие между техните характеристики - синтаксис, структури от данни, езикова логика и т.н. Следователно CoreRT трябва елегантно да картографира определени функции .Net в C ++.

Друг голям проект, който транспилира език в C ++, за да ускори изпълнението му, е Nuitka, който преобразува програмите на Python в C ++. Nuitka е текущ проект, който се сблъсква с много от същите проблеми като CoreRT и може би има още по-трудно време да ги съгласува. Динамичната природа на Python затруднява преобразуването в компилиран език преди време, тъй като всяка конструкция в езика е потенциално обект с силно променящи се свойства. C # е по-малко проблематичен от тази гледна точка, тъй като използва статичен тип за променливи, но както беше отбелязано по-горе, той все още идва с множество трудности.

Има много неща за CoreRT, които произтичат директно от продължаващото пренастройване на Microsoft около отворени кодове и популярни технологии, различни от Microsoft. Но Microsoft винаги е била прагматична относно това, защо прави това, а тук прагматизмът е да види как .Net приложенията могат да работят на платформи и в екосистеми, които преди това не са ги поддържали.

Теоретично CoreRT може да разшири обхвата на .Net екосистемата, без да се налага Microsoft да полага ненужни усилия. По-лесно е да напишете еднократна система за транслиране от C # на C ++, отколкото да създадете време за изпълнение за произволен брой други целеви платформи. Разбира се, трети страни могат да създават такива времена на работа благодарение на .Net, който сега е проблем с отворен код. Но планът на Microsoft е да намери един начин да ги спаси - и себе си - проблема.