Важно понимать, что разработка C++ не была попыткой создать совершенно новыйязык программирования. Напротив, это была попытка усовершенствовать уже существовавший довольно удачный язык. Такой подход к разработке языков программирования, основанный на уже существующем языке и совершенствующий его далее,превратился в упрочившуюся тенденцию, которая продолжается до сих пор.Появление Интернета и Java
Следующим важным шагом в развитии языков программирования стала разработка Java. Работа над языком Java, который первоначально назывался Oak (Дуб), началасьв 1991 году в компании Sun Microsystems. Главной "движущей силой" в разработке Javaбыл Джеймс Гослинг (James Gosling), но не малая роль в работе над этим языком принадлежит также Патрику Ноутону (Patrick Naughton), Крису Уорту (Chris Warth), ЭдуФрэнку (Ed Frank) и Майку Шеридану (Mike Sheridan).
Java представляет собой структурированный, объектно-ориентированный языкс синтаксисом и конструктивными особенностями, унаследованными от C++. Нововведения в Java возникли не столько в результате прогресса в искусстве программирования, хотя некоторые успехи в данной области все же были, сколько вследствиеперемен в вычислительной среде. До появления на широкой арене Интернета большинство программ писалось, компилировалось и предназначалось для конкретногопроцессора и операционной системы. Как известно, программисты всегда стремилисьповторно использовать свой код, но, несмотря на это, легкой переносимости программ из одной среды в другую уделялось меньше внимания, чем более насущнымзадачам. Тем не менее с появлением Интернета, когда в глобальную сеть связывались разнотипные процессоры и операционные системы, застаревшая проблема переносимости программ вновь возникла с неожиданной остротой. Для решения проблемыпереносимости потребовался новый язык, и им стал Java.Самым важным свойством (и причиной быстрого признания) Java является способность создавать межплатформенный, переносимый код, тем не менее, интересноотметить, что первоначальным толчком для разработки Java послужил не Интернет,а потребность в независящем от платформы языке, на котором можно было бы разрабатывать программы для встраиваемых контроллеров. В 1993 году стало очевидно,что вопросы межплатформенной переносимости, возникавшие при создании кодадля встраиваемых контроллеров, стали актуальными и при попытке написать код дляИнтернета. Напомним, что Интернет — это глобальная распределенная вычислительная среда, в которой работают и мирно "сосуществуют" разнотипные компьютеры.И в итоге оказалось, что теми же самыми методами, которыми решалась проблемапереносимости программ в мелких масштабах, можно решать аналогичную задачув намного более крупных масштабах Интернета.Переносимость программ на Java достигалась благодаря преобразованию исходного кода в промежуточный, называемый байт-кодом. Этот байт-код затем выполнялсявиртуальной машиной Java (JVM) — основной частью исполняющей системы Java. Таким образом, программа на Java могла выполняться в любой среде, для которой быладоступна JVM. А поскольку JVM реализуется относительно просто, то она сразу жестала доступной для большого числа сред.Применением байт-кода Java коренным образом отличается от С и C++, где исходный код практически всегда компилируется в исполняемый машинный код, который, в свою очередь, привязан к конкретному процессору и операционной системе.Так, если требуется выполнить программу на С или C++ в другой системе, ее придетсяперекомпилировать в машинный код специально для данной вычислительной среды.Следовательно, для создания программы на С или C++, которая могла был выполняться в различных средах, потребовалось бы несколько разных исполняемых версий этойпрограммы. Это оказалось бы не только непрактично, но и дорого. Изящным и рентабельным решением данной проблемы явилось применение в Java промежуточногокода. Именно это решение было в дальнейшем приспособлено для целей языка С#.Как упоминалось ранее, Java происходит от С и C++. В основу этого языка положенсинтаксис С, а его объектная модель получила свое развитие из C++. И хотя код Java несовместим с кодом С или C++ ни сверху вниз, ни снизу вверх, его синтаксис очень похож на эти языки, что позволяет большому числу программирующих на С или C++ безособого труда перейти на Java. Кроме того, Java построен по уже существующему образцу, что позволило разработчикам этого языка сосредоточить основное внимание нановых и передовых его свойствах. Как и Страуструпу при создании C++, Гослингу и егоколлегам не пришлось изобретать велосипед, т.е. разрабатывать Java как совершенноновый язык. Более того, после создания Java языки С и C++ стали признанной основой,на которой можно разрабатывать новые языки программирования.Создание C
Несмотря на то что в Java успешно решаются многие вопросы переносимости программ в среде Интернета, его возможности все же ограничены. Ему, в частности, недостает межъязыковой возможности взаимодействия, называемой также многоязыковымпрограммированием. Это возможность кода, написанного на одном языке, без труда взаимодействовать с кодом, написанным на другом языке. Межъязыковая возможностьвзаимодействия требуется для построения крупных, распределенных программныхсистем. Она желательна также для создания отдельных компонентов программ, поскольку наиболее ценным компонентом считается тот, который может быть использован в самых разных языках программирования и в самом большом числе операционных сред.
Другой возможностью, отсутствующей в Java, является полная интеграция с платформой Windows. Несмотря на то что программы на Java могут выполняться в среде Windows, при условии, что установлена виртуальная машина Java, среды Javaи Windows не являются сильно связанными. А поскольку Windows является самойраспространенной операционной системой во всем мире, то отсутствие прямой поддержки Windows является существенным недостатком Java.
Для удовлетворения этих и других потребностей программирования корпорацияMicrosoft разработала в конце 1990-х годов язык C# как часть общей стратегии .NET.Впервые он был выпущен в виде альфа-версии в середине 2000 года. Главным разработчиком C# был Андерс Хейльсберг — один из ведущих в мире специалистов по языкам программирования, который может похвалиться рядом заметных достиженийв данной области. Достаточно сказать, что в 1980-е годы он был автором очень удачнойи имевшей большое значение разработки — языка Turbo Pascal, изящная реализациякоторого послужила образцом для создания всех последующих компиляторов.
Язык C# непосредственно связан с С, C++ и Java. И это не случайно. Ведь это три самых широко распространенных и признанных во всем мире языка программирования.Кроме того, на момент создания C# практически все профессиональные программисты уже владели С, C++ или Java. Благодаря тому что C# построен на столь прочном ипонятном основании, перейти на этот язык из С, C++ или Java не представляло особоготруда. А поскольку и Хейльсбергу не нужно (да и нежелательно) было изобретать велосипед, то он мог сосредоточиться непосредственно на усовершенствованиях и нововведениях в С#.
На рис. 1.1 приведено генеалогическое дерево С#. Предком С# во втором поколенииявляется С, от которого он унаследовал синтаксис, многие ключевые слова и операторы. Кроме того, C# построен на усовершенствованной объектной модели, определенной в C++. Если вы знаете С или C++, то будете чувствовать себя уютно и с языком С#.
Рис. 1.1. Генеалогическое дерево C#
Родственные связи C# и Java более сложные. Как пояснялось выше, Java также происходит от С и C++ и обладает общим с ними синтаксисом и объектной моделью. Каки Java, C# предназначен для получения переносимого кода, но C# не происходит непосредственно от Java. Напротив, C# и Java — это близкие, но не кровные родственники,имеющие общих предков, но во многом отличающиеся друг от друга. Впрочем, есливы знаете Java, то многие понятия C# окажутся вам знакомыми. С другой стороны,если вам в будущем придется изучать Java, то многие понятия, усвоенные в С#, могутбыть легко распространены и на Java.