КОММЕНТАРИИ К ОЦЕНКЕ СВОЙСТВ:
к пункту 1: ADA позволяет использовать три варианта параметров – in, out, и in out
к пункту 2: C и С++ не позволяют определить размер параметра-массива
к пункту 5: С++ позволяет перегружать операции "[]", "." и "*"
КОММЕНТАРИИ К ПРОГНОЗУ:
к пункту 3: необязательные параметры - достаточно простой и наглядный способ варьировать набор параметров процедуры
к пункту 4: перегрузка имен процедур необходима для реализации ООП
к пункту 5: необходимость перегружать знаки операций вызывает у автора серьезные сомнения
к пункту 10: возможность описывать локальные процедуры представляется излишней (здесь, как и в случае с типом “множество”, сильно влияние Вирта, три языка которого присутствуют в рейтинге).
D. КОНСТРУКТОР ТИПОВ В ЯЗЫКАХ ПРОГРАММИРОВАНИЯ.
Эта группа параметров характеризует способность языка создавать новые типы данных на основе имеющихся, а так же реализацию некоторых встроенных типов, таких как строки или множества.
|
C
|
C++
|
Java
|
|
Pascal
|
Modula-2
|
Oberon-2
|
|
Ada 95
|
|
Прогноз
|
1.Встроенный тип строк символов
|
|
|
+
|
|
++
|
|
|
|
+
|
|
+
|
2.Скалярный тип и отрезок
|
++
|
++
|
|
|
+
|
+
|
|
|
++
|
|
+
|
3.Запись (структура) с вариантной частью
|
+
|
+
|
|
|
++
|
++
|
|
|
+
|
|
++
|
4.Массив
|
+
|
+
|
+
|
|
++
|
++
|
++
|
|
++
|
|
+
|
5.Массив с переменной границей
|
+
|
+
|
++
|
|
|
|
|
|
+
|
|
|
6.Указатель
|
+
|
+
|
|
|
+
|
+
|
+
|
|
+
|
|
+
|
7.Множество
|
|
|
|
|
+
|
+
|
+
|
|
|
|
+
|
8.Вложенность описаний типов
|
|
|
|
|
+
|
+
|
+
|
|
+
|
|
+
|
9.Булевский тип
|
|
+
|
++
|
|
++
|
++
|
++
|
|
++
|
|
++
|
РЕЙТИНГ ПО ГРУППЕ:
|
6
|
7
|
6
|
|
12
|
10
|
7
|
|
11
|
|
|
КОММЕНТАРИИ К ОЦЕНКЕ СВОЙСТВ:
к пункту 1: PASCAL позволяет пользоваться как массивами символов, так и строками ASCIIZ
к пункту 2:в С, C++ и ADA можно произвольно назначать значения констант скалярного типа
к пункту 3:С и С++ позволяют объявить только одно поле в варианте; в ADA вариант записи должен быть определен в момент ее создания
к пункту 4:в С, C++ и Яве нельзя объявлять матрицы вида arr[10,20]; тип индекса всегда целый, нумерация элементов всегда от 0
к пункту 5:в Яве все массивы с переменной границей; в С и С++ нельзя определить фактический размер массива с переменной границей
к пункту 6:в Яве все переменные и объекты являются скрытыми указателями
к пункту 8:здесь оценивается возможность вместо имени типа указать его объявление; С++ допускает вложенные объявления только массива и указателя на тип
к пункту 9:тип bool в С++ автоматически преобразуется в тип int и обратно, так что при создании программ его можно игнорировать
КОММЕНТАРИИ К ПРОГНОЗУ:
к пункту 1: строки – настолько важный тип данных, что для его реализации желательно иметь специальный базовый тип
к пункту 2: необходимость явно присваивать значения константам скалярного типа вызывает серьезные сомнения
к пункту 3: несмотря на возможность реализовать запись с вариантами путем наследования (в языках, поддерживающих ООП), без этого механизма сложно обойтись в системном программировании
к пункту 5: массив с переменной верхней границей как правило, необходим только при описании формальных параметров процедуры
к пункту 7: множество является удобным механизмом, однако его реализация не вполне эффективна; тем не менее множества (ненагруженные) очевидно, сохранятся в будущих языках программирования
к пункту 8: неограниченная вложенность описаний типов - необходимое условие удобства работы программиста
к пункту 9: наличие булевского типа данных позволяет выявить многие семантические ошибки на этапе трансляции
E. СТРОГАЯ ТИПИЗАЦИЯ В ЯЗЫКАХ ПРОГРАММИРОВАНИЯ.
Этот раздел показывает, насколько строгий контроль типов обеспечивает тот или иной язык программирования. Отсутствие или ослабление контроля воспринимается, как недостаток языка.
|
C
|
C++
|
Java
|
|
Pascal
|
Modula-2
|
Oberon-2
|
|
Ada 95
|
|
Прогноз
|
1.Контроль оператора присваивания
|
+
|
+
|
++
|
|
++
|
++
|
++
|
|
++
|
|
++
|
2.Контроль фактических параметров
|
+
|
+
|
++
|
|
++
|
++
|
++
|
|
++
|
|
++
|
3.Контроль типа счетчика for
|
+
|
+
|
+
|
|
+
|
+
|
+
|
|
+
|
|
+
|
4.Контроль типа условия в if,while,repeat (do)
|
|
|
+
|
|
+
|
+
|
+
|
|
+
|
|
+
|
5.Автоматическое преобразование типов
|
|
|
+
|
|
+
|
++
|
++
|
|
++
|
|
++
|
6.Контроль переключателя в записи
|
|
|
|
|
|
|
|
|
+
|
|
|
7.Операции приведения типов
|
+
|
+
|
+
|
|
++
|
++
|
++
|
|
++
|
|
++
|
8.Контроль границ индекса массива
|
|
|
+
|
|
|
|
|
|
+
|
|
|
РЕЙТИНГ ПО ГРУППЕ:
|
4
|
4
|
9
|
|
9
|
9
|
9
|
|
12
|
|
|
КОММЕНТАРИИ К ОЦЕНКЕ СВОЙСТВ:
к пункту 1:языки “группы С” допускают широкий спектр автоматического преобразования типов при присваивании
к пункту 2:С++ имеет более "мягкие" правила соответствия типов
к пункту 4:С++ требует, чтобы условие в этих операторах имело тип “bool”, однако допускает автоматическое преобразование типа “int” в “bool”
к пункту 5:С и PASCAL допускают автоматическое преобразование числовых типов (это противоречит концепции строгой типизации); С++ автоматически преобразует “int ” в “bool”, В ADA автоматические преобразования числовых типов существуют, но строго контролируются
к пункту 7:в С, С++ и Яве префиксная форма записи операции по преобразованию типов
КОММЕНТАРИИ К ПРОГНОЗУ:
к пункту 2: "жесткие" правила совместимости типов позволяют выявить на этапе трансляции многие семантические ошибки
к пункту 5 : "хорошим тоном" с точки з рения строгой типи з ации считается полный запрет на автоматическое (неявное) преобразование типов ; в языках MODULA, OBERON и ADA допускаются только преобразования типа отрезка к базовому типу и некоторые преобразования целых типов
к пункту 6: контроль значения переключателя в записи во время выполнения программы крайне неэффективен с точки з рения реализации
F. РАЗДЕЛЬНАЯ КОМПИЛЯЦИЯ В ЯЗЫКАХ ПРОГРАММИРОВАНИЯ.
Механизм раздельной компиляции должен обеспечивать сборку программы и з ранее написанных модулей. Оценивается полнота и удобство этого механи з ма в каждом я з ыке программирования.
|
C
|
C++
|
Java
|
|
Pascal
|
Modula-2
|
Oberon-2
|
|
Ada 95
|
|
Прогноз
|
1. Единицы компиляции
|
+
|
+
|
++
|
|
++
|
++
|
++
|
|
++
|
|
++
|
2. Раздел интерфейса модуля
|
++
|
++
|
++
|
|
+
|
++
|
|
|
++
|
|
++
|
3. Импорт модулей
|
|
+
|
+
|
|
+
|
++
|
+
|
|
+
|
|
+
|
4.Экспорт идентификаторов
|
+
|
+
|
+
|
|
+
|
+
|
+
|
|
+
|
|
+
|
5.Ограничения видимости
|
|
+
|
|
|
|
|
|
|
++
|
|
|
6. Синонимы
|
|
|
|
|
|
|
+
|
|
+
|
|
|
7. Настраиваемые модули
|
|
+
|
|
|
|
|
|
|
+
|
|
|
8. Произвольная структура модулей
|
+
|
+
|
+
|
|
+
|
+
|
+
|
|
+
|
|
+
|
РЕЙТИНГ ПО ГРУППЕ:
|
5
|
8
|
7
|
|
6
|
8
|
6
|
|
11
|
|
|
Достарыңызбен бөлісу: |