Официальное представление мировой общественности набора средств разработки Visual Studio .NET (VS.NET) и операционной среды .NET Framework, краеугольных камней платформы Microsoft .NET, состоялось 13 февраля на проходившей в Сан-Франциско конференции VSLive! 2002. А 4 марта в Москве прошла их российская презентация.

Photo Главным действующим лицом московского мероприятия был Дон Бокс (Don Box) - известный авторитет в области технологий COM, XML и SOAP, бывший в 1998 г. одним из соавторов исходной спецификации SOAP.
Дон Бокс - автор бестселлеров Essential COM, Effective COM и Essential XML, сейчас пишет серию книг по стратегии .NET с общим названием Essential .NET.

На ранних этапах своей карьеры Дон Бокс был одним из основателей компании DevelopMentor, занимавшейся разработкой компонентного ПО. Он весьма популярный лектор, известный своей способностью захватывать внимание аудитории. В его выступлениях глубина технической детализации нередко сочетается с весьма смелой формой подачи информации. Так, в Барселоне, на европейской конференции Microsoft TechEd в июле 2001 г. он вел дискуссию по SOAP, сидя в ванной, заполненной мыльной пеной. В свободное время Бокс вместе со своими коллегами из MSDN Magazine играет в группе Band on the Runtime, исполняющей песни на программистские темы.

В январе 2002 г. г-н Бокс перешел в корпорацию Microsoft на должность архитектора в группе .NET Developer and Platform Evangelism (весьма примечательно ее название, означающее "проповедование платформы .NET").

На московской конференции архитектор Microsoft решил обойтись без экстравагантных презентаций, но, тем не менее, по единодушной реакции слушателей (а их было около 600) было видно, что Дон Бокс покорил аудиторию непринужденностью и эмоциональностью своих выступлений, сочетающихся с высоким техническим уровнем обсуждаемых вопросов. На конференции в Москве он фактически в сольном исполнении сделал четыре технических доклада (75 мин каждый), провел пресс-конференцию, а вечером обсуждал вопросы .NET с представителями российских компаний - разработчиков ПО.

Утром 5 марта Дон Бокс выступил перед студентами вычислительных специальностей МГУ. А перед этим выступлением, в 7:30 утра, с г-ном Боксом удалось поговорить заместителю главного редактора "BYTE/Россия" Андрею Колесову. Приводя наиболее интересные места этой беседы, хотелось бы отметить, что далеко не все высказывания архитектора Microsoft, на наш взгляд, бесспорны.

"BYTE/Россия": Мы в журнале отслеживаем тему "Microsoft .NET" с момента начального объявления этой платформы. При этом мы полагаем, что нас читают ИТ-профессионалы. Поэтому хотелось бы избежать обсуждения этого вопроса на уровне лозунгов типа ".NET - это нечто такое, что спасет человечество от всех существующих и грядущих напастей". С учетом такой предпосылки хотелось бы услышать ваше мнение о соотношении в этой концепции двух очевидных компонентов: удовлетворения некоторых реальных запросов потребителей и проблемы обострения конкуренции среди поставщиков базовых платформ. Ведь ни у кого нет сомнений в том, что .NET - это явный ответ Microsoft на платформу J2EE. И перед пользователями, и перед разработчиками сегодня стоит "гамлетовский" вопрос: ты за кого, за .NET или за Java? Какой ответ Вы можете подсказать им?

Д. Б.: Прежде всего .NET не является ответом на J2EE. Наоборот, Java появилась как реакция на архитектуру Microsoft Distributed Internet Applications. Цель .NET - изменить ландшафт разработки, чтобы ответить на потребности наших заказчиков, которые все больше и больше используют XML при построении своих программных систем. Еще пять лет назад мы поставили перед собой задачу создать самую богатую по набору функций платформу для использования технологий XML.

Если посмотреть на J2EE, то там XML - это некий второстепенный компонент. В нашей же платформе XML - это изначальное обоснование самого появления .NET. Без XML все это вообще неинтересно.

"BYTE/Россия": В прошлом году мне удалось побывать на двух крупных международных форумах для разработчиков - Lotus и Microsoft, не говоря уже о локальных конференциях в России. Удивительная вещь - если в режиме контекстной замены заменить в текстах многих выступлений названия компаний и их продуктов, часто получаются почти идентичные тексты. Мне кажется, это происходит потому, что в этих документах гораздо больше говорится "о любви к ближнему", чем о реальном содержании технологий. В чем же все-таки разница между этими технологиями?

Д. Б.: Если смотреть через провод (Интернет), то действительно разницы никакой нет. Задача всех производителей Web Services, в том числе и Microsoft, состоит в том, чтобы найти общий язык при разговоре через этот провод.

"BYTE/Россия": А в чем же принципиальная новизна .NET? Посмотрите на текст официального пресс-релиза Microsoft о выпуске Visual Studio .NET и .NET Framework. Главный акцент в нем делается на то, что это "краеугольные камни в реализации стратегии Microsoft в отношении XML Web Services". Хотя в моем представлении идея .NET Framework вообще никак в явном виде не связана с этими службами. Это ошибка составителей текста или сознательный PR-ход? Как бы Вы определили 4-5 ключевых положений концепции .NET?

