КОММЕНТАРИИ К ОЦЕНКЕ СВОЙСТВ:
к пункту 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) показали примерно одинаковый средний результат. Это - свидетельство хорошей сбалансированности набора конструкций этих языков программирования.
В верхней части рейтинга оказались два языка-“тяжеловеса” – ADA и С++. При создании обеих языков программирования была предпринята попытка включить в них все наиболее значимые теоретические наработки. “Старичок” ADA победил, возможно, потому, что создавался “с чистого листа”, в то время как создателей С++ сдерживала необходимость сохранить совместимость с С.
Самый “молодой” из рассматриваемых языков – Java, получил пристойную среднюю оценку, примерно такую - же, как и у языков Вирта. Однако, учитывая ярко выраженную “объектную ориентированность” Java, следует признать, что как инструмент системного программиста этот язык недостаточно мощен.
K. КРАТКИЙ ОБЗОР СОВРЕМЕННЫХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ.
Ниже приведены краткие характеристики языков программирования, включенных в данный обзор. В основном это субъективная точка зрения автора статьи, хотя она и опирается на поведенный выше анализ.
Си.
Главный инструмент системного программиста на сегодняшний день. Си создавался программистами Bell laboratories для себя как инструмент для разработки ОС UNIX и получил первоначальное распространение как базовый язык этой операционной системы. Си имеет очень приятный набор операторов (исключение составляет неструктурный switch) и неудачный конструктор типов. Серьезный недостаток (для языка системного программирования) – почти полное отсутствие механизмов раздельной компиляции. Поскольку Си доминирует на американском рынке средств разработки ПО, ему гарантирована долгая жизнь, несмотря на многочисленные попытки модернизировать его (например, такие, как С++ или Java).
С++.
Наиболее популярный клон С, в котором реализован наиболее полный (на сегодняшний день) механизм объектно-ориентированного программирования. При создании языка делались так же попытки модернизировать С, введя в его состав такие современные конструкции, как скалярный тип (enum), передача параметра по ссылке (&) или логический тип (bool). К сожалению, последовательными эти попытки назвать нельзя. Получился очень объемный (по этому показателю с ним может соперничать только ADA) и очень несистемный, “рыхлый” язык программирования, где наряду с суперсовременными понятиями класса соседствует адресная арифметика, доставшаяся в наследство от С.
Java.
Самый “молодой” из включенных в обзор языков программирования и основной инструмент программирования для Internet. Создатели Java безжалостно удалили из С все несовременные конструкции, и в то же время сумели удержаться от излишнего “раздувания” языка включением в него новых теоретических разработок. В результате получился не очень объемный, но стройный, “крепко сбитый” язык программирования с ярко выраженной идеологией. К сожалению, ориентация на Internet не дает возможности использовать Java как язык системного программирования, однако это хороший пример реформы С. Клоном С он является только внешне. Идеологически это хороший пример европейской языковой школы (к которой можно отнести клоны PASCAL и ADA).
PASCAL.
Ветеран европейской языковой школы, первый и самый популярный из языков Вирта. В языке реализован классический набор операторов и идеальный конструктор типов. Языку очень вредит отсутствие стандартных механизмов раздельной компиляции и ООП. В отличие от своего сверстника и конкурента С, PASCAL создавался одномоментно, что и предопределило его малые размеры и идеологическую стройность. С появлением MODULA и OBERON PASCAL можно считать устаревшим языком, однако консервативность программного обеспечения не позволяет считать такой вывод окончательным.
MODULA-2.
Наиболее известный клон PASCAL и любимый язык автора этой статьи. Классический набор операторов и конструктор типов. Хорошо разработанные механизмы раздельной компиляции (конкуренцию MODULA в этом классе может составить только ADA). Маленький и удобный язык с точки зрения разработчика компилятора (как и все языки Вирта, видимо, сказывается то обстоятельство, что Вирт сам пишет компиляторы для своих языков). Недостатком языка можно считать полное отсутствие механизмов ООП.
OBERON-2.
Последний из языков Вирта и клонов PASCAL. OBERON позиционировался как MODULA + ООП, однако при создании языка Вирт выбросил из MODULA много приятных возможностей (часть из которых была добавлена при создании OBERON-2, считающегося современным вариантом языка). К сожалению, необратимо пострадал механизм раздельной компиляции (крайне важный для языка системного программирования). С точки зрения идеологии OBERON скорее наследник MODULA-1 (был такой очень маленький язык, не содержавший даже чисел с плавающей точкой), чем MODULA-2. Реализации ООП сделана очень красиво и с минимальными издержками для разработчика компилятора.
ADA-95.
Самый мощный из используемых сегодня языков программирования, ADA вызывает противоречивые чувства. С одной стороны, это самый яркий представитель европейской школы языков программирования, в котором реализовано множество теоретических наработок. С другой стороны, бюрократические методы создания языка (тоже, возможно, впервые опробованные на практике) привели к такому его “разбуханию”, что создание компиляторов для него стало крайне трудоемким и дорогостоящим делом. Неудачей можно считать и попытку реализации ООП в ADA. Писать ООП - программы на ADA-95 конечно, можно, но крайне неудобно. В каком-то смысле этот вывод можно перенести и на весь язык в целом. Единственным несомненным плюсом ADA можно считать наиболее полную и подробную стандартизацию, вследствие чего переносимость программ на ADA наиболее лучшая по сравнению с другими языками программирования.
L. ВЫВОДЫ.
Главный вывод, который можно сделать на основе изложенного материала – несомненное сходство языков программирования в основных компонентах, таких, как набор операторов, конструктор типов, механизм процедур и ООП. Различия проявляются только в деталях, семантически современные языки программирования практически идентичны. Поэтому насущной задачей становится описание стандартов семантической составляющей языков программирования и создание семейств компиляторов с общей семантической базой (этой теме была посвящена статья “Современные языки программирования”).
Что такое языки с общей семантической базой, можно посмотреть на примере компилятора “Странник”, поддерживающего три языка (MODULA-2, PASCAL и Си), которые полностью эквивалентны друг другу на уровне семантики (компилятор можно бесплатно получить на сайте home.perm.ru/~strannik ). Электронный адрес автора статьи strannik@mail.perm.ru
Достарыңызбен бөлісу: |