Рейтинговые книги
Читем онлайн Программирование на Visual C++. Архив рассылки - Алекс Jenter

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 107 108 109 110 111 112 113 114 115 ... 156

Та же история и со вторым конкурентом – с Oracle. Его маркетинг во многом строился на критике Microsoft SQL Server. Временами казалось, что специалисты из Oracle попросту подрабатывают бета-тестерами у Microsoft. И что в итоге? В первую очередь в SQL Server 2000 были внесены те исправления и замечания, о которых говорил Oracle.

Причем чем больнее задевают Microsoft, тем больше вероятность, что следующая версия продукта выбьет колючие аргументы из рук оппонентов.

Та же ситуация складывается и со средствами разработки. Похоже, Microsoft внял критике, звучавшей со всех сторон, и решил разрушить все созданное им за весь период существования. И делается это отнюдь не из мазохистских побуждений. Просто Microsoft хочет одним махом подчистить весь "баг-лист", любезно предоставляемый конкурентами и прочими доброжелателями. Складывается впечатление, что менеджеры проектов в Microsoft не знают одну из поговорок программистов: "старый баг лучше новых двух". Хотя перед выходом SQL Server, сначала 7.0, а потом и 2000, злые языки болтали, что ввиду больших переделок ядра SQL Server окажется глючным, вследствие чего непригодным для решения ответственных задач, а вышло все наоборот. Но тогда изменения были все-таки не такими глобальными, да и бета 1 была уже полностью работоспособной. Бета 1 VS.Net же работоспособной назвать можно, но глюков в ней предостаточно.

Ну да ладно. И что ж за баг-лист такой, что необходимо все создавать заново?

1. Отсутствие собственного реально переносимого между платформами стандарта (типа Java).

2. Слабая интеграция имеющихся (ну, может быть, за исключением InterDev) средств разработки с Интернетом.

3. Сложность, неоднозначность и другие недостатки имеющейся компонентной модели (COM).

4. Разный уровень интеграции средств разработки с COM и "напряженность между базовыми концепциями языков программирования и COM-ом".

5. Увеличивающаяся популярность Java в ущерб популярности VB, фаворита от Microsoft.

Нет никакой ошибки в том, что в список недостатков два раза попали упоминания про Java. Политические и экономические аспекты в современном мире всегда главенствовали над технократическими.

Что же придумал Microsoft для решения этих, а заодно и других, более мелких проблем? Microsoft придумал очень много рекламных терминов, главным по частоте звучания, несомненно, является .Net, но действительно главным, можно сказать, поворотным является CLR и основанный на нем .NET Framework.

.NET Framework – это среда для создания, распространения и исполнения как обычных, так и Web-приложений. Она состоит из двух частей – Common Language Runtime и Framework-классов. В VS.Net Web– приложения получили особый статус. Теперь можно как создавать ASP-приложения, так и использовать новую идеологию Web-сервисов. Все эти новаторства объединены под общим названием ASP.NET, и подразумевают, что для создания приложений будут использоваться CLR-совместимые языки. Однако Web-приложения можно создавать и на старом добром C++. Для этого в VS.Net был добавлен новый ATL-шаблон – ATL Sever. Это шаблон, позволяющий создавать приложения а-ля ASP, но на C++. Доступ к Интернет-серверу осуществляется через специально созданный для ATL Sever ISAPI-фильтр. Собственно ASP.Net – это, грубо говоря, тоже ISAPI– фильтр, но с большей рекламой.

.NET Framework позволяет создавать замечательные web-приложения. Но он применим и для создания обычных десктоп– приложений. Если вы пишете любое ПО для Windows (используя ATL/COM, MFC, Visual Basic или просто стандартное Win32), вы найдете в .NET немало достоинств.

Для улучшения взаимодействия между языками в Microsoft .NET Framework введён языковый стандарт, Common Language Specification (CLS). CLS – это поднабор свойств языка, поддерживаемых CLR, и включающий свойства, общие для большинства объектно-ориентированных языков программирования. Если вы хотите, чтобы ваши компоненты и элементы управления можно было использовать из других языков программирования, их нужно создавать на CLR-совместимом языке, и обеспечить совместимость всех общих и частных членов с CLR.

Языки, поддерживаемые VS.Net

Изначально Microsoft включает в поставку VS.Net компиляторы для C#, Visual Basic, Managed C++ (MC++) и JScript. Сторонние разработчики уже создали .NET-компиляторы для других языков, включая: Java (Rational), Eiffel (Interactive Software Engineering and Monash University), Perl (ActiveState), Python (ActiveState), Scheme (Northwestern University), Smalltalk (Quasar Knowledge Systems), Cobol (Fujitsu), Component Pascal (Queensland University of Technology), APL (Dyalog), Standard ML (Microsoft Research– Cambridge), Mercury (University of Melbourne) и Oberon (ETH Zentrum). В спорах между COM и CORBA приводились аргументы о количестве применимых языков, но ни та, ни другая технология и близко не подходили к списку такой длины. А ведь это только начало!