Д. Б.: Я могу определить два столпа, на которых "покоится" .NET: среда исполнения CLR (Common Language Runtime) и XML Web Services. Обе эти технологии нужны для интеграции ПО.

"BYTE/Россия": Но давайте посмотрим на .NET Framework - где там роль "столпа" у Web Services? Это ведь только одна из многих других функций, не более того.

Д. Б.: Да, это функция платформы. Но, сказав это, нужно признать и следующее: мы имеем основания полагать, что у нас лучшая в индустрии поддержка Web Services. Кроме того, эта технология у нас реализуется на уровне пользовательского интерфейса, в то время как многие другие поставщики вообще не уделяют внимания созданию клиентских приложений. Мы считаем, что будущее Web основано на том, что различные устройства будут взаимодействовать с людьми и между собой с помощью Web Services.

"BYTE/Россия": На чем основано утверждение о лидерстве Microsoft? Ведь представители, например, IBM говорят точно те же слова о себе.

Д. Б.: Потому что Microsoft имеет самую долгую историю работы с SOAP, и корпорация, как я думаю, сделала больше всех инвестиций в эту технологию. По результатам независимого тестирования видно, что у нас наиболее полная реализация спецификаций.

"BYTE/Россия": Одна из главных идей .NET Framework и Visual Studio .NET заключается в создании единого фундамента для разных средств программирования (Class Library, CLR и пр.). Чем же объясняются такие странные расхождения в реализации, например, Visual Basic .NET и C#? Например, одна и та же операция в одном случае называется Imports, а в другом - Using.

Или вот еще. Microsoft пошла на весьма радикальные изменения Visual Basic, что вызвало обоснованную критическую реакцию пользователей. Корпорация объясняла это необходимостью унификации базовых функций разных средств программирования. Но почему же, например, до сих пор в VB так и не появился тип беззнаковых целочисленных данных? Чем Вы объясняете такие расхождения, казалось бы, в тривиально решаемых вопросах?

Д. Б.: Наша задача - построить общую среду исполнения и предоставить общий набор библиотек для всех языков. Но у всех языков есть индивидуальные особенности, в том числе синтаксис и ключевые слова, которые появились в процессе их исторического развития. Модернизация языка - это дело его разработчика, а не создателей платформы.

"BYTE/Россия": Но чем же объясняются приведенные выше расхождения в конструкциях? Ведь они никак не связаны с историей этих языков.

Д. Б.: Это неверно, история имеется. У VB всегда было принято импортировать библиотеки типов. А у C++ всегда использовали "using".

"BYTE/Россия": Необходимость учета традиций очевидна. Но у VB никогда не было импорта и ключевого слова Imports.

Д. Б.: Ну хорошо. Пусть в данном случае это было произвольное решение (улыбается). Что касается разработки языка, то тут многое сводится к эстетическим соображениям. И это влияет на то, какой набор средств включается в тот или иной язык. Пользователь может считать, что выбор средств сделан каким-то произвольным образом, а на самом деле, с точки зрения автора языка, все решения складываются в единую прекрасную картину. Хотя в конечном счете это набор личных решений, в том числе и решение о том, включать или не включать те же беззнаковые типы данных*.


*Тут в логике рассуждений Дона Бокса что-то не сходится. Он говорит о CLR, VB и C# так, как будто это продукты трех разных разработчиков, которые независимо друг от друга принимают какие-то стратегические решения. - Прим. А.К.

Д. Б.: Что касается беззнаковых типов - есть очень сильные аргументы против того, чтобы их поддерживать. Например, очень сложно отслеживать переполнение данных**. Скотт Майерс в своей книге "Эффективный C++" привел сильные аргументы против целых чисел без знака.


**Довольно странный аргумент. Архитектура цифровых компьютеров изначально строится на базе контроля знакового разряда и регистра переполнения. Более того, до недавнего времени процессоры использовали исключительно беззнаковые данные - интерпретация положительных и отрицательных чисел выполнялась на программном уровне. - Прим. А.К.

Но для системного программирования, при работе с битами, такие типы данных полезны. VB никогда не предназначался для подобных задач, а C# может для этого использоваться.

"BYTE/Россия": Но ведь работа с беззнаковыми данными поддерживается на уровне CLR. Нужно только предоставить доступ к ним.

Д. Б.: Совершенно верно. Есть много функций, которые есть в CLR, но не поддерживаются тем же VB. Эти ограничения доступа к набору функций CLR определяются Common Language Specifications.

