Главная страница   /   8.3. Резюме (Метапрограммирование в .NET

Метапрограммирование в .NET

Метапрограммирование в .NET

Кевин Хазард

8.3. Резюме

В заключение этой главы отметим, что Microsoft DLR представляет некую загадку в истории .NET Framework. DLR появился с некоторым помпой на конференции MIX в 2007 году, а ко времени Microsoft PDC в 2008 году сообщество программистов гудело о том, что невозможное становится возможным. Microsoft собирался сделать динамические языки абсолютно легальными в .NET Framework. Или так казалось. На некоторых довольно громких презентациях на PDC 2008 мы видели, как статически типизированные языки, как C#, могут развиваться, приняв некоторые особенности динамических языков. Мы также видели впечатляющие демонстрации того, как C# и Visual Basic легко работают с JavaScript, Python, Ruby через DLR. Для тех, кто ценил возможности динамических языков, те дни были днями надежды и стремления.

Но, как говорится, если что-то кажется слишком хорошим, чтобы быть правдой, вероятно, так и есть. К тому времени как Visual Studio 2010 стала поставляться с динамической версией C# в апреле 2010 года, команды IronPython и IronRuby резко сократились в размерах. Только появившийся JavaScript движок на основе DLR, возникший в 2008 году, полностью исчез к 2010 году. Несколько добровольных отделений тех команд показали правдоподобность слухов, что "железные языки" (Iron Languages) были мертвы при рождении. К октябрю 2010 года, когда Microsoft переместила исходный код DLR в публичный домен под Apache License V2.0 и "отец IronPython" покинул компанию, похоронный звон для динамических языков в .NET Framework, казалось, звонит громко и отчетливо для большинства людей.

Однако не все рассматривали эти события с полным пессимизмом. В конце 2009 года ключевые члены команд DLR и IronPython были переведены в секретный проект в группе ОС Windows. Члены команд других языков присоединились к ним, работая над связанными и не менее секретными проектами. Только исключительно благодаря таланту и опыту вовлеченных специалистов, что-то хорошее, казалось, создастся в Microsoft. На конференции BUILD 2011 Microsoft, наконец, выпустила кота из мешка, когда она объявила о Windows 8, новом OS-специфичном JavaScript движке (WinJS) и новом Windows Runtime (WinRT). Тем не менее, мало кто признал связь между основами DLR и новым фреймворком для Windows 8.

В какой-то момент в середине 2009 года кто-то важный в Microsoft, вероятно, понял, что в действительности представляет собой DLR. Речь шла не о Python. Речь шла не о Ruby. Речь даже не шла о том, что DLR касается добавления динамических возможностей в такие языки, как C# и Visual Basic. Суть DLR состояла в том, чтобы предоставить язык языков для .NET Framework. Система, которую определила DLR команда, чтобы включить IronPython и IronRuby, позволяла любому набору совместимых языков общаться и взаимодействовать. DLR позволил произойти чему-то чудесному между языками, что не смогла сделать даже богатая метаданными модель CLR.

Красота такой идеи очевидна: многие языки программирования легко взаимодействуют, обмен данными и вызовы функций свободно проходят между ними. Это звучит замечательно, не так ли? Так почему же Microsoft «кинула» DLR, и как Windows 8 помогает достичь той же цели в более хорошей форме? К сожалению, возможности языковой совместимости DLR реализованы неправильным способом и не столь удобно, чтобы сделать их действительно полезными для нединамических языков.

В значительной степени соглашения на уровне интерфейса DLR, описанные в этой главе, были заменены в Windows 8 соглашениями на уровне метаданных в WinRT. На самом деле, та же модель метаданных. NET, известная как ECMA 335 Partition II, была реализована на уровне операционной системы в Windows 8 с несколькими новыми расширениями. Наличие богатых метаданных, к которым мы привыкли в .NET на самом низком уровне ОС, обеспечивает превосходное взаимодействие между языками как JavaScript (WinJS), C++, C# и Visual Basic.

Вместо того чтобы рассматривать "смерть DLR" как катастрофу, мы видим тут надежду. С метаданными .NET модели на самом низком уровне операционной системы, будущие WinRT-реализации Python, Ruby и других языков программирования могут быть разработаны для Windows 8. Такие WinRT реализации Python и Ruby вообще не потребуют хостинговую модель. Они будут свободно взаимодействовать с другими языками WinRT.

Мы надеемся, что вы также с оптимизмом смотрите на будущее динамических языков и метапрограммирования в целом в экосистеме Microsoft.