Сравнение ЯП C_ C++_ Pascal_ Ada_ Modula-2_ Oberon-2_ Java (1161141), страница 4
Текст из файла (страница 4)
к пункту 1: необходимость в двух уровнях инкапсуляции представляется автору излишней
к пункту 2: перегрузка имен процедур необходима для реализации ООП, однако этот механизм ухудшает "читабельность" текста программы и нуждается в некоторых ограничениях
к пункту 3: множественное наследование можно реализовать с помощью других механизмов ООП
к пункту 4: как показал пример ADA, конструкторы и деструкторы не являются обязательными компонентами ООП
к пункту 5: компилятор в состоянии самостоятельно определить “виртуальность” метода
H. ПРОЦЕССЫ И ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ.
Механизмы реализации параллельных процессов и обработки исключительных ситуаций являются скорее экзотикой, нежели обязательным компонентом современных языков программирования. Однако наличие этих механизмов в нескольких языках требует включить их в анализ для сравнения.
| C | C++ | Java | Pascal | Modula-2 | Oberon-2 | Ada 95 | Прогноз | |||
1. Сопрограммы |
|
|
|
|
| + | + |
| + |
| + |
2. Сигналы |
|
|
|
|
| + | + |
| ++ |
|
|
3. Критические участки (мониторы) |
|
|
|
|
|
|
|
| + |
| + |
4. Исключительные ситуации |
| + | + |
|
|
|
|
| + |
|
|
5. Распространение ситуаций |
| + | + |
|
|
|
|
| + |
|
|
РЕЙТИНГ ПО ГРУППЕ: | 0 | 2 | 2 |
| 0 | 2 | 2 |
| 6 |
|
|
КОММЕНТАРИИ К ОЦЕНКЕ СВОЙСТВ:
к пункту 2:ADA имеет специальный оператор приема сигналов when
КОММЕНТАРИИ К ПРОГНОЗУ:
к пункту 1: этот наиболее примитивный механизм параллельных процессов желателен в каждом языке программирования
к пункту 3: критические участки (мониторы) могут выступать альтернативой механизму сигналов
к пунктам 4-5: механизм обработки исключительных ситуаций в общем виде громоздок и трудно реализуем, однако желательно иметь некоторые средства для обработки ошибок времени выполнения
I. ПРОЧИЕ ВОЗМОЖНОСТИ.
Важные свойства языков программирования, тематически не относящиеся к предыдущим разделам, были объединены в дополнительный раздел "прочие возможности".
1. Инициализация переменных | + | ++ | ++ |
| + |
|
|
| + |
| + | |||||||||||
2. Константные выражения | + | ++ | ++ |
| ++ | ++ | ++ |
| ++ |
| ++ | |||||||||||
3. Типизированные константы | + | + | + |
| + | ++ | + |
| ++ |
| + | |||||||||||
4. Макросы | + | + | + |
|
|
|
|
| ++ |
|
| |||||||||||
5. Приоритеты логических операций | + | + | + |
|
|
|
|
| + |
| + | |||||||||||
6. Адресная арифметика | + | + |
|
|
|
|
|
|
|
|
| |||||||||||
7. Условное выражение | + | + | + |
|
|
|
|
|
|
|
| |||||||||||
8. Операция разыменования | + | + |
|
| + | + | + |
|
|
| + | |||||||||||
9. Операция “разыменование+доступ к полю” | + | + |
|
|
| ++ | ++ |
| ++ |
| + | |||||||||||
РЕЙТИНГ ПО ГРУППЕ: | 9 | 11 | 8 |
| 5 | 7 | 6 |
| 11 |
|
|
КОММЕНТАРИИ К ОЦЕНКЕ СВОЙСТВ:
к пункту 1:С++ и Java автоматически вызывают конструкторы при инициализации
к пункту 2:в C для реализации константных выражений применяется механизм макросов
к пункту 3:ADA, MODULA и OBERON позволяют объявлять типизированные константы непосредственно в выражении
к пункту 4:в ADA роль макросов выполняют настраиваемые компоненты языка
к пункту 5:в C++ 11 уровней приоритетов, в ADA отдельные уровни приоритетов выделены для логических операций и операций отношения
к пункту 8:в ADA нет операции разыменования (только вместе с операцией “доступ к полю”), для ее имитации можно применять псевдополе “all”; в С и С++ операция разыменования префиксная, что не всегда удобно
к пункту 9:в MODULA, OBERON и ADA операция “доступ к полю” и комплекс “разыменование+доступ к полю” допустимо обозначать одним знаком (точка)
КОММЕНТАРИИ К ПРОГНОЗУ:
к пункту 4: использование макросов для определения констант и реализации inline-процедур в C снижает скорость компиляции и ухудшает читабельность программ
к пункту 5: наличие отдельных уровней приоритетов для операций отношения и логических операции позволяет записывать условия в удобной и естественной форме
к пункту 6:в настоящее время адресная арифметика считается низкоуровневым элементом языка, зависящим от реализации, и в описание языка не включается
к пункту 8:условное выражение ухудшает читабельность текста программы (вместо него желательно применять условный оператор)
J. СРАВНЕНИЕ МОЩНОСТИ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ.
Хотя сравнение языков программирования между собой по объему предоставляемых программисту средств и не входит в основную задачу нашего исследования, тем не менее, интересно воспользоваться результатами проведенного анализа для оценки мощности языков программирования. Ниже приведена таблица баллов, начисленных языкам по каждому из разделов.
| C | C++ | Java | Pascal | Modula | Oberon | Ada | ||
1. НАБОР ОПЕРАТОРОВ | 17 | 18 | 16 |
| 16 | 15 | 15 |
| 16 |
2. МЕХАНИЗМ ПРОЦЕДУР | 5 | 10 | 4 |
| 7 | 6 | 7 |
| 11 |
3. КОНСТРУКТОР ТИПОВ | 6 | 7 | 6 |
| 12 | 10 | 7 |
| 11 |
4. СТРОГАЯ ТИПИЗАЦИЯ | 4 | 4 | 9 |
| 9 | 9 | 9 |
| 12 |
5. РАЗДЕЛЬНАЯ КОМПИЛЯЦИЯ | 5 | 8 | 7 |
| 6 | 8 | 6 |
| 11 |
6. АБСТРАКТНЫЕ ТИПЫ И ОБЪЕКТЫ | 1 | 10 | 10 |
| 6 | 1 | 7 |
| 6 |
7. ПРОЦЕССЫ И ИСКЛЮЧЕНИЯ | 0 | 2 | 2 |
| 0 | 2 | 2 |
| 6 |
8. ПРОЧИЕ ВОЗМОЖНОСТИ | 9 | 11 | 8 |
| 5 | 7 | 6 |
| 11 |
ОБЩИЙ РЕЙТИНГ: | 47 | 70 | 62 |
| 61 | 58 | 59 |
| 84 |
Первый сюрприз рейтинга – уверенное последнее место С. Главный инструмент профессионального программиста, вопреки распространенному заблуждению, достаточно “слабый” язык. Впрочем, последнее место С говорит и о том, что для создания программ любой степени сложности необязательно привлекать мощные языки программирования. С этой точки зрения борьба Вирта и его последователей за простоту языков программирования приобретает дополнительный аргумент “за”. Неудивительно, что все три его языка (PASCAL, MODULA и OBERON) показали примерно одинаковый средний результат. Это - свидетельство хорошей сбалансированности набора конструкций этих языков программирования.