div.main {margin-left: 20pt; margin-right: 20pt} Действительно ли язык программирования Ява унаследован от C++?
Скорее нет, чем да. Идея Sun заключалась в том, чтобы упростить обучение Явы,
сделав ее синтаксис похожим на наиболее распространенный язык программирования.
Это должно было, в конечном итоге, стимулировать и упростить переход на Яву
С-программистов. В то же время, в Яве заложены идеи и механизмы, почерпнутые из
ряда других систем и языков программирования. Взять хотя бы контроль выхода за
границу массива (Паскаль). Или тот факт, что компиляция Ява-программ является
раздельной, классы разбиты по пакетам. Это является одним из вариантов
модульного программирования (как, скажем, в Модула-2), отличающемся от концепции
независимой компиляции файлов C++. Некоторые новации были взяты из неизвестных
широкой публике языков и систем. К примеру, принцип интерфейса классов взят из
языка Objective C, разработанного компанией NeXT. Механизм обработки
исключительных ситуаций почти полностью позаимствован из Модулы-3. Принцип
одинарного наследования, взятый на вооружение языком Java (вместо более
известного по C++ множественного наследования), был положен в основу Смолтока,
Модулы-3 и Оберона. Средства многопоточного программирования построены на основе
Модулы-3 и Ады (хотя идеологи Java подчеркивают здесь связь с языками Mesa и
Cedar).
Что касается такой важной составляющей языка Ява, как сборка
мусора, то принципы ее внутренней реализации позаимствованы прежде всего из
Лиспа. Часть "нормальных" языков, таких как Эйфель, Модула-3, Оберон также
изначально располагала этим механизмом. Нельзя сказать, что в C++ подобный
механизм невозможен. Существуют С++ библиотеки, которые дают возможность
работать с памятью на основе принципа счетчиков использования ресурсов и
реализуют, фактически, пресловутую сборку мусора. Но они не являются частью
языка C++.
Существует и ряд других менее важных отличий Ява от C++. К примеру,
в Яве нет перечислимого типа (enum). Резюмируя, можно сказать, что Ява вобрала в
себе большое количество идей и подходов из разных систем программирования, и в
том числе синтаксис языка C++. Программисту, знакомому с С++, разумеется, будет
легче изучить Яву. Но для полноценной работы с Ява ему придется, в любом случае,
немало потрудиться.
Владислав Кравченко,
href="mailto:grigorenko@mail.ru">Григорий Григоренко
|