Показаны сообщения с ярлыком C#. Показать все сообщения
Показаны сообщения с ярлыком C#. Показать все сообщения

воскресенье, 28 марта 2010 г.

Code Contracts в .NET и монополия C#

В последней (четвертой) версии .NET и, соответственно, в VS2010, появились средства спецификации параметров, пред- и постусловий, инвариантов классов и всего того, что с подачи Бертрана Майера называется Code Contracts или Design by Contract.

Вот пара ссылок:
- Объява из Микрософта;
- Список статей по теме.

Неутомимый и вездесущий Дино Эспозито уже, конечно, отозвался на это новшество несколькими постами:

- Assert/Assume
- Invariants
- Preconditions
- Postconditions

Документ с полным описанием новых средств .NET, помеченный этим январем, лежит у Микрософта здесь.

Многие интересующиеся об этом уже знают, но вот что интересно заметить. Возникает ощущение (и чем дальше, тем больше это ощущение крепнет), что Микрософт стремится втиснуть в .NET поддержку всего, что вообще есть в программировании. Начав с введения в виртуальную машину и MSIL нормальной системы типов и стековой модели выполнения, адекватной императивным языкам (и, естественно, отразив все это в базовом языке C#), они постепенно начали добавлять - и в систему, и в язык - все новые и новые возможности, иногда даже приниципиально отличающиеся от императивной парадигмы. Типовая параметризация, технология LINQ, динамическая типизация, теперь вот - контрактное программирование.

Каждое отдельное нововведение объясняется вполне понятными причинами: и обобщенное программирование нужно и полезно (кто спорит?), и работа с БД непосредственно из программ, и поддержка функциональной парадигмы ("функциональная мафия" из Кембриджского отделения Microsoft Research активность не снижает :-)), и динамическая типизация нужна, чтобы поддерживать скриптовые языки...

Принципиально важно в контексте моих рассуждений то, что все эти новшества получают свою поддержку в базовом языке. И вот в один прекрасный день обнаружится, что программировать под .NET имеет смысл только в этом базовом языке - в C# есть все, и это "все" адекватно поддерживается платформой .NET!

Наверное, я несколько сгущаю краски, и всегда останутся энтузиасты, предпочитающие и в .NET программировать на F#, Nemerle, Хаскелле, Питоне. Просто ниша для использования этих языков в рамках .NET сузится до совершенно микроскопических размеров.

Но вот как быть с такими промышленными языками, как Eiffel и Scala? С введением поддержки контрактного программирования C# практически полностью "покроет" почти все преимущества Эйфеля, а то немногое особенное, что еще есть в этом языке, вряд ли окажется причиной выбора этого языка для реальных проектов. И сейчас не очень понятно, какова популярность Эйфеля как такового (в индексе TIOBE он сильно ниже первых пятидесяти языков), а его присутствие в мире .NET кажется совершенно эфемерным...

Проект портирования Скалы на .NET все еще, вроде бы, имеет некоторый смысл (уж больно мощный и привлекательный язык, и даже после появления в C# "функциональных" черт в Скале все еще остаются вполне уникальные и очень удобные для программирования свойства), но все равно, потенциальная пользовательская база для этого языка наверняка существенно сократится...

Повторяю: я не говорю, что происходит катастрофа,- видна тенденция: мы все дальше и дальше отодвигаемся от идиллической картины, десять лет назад нарисованной нам маркетологами из Микрософта: мол, неважно, на каком языке программировать, выбирай любой, лишь бы компилятор генерировал CIL-совместимый код.

"Пусть расцветает тысяча цветов" (или как это китайцы говорили)...

пятница, 19 октября 2007 г.

Annotated C# Standard

Вот, сегодня пришло извещение от Amazon:




C# Annotated Standard (Morgan Kaufmann) Jon Jagger
EUR 47,03

Судя по заголовку, практически то же, что я задумал со стандартом C++. Жалко, что не выложили какую-нибудь главу (только предисловие и индекс); интересно было бы взглянуть, как они текст/комментарии организовали. Придется, наверное, саму книгу заказывать, чтобы было с чего пример брать. :-)

Вот, кстати, синопсис. Английскими словами - практически то же обоснование, что и я выдвигал по поводу Аннотированного Стандарта C++:

Synopsis
Standards, while being definitive, do not usually serve as the best reference to the use of a programming language. Books on languages usually are able to explain usage better, but lack the definitive precision of a standard. This book combines the two; it is the standard with added explanatory material. Written by members of the standards committee, it annotates the standard with practical implementation advice. It is the definitive reference to the C# International Standard.

