по материалам еженедельника "Софтмаркет", N11, 1996 г.
Одна из центральных причин, подтолкнувших специалистов Sun Microsystems к созданию нового языка, - неудовлетворенность языком C++. Уже не
первый год многие программисты на собственной шкуре ощущают все
"прелести" связанной с ним технологии.
Конечно, благодаря высокопроизводительному машинному коду,
вырабатываемому C и C++-компиляторами, язык получил широкое
распространение. Однако мало кто из разработчиков, создающих на нем
программы источает относительно него большие восторги. Этот язык
слишком сложен и архаичен. Он не был изначально
объектно-ориентированным, а создавался как объектное расширение языка
C, также не являющегося, вообще говоря, образцом структурности и
технологичности.
Стремясь добиться простоты и надежности, создатели Java решили сделать
язык по-настоящему объектно-ориентированным, попутно выкинув из C++ все
конструкции, которые, по их мнению, редко используются, малопонятны,
сбивают разработчиков с толку либо способны помешать осуществлению
предстартового контроля безопасности приложений.
Список наиболее существенных изменений по сравнению с C++
- В новом языке не нашлось места оператору typedef; необходимость в
нем отпала, т.к. язык Java стал полностью объектно-ориентированным.
- Операция препроцессирования также изъята.
- Удалены типы данных struct и union. Во-первых, почти все в языке
Java является объектом; во-вторых, всеми вопросами размещения объектов
в оперативной памяти занимается виртуальная машина.
- В языке Java нет "свободно висящих" функций, есть только методы,
относящиеся к тем или иным классам и объектам.
- Для придания конструкциям языка большей ясности и однозначности
устранены перекрывающие операторы, переопределение операторов не
допускается.
- Запрещено неявное преобразование типов, за исключением ситуации
присваивания переменной с плавающей точкой целочисленного значения;
Java является языком со строгой типизацией.
- Невозможно множественное наследование, вместо него предлагаются
средства неполной (частичной) реализации классов; нечто подобное было и
в языке Ada.
- В языке больше нет указателей; обращение к объектам возможно только
напрямую по имени или по индексу элемента массива.
- Базовые типы данных имеют строго определенный формат. Более строгой
стала работа со строками и массивами.
- Наконец-то из языка удален оператор goto. (На столь решительный шаг
долго не соглашались создатели других структурных языков
программирования.) Вместо него введен оператор break (метка) для выхода
из оператора, перед которым находится данная метка.
- В языке теперь нет операторов free и delete, а значит, не может быть
больше ошибок при освобождении памяти. Сборщик мусора, входящий в
состав виртуальной машины, сам позаботится об освобождении памяти, как
только объект станет "бесхозным" (это произойдет, когда исчезнет
последняя ссылка на данный объект).
- Из Java изъяты шаблоны.