Мало того, с помощью входящих в поставку библиотек можно даже создать свой CLR-совместимый язык программирования, который будет генерировать исполняемые модули. В качестве примеров поставляются три прототипа языков: smc (настоящий компилятор Managed C++, несколько упрощенный, но все же), MyC (ограниченная реализация языка C), и CLisp (ограниченная реализация языка Lisp). Интересно, что smc – это C++-проект, который компилируется на VC 6. В его readmе сказано, что в релиз-версии он будет компилироваться как на нормальном компиляторе C++, так и на самом себе! Есть пример отладчика командной строки и профайлера. Судя по всему, нас ждет увлекательный год!

Что же такое CLR?

CLR расшифровывается как "Common Language Runtime" (межъязыковый рантайм). Чтобы понять, зачем он нужен, необходимо предварительно проанализировать текущее состояние дел в COM и Java– технологиях.

Для начала приведем определение из материала «Microsoft .Net Common Language Runtime Architecture», базовой спецификации, поставляемой Microsoft.

…Common Language Runtime управляет исполнением исходного кода после его компиляции в Microsoft Intermediate Language(MSIL), OptIL или машинные коды.Весь код на MSIL или OptIL исполняется как управляемый код (managed code); этот код исполняется в сотрудничестве с .Net Framework. .Net Framework обеспечивает предоставляет управление памятью, кросс-языковую интеграцию, обработку исключений, защиту кода и автоматическое управление сроком жизни объектов. В свою очередь, управляемый код должен предоставить в метаданных информацию, достаточную, чтобы позволить .Net Framework управлять исполнением кода.

Ключевым свойством CLR является возможность обеспечения программной изоляции приложений, исполняемых в общем адресном пространстве. Это осуществляется с помощью типо-безопасного доступа ко всем областям памяти при исполнении типо-безопасного управляемого кода. Некоторые компиляторы могут создавать MSIL-код, который не только типо-безопасен, но и поддается простой проверке на безопасность исполнения. Этот процесс называется верификацией и позволет серверам просто проверять написанные на MSIL пользовательские программы, и запускать только те, которые не будут производить небезопасных обращений к памяти. Такая независимая верификация важна для действительно масштабируемых серверов, исполняющих пользовательские программы и скрипты.

MSIL – это некоторый язык инструкций, похожий на независимый от платформы ассемблер. Внутри CLR-совместимого исполняемого модуля помещается некоторый p-код, состоящий из MSIL-инструкций. Но с помощью утилиты ildasm из p-кода можно получить текстовое представление MSIL Оно выглядит примерно так:

/* Displays the error string according to the passed in error code.

Error code must be one of the values declared by the enumeration. */

.method virtual newslot famorassem hidebysig instance

void ShowErrorText(value class ErrorCodes errorCode) synchronized il managed {

 // load the appropriate error string

 ldarg.0

 ldfld class

  [.module CountDownErrorLabel.dll] ErrorLabel CountDownForm::errorLabel

 ldarg.0

 ldfld class System.String[] CountDownForm::errorStrings

 ldarg errorCode // load the value of the enumeration

 ldelem.ref

 // error string on stack, display

 callvirt instance void class

  [.module CountDownErrorLabel.dll] ErrorLabel::set_Text(class System.String)

 ret

}

Такой код можно скомпилировать обратно в исполняемый файл с помощью утилиты ilasm. Это позволяет, например, при программировании на языке, не поддерживающем полностью всех возможностей CLR, скомпилироваться во MSIL, дизассемблировать его и добавить недостающие элементы вручную. Такие широкие возможности дизассемблирования очень порадовали бы хакеров, но Microsoft предусмотрел средства, позволяющие предотвратить дизассемблирование готового модуля. К сожалению, в beta 1 это можно сделать только с помощью повторной компиляции дизассемблированного кода из командной строки. В будущем эта опция будет встроена непосредственно в компилятор. К выходу VS.Net Microsoft обещает сделать так, чтобы приложения компилировались непосредственно при инсталляции, или даже при создании инсталляторов для конкретных платформ. Пока же компиляция в машинный код происходит только при загрузке программы.

Ограничения информации о типах в COM и языках программирования

Одно из преимуществ, дарованных нам COM – динамическая загрузка компонентов. Причем загрузка экземпляров конкретных компонентов осуществляется на базе типов. Когда код загружен, программисты разрешают точки входа привязкой объектных ссылок к новым абстрактным типам. Для облегчения первого COM предоставляет CoCreateInstance как типо-ориентированную альтернативу файл-ориентированному вызову API LoadLibrary. Для облегчения последнего COM предоставляет метод QueryInterface как типо-ориентированную альтернативу символьно-ориентированному вызову API GetProcAddress. Посмотрите на следующий COM/C++ код:

1 ... 107 108 109 110 111 112 113 114 115 ... 156
На этой странице вы можете бесплатно читать книгу Программирование на Visual C++. Архив рассылки - Алекс Jenter бесплатно.
Похожие на Программирование на Visual C++. Архив рассылки - Алекс Jenter книги

Оставить комментарий