понедельник, 18 июня 2007 г.

Несколько предварительных замечаний

амый первый пост - просто в качестве проверки и как бы предисловия. Начну с цитаты из одной своей давней статьи ("Редкая профессия"):

Жизнь сложилась так, что автор любит проектировать и разрабатывать компиляторы, и у него это, в общем, получается. То, что вы прочтете ниже, надеемся, подтвердит мои слова.

Это совсем не самореклама (что рекламировать-то - мало ли кто чего программирует?), а просто чтобы было понятно, чем я занимаюсь. А кроме компиляторов (и интерпретаторов, и всяких языко-ориентированных тулзов и прочего подобного) я, строго говоря, делать ничего и не умею. Ну, разве что лекции читать, да статьи писать.

Так что в этом блоге (если, конечно, времени хватит и если запал не исчезнет) я буду писать строго в рамках очерченных предметов. Если быть более точным, то вот темы, которые мне интересны:

- Компиляторы языков высокого уровня, в основном их "фронтальные" части. Генерация кода и оптимизация тоже интересны, но не настолько. Да и сказать что-то умное по этому поводу мне заметно сложнее, чем некоторым моим друзьям и коллегам. (Надеюсь, они будут иногда захаживать сюда :-)). Инструменты генерации синтаксических распознавателей (прежде всего, Yacc/Bison и COCO).

- Императивные языки как таковые. C/C++, Ada, C#, Java, Oberon/Zonnon, Eiffel (порядок перечисления случаен). Стандартизация языков, развитие языков. Современные инфраструктуры исполнения, прежде всего Java/JVM и Microsoft.NET/CLR/MSIL. Собственно виртуальные машины (на техническом уровне) - предмет особого интереса.

- Семантические интерфейсы (хороший и почти единственный из реальных пример - интерфейс ASIS для языка Ada). В особенности интересует все, что относится к "плюсам". Есть несколько старых проектов для C++ в этой сфере (успешно канувших в Лету, к сожалению, Sage++, например), если удастся найти что-то свежее - обязательно напишу. К этой теме непосредственно относится понятие промежуточного представления программ. Я, правда, предпочитаю название "семантическое представление" - об этом тоже надо будет подробнее написать, для меня это очень важная тема.

- Инструменты статического анализа исходных текстов - как академические проекты, так и коммерческие системы. К определенному моему удивлению, за последнее время, специально этим не заморачиваясь, обнаружил около десятка (а то и больше) фирм, выпускающих довольно интересные и мощные, судя по описанию, системы, целиком ориентированные на различные виды статического анализа программ. Постараюсь о некоторых из них написать подробнее, тем более, что даже после поверхностного чтения их сайтов возникло чувство, что там можно было бы наворотить и покруче :-). В этом пункте отдельного упоминания заслуживает тематика, связанная с (ре)инжинирингом программ, нотацией UML и ее подмножествами (Object Constraint Language, например). Помимо чисто исследовательского интереса, здесь видятся кое-какие вполне коммерческие перспективы...

- Функциональные языки. Наверное, придется ограничиться Lisp/Scheme как наиболее концептуально чистыми. Речь идет как о языках и функциональной парадигме как таковых, так и об инструментах. Один из первых постов будет об идее реализации Lisp для .NET.

- Продвинутые архитектуры компиляции, прежде всего, с ориентацией на глубокую интеграцию компиляторов и сред разработки. В 2005 году на эту тему даже статью написал, правда, вполне поверхностную. А тема сама по себе крайне интересная, да и реальные системы есть (как предмет анализа и образец) - прежде всего, Visual Studio и Eclipse.

Ну вот, примерно так... Потом, может, еще чего добавлю. Вообще-то, далеко не все упомянул. Проект ONBASS, в котором я сейчас, вроде бы, участвую (по договору с London Metropolitan University), вообще о другом, но тоже интересном. Потом как-нибудь.

Да, а та статья, цитату из которой я привел в начале, оказывается, исчезла с сайта PC Magazine/Russian Edition. Архив номеров за 1997 год просто отсутствует. А может, не нашел? Журнал был за номером 12, кажется (спецвыпуск, с медведем на обложке).

Ну ничего: если наберусь наглости, буду выкладывать куски из той статьи здесь - будет, кстати, повод восстановить пропущенные в печатном варианте куски, да и добавить кое-что (картинки, например). Сама статья, несмотря на свою давность, читается вполне ничего. :-)

А если дело совсем хорошо пойдет, то... продолжение напишу! За десять-то лет столько всего интересного произошло, уж вы поверьте... :-)