Який взаємозв'язок між динамічною мовою виконання та C # 4.0?


11

Скажімо, я хотів створити компілятор / інтерпретатор динамічної мови, можливо, інтерпретатор схеми на платформі .NET, як це існує сьогодні. Чи краще мені використовувати режим динамічної мови (DLR) або використовувати C # 4.0 для реалізації динамічних особливостей моєї мови? Або мені потрібно обоє?

Я знаю, що в цій галузі було виконано іншу роботу, зокрема з IronScheme та IronPython . Обидві ці мови використовують DLR; Я вважаю, що IronPython використовує найновішу версію DLR (близько року), тоді як IronScheme використовує ранню, сильно модифіковану вилку ранньої версії DLR. Але C # 4.0 був недоступний, коли ці компілятори були створені.

Я бачив роботу Роб Конери з Massive, використовуючи динамічні функції C # 4.0; це досить вражаюче. Але чи зможе C # дотримуватися повномасштабних зусиль динамічного компілятора / інтепретера? Чи є в DLR функції, які відсутні у C #, або DLR по суті було переведено на C # 4.0? Чи не пропустять я жодних важливих особливостей DLR, якби я тільки ексклюзивно використовував C # 4.0?


Я вважаю, що .Net 4.0 Динамічні функції також засновані на DLR.
Дейв Най


@Dave: Я був би задоволений поточним, авторитетним посиланням на статтю, в якій детально описується взаємозв'язок між. NET 4.0 та DLR. Це дасть мені ідеальне уявлення про те, що система динамічного типу в C # 4.0 є достатньо надійною та чи є якісь критичні особливості в DLR, які були опущені під час виконання .NET 4.0. Я знайшов деякі статті, але всі вони були написані ще в той час, коли DLR формувався, і багато з них є умоглядними.
Роберт Харві

Відповіді:


3

Це стаття, яку я пам’ятаю, читаючи. msdn.microsoft.com/en-us/magazine/gg598922.aspx

Пізніше DLR також був включений до .NET Framework 4 для підтримки динамічних функцій у C # та Visual Basic. Якщо вам потрібне лише динамічне ключове слово на C # 4, ви можете просто використовувати .NET Framework, і в більшості випадків воно самостійно обробляє всі взаємодії з DLR. Але якщо ви хочете реалізувати або перенести нову динамічну мову в .NET, ви можете скористатися додатковими класами помічників у проекті з відкритим кодом, який має більше функцій та послуг для мовних реалізаторів.


3

Від: jimmysch

Роберт,

Факти: і IronRuby, і IronPython використовують DLR, адже більшість особливостей DLR походять від попередньої реалізації IronPython. Я не знайомий з тим, як використовується версія версії DLR IronScheme. Частина DLR (Microsoft.Scripting.Core.dll) була відправлена. присутні в .NET 4.0 збірки DLR.

Решта кодової бази DLR (Microsoft.Scripting.dll, Microsoft.Dynamic.dll є найважливішими) доступні для завантаження з цього проекту CodePlex або проекту IronLanguages ​​GitHub. Вони надають API для споживачів та виробників мов хостингу, тоді як API в .NET 4.0 фактично роблять динамічну розсилку методів.

Щоб написати компілятор динамічної мови для .NET 4.0, я б використовував C # як мову реалізації, а DLR використовував як бібліотеку для спрощення загальних завдань компілятора. Для простого прикладу мови на DLR, подивіться на Sympl.

~ Джиммі

http://dlr.codeplex.com/discussions/268746#post656778

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.