"BYTE/Россия": Современные программисты, кажется, уже начинают забывать, что процедура создания программы состоит из двух этапов - компиляции (Compile) и компоновки (Link). Почему Microsoft уже много лет назад отказалась от поддержки технологии смешанного программирования на уровне OBJ-моделей? Вещи, которые я легко мог делать и 10, и 30 лет назад, многим нынешним разработчикам кажутся несбыточными мечтами. И это при том, что использование общих библиотек классов делают такое объединение модулей, написанных на разных языках, совершенно тривиальным. Вы считаете это "пережитком прошлого" и совершенно неактуальным сегодня? Или есть какие-то другие причины забыть о классических основах программирования?

Д. Б.: На самом деле мы поддерживаем OBJ-модули в нашем новом компоновщике на уровне управляемого кода. Но C# и VB.NET сегодня не имеют возможности выдавать объектный код, а C++ - может.

"BYTE/Россия": Это всем известно. Вопрос - почему?

Д. Б.: Главная причина в том, что мы поддерживаем многоязыковые компоненты через независимые модули, а не через OBJ-файлы. Потому что не каждый язык справляется с многопроходной моделью связывания, используемой в компиляторах C++. Но при этом я могу создать компонент с применением VB, C#, C++ и Assembler в виде единой сборки.

"BYTE/Россия": Странно слышать о каких-то проблемах реализации модели связывания для OBJ-файлов. В течение 40 лет существования языков высокого уровня их не было, в том числе в недавнюю эпоху DOS, а сейчас они вдруг появились. Там ведь использовались те же самые языки.

Д. Б.: Проблем нет и сейчас. Но мы ориентируемся на модель DLL. Если кто-то захочет создать компилятор C# с получением OBJ-кода, то он может это сделать. Язык стандартизован. Но Microsoft не считает это привлекательной идеей с точки зрения востребованности заказчиками.

"BYTE/Россия": В течение 8 лет мы слышали, что COM - это отличный механизм для объединения отдельных компонентов. Некоторые авторы договорились даже до того, что именно c COM началась эпоха повторно используемых компонентов. Полтора года назад Microsoft признала наличие проблемы "DLL Hell" и свой "вклад" в ее появление. Конечно, новый механизм Assembly (сборки) решает некоторые явные проблемы DLL Hell. Но есть основания предполагать, что, решая нынешние проблемы, он способствует появлению новых. Самый простой пример - теперь расширение DLL имеют уже не две, а три принципиально разные библиотеки (regular, ActiveX и .NET). Нет ли у нас перспективы говорить уже в ближайшем будущем об Assembly Hell?

Д. Б.: Я не вижу проблем с одинаковыми расширениями файлов. В предварительных версиях мы применяли разные расширения, но это не понравилось пользователям, потому что .NET DLL - это частный случай обычных DLL.

"BYTE/Россия": Но мне как разработчику это очень неудобно, потому что механизмы подключения и использования этих библиотек различаются. Когда я подключаю .NET DLL, я хочу видеть только файлы данного типа, чтобы не гадать на кофейной гуще и не получать сообщения "неверный тип библиотеки".

Д. Б.: Тут нет идеального ответа. Это решение - продукт компромисса. Что касается перспектив появления "ада", то люди всегда найдут возможность его создать. Но мы со своей стороны дали им правильный механизм предотвращения такой ситуации, для корректного контроля версий. Мы пытаемся помешать людям делать глупости, но предотвратить их на 100% никто не может. Тут мы опять должны идти на определенные компромиссы.

"BYTE/Россия": Вы - один из создателей спецификации SOAP и член рабочей группы консорциума W3C по работе над XML-схемами. Не могли бы Вы немного рассказать об этой истории и над чем Вы работаете сегодня? Что, в частности, подразумевается под "следующим поколением инфраструктуры Web-служб", над созданием которого Вы работаете в Microsoft?

Д. Б.: Я работаю в группе, которая занимается развитием инфраструктуры Web Services, в том числе подготовкой новых спецификаций. Фактически мы создаем среду протоколов .NET Framework, которые позволят предоставить разработчикам новые услуги: надежный обмен сообщениями, федеративная модель безопасности, управление транзакциями. Моя группа работает как над протоколами, так и над созданием соответствующих средств их поддержки.

"BYTE/Россия": Как происходит ваше взаимодействие в этих вопросах с другими компаниями, например, c IBM?

Д. Б.: У нас идет довольно много дискуссий с IBM. По многим предложениям мы выступаем соавторами. Но по некоторым мы пока не добились консенсуса, хотя в целом мы едины в понимании направления движения.

"BYTE/Россия": Как организовано ваше взаимодействие? Есть какие-то общие рабочие группы?

Д. Б.: Нет, мы занимаемся такими разработками независимо, но в компаниях есть люди, которые решают вопросы сотрудничества. Работа идет поэтапно: независимая разработка - согласование на каждом шаге.

"BYTE/Россия": А почему Вы решили стать сотрудником Microsoft?

Д. Б.: Я просто этого захотел. Мне показалось, что так будет интереснее работать.

"BYTE/Россия": Каковы Ваши впечатления от визита в Москву?

Д. Б.: Очень интересно провел время.

"BYTE/Россия": Приезжайте еще. Спасибо Вам за беседу.