Сравнение Языков Программирования
Материал из eSyr's wiki.
На этой страничке собираются материалы, которые могут помочь при подготовке к экзамену по языкам программирования.
ЯП из курса: C, C++, Java, C#, Pascal, Delphi, Оберон-2, Модула-2, Ада (83 и 95 стандарты)
Полезные ссылки:
Энциклопедия языков программирования
Немножно рекламное сравнения большинства языков
План (краткий, взят из методички Головина, подробный см. в самой методичке):
Базисные типы данных в языках программирования: простые и составные типы данных, операции над ними
ADA
- Integer
- Размер не фиксирован.
- Character
- Как я понял, существует несколько разновидностей (зависит от размера) и является особым перечислимым типом (Enumeration)
- String
- Массив Character фиксированной длины. Так же есть стандартные пакеты, реализующие строки квазистатической и динамической длины.
- Floating point
- Эти типы обычно определяются вручную в виде конструкции, где Num_Digits указывает минимальную погрешность:
digits Num_Digits
- Fixed Point
- Эти типы также обычно определяются вручную в виде конструкции, где Delta означает погрешность:
delta Delta range Low .. High
Массивы. Длина массива - статический или динамический атрибут.
Управление памятью (ручное или сборщик мусора, выделение памяти для объектов)
Указатели
Ада, C, C++, C#, Delphi, Оберон
Указатели языка Ада 83 ссылаются только на объекты из динамической памяти. Указатель языка Си++ может ссылаться на любой объект данных (динамический, локальный, статический), что может приводить к труднообнаружимым ошибкам.
Также в языке Ада отсутствует адресная арифметика (арифметические операции над указателями), что также уменьшает вероятность появления ошибки работы с памятью.
В языке Оберон указатель может быть объявлен только на массив или запись.
В Java явных указателей нет.
Операторный базис языков программирования. Управление последовательностью вычислений
Процедурные абстракции
Перегрузка операций
Ада 83, Ада 95, Си++, Java, Delphi, C#
Понятие «перегрузка» означает, что одному имени в одной области видимости может соответствовать несколько определений. В современных языках программирования перегружаться могут только имена подпрограмм, но не типов, переменных, модулей. Пример на языке Си++:
class X { public: void f(); void f (int) }; X a; a.f(); // первая функция a.f(0); // вторая функция
Отличие перегрузки от замещения состоит во-первых, в том, что перегрузка обрабатывается статически (на этапе трансляции), в во-вторых, при замещении речь идет о разных областях видимости: базовый класс с объявлением виртуального метода (объемлющая область видимости) и производный класс с замещающим методом (вложенная область видимости).
Определение новых типов данных. Логические модули. Классы
ADA
В Аде вообще типы принято определять вручную, пользуясь конструкциями type и subtype. Например:
type Short is range -128 .. +128 type Index is range 0 .. 256 type My_String is array ( Index range <> ) of Character -- My_String - это массив, индексируемый типом Index в неизвестных пока границах, состоящий из Character subtype String_10 is My_String ( 0 .. 10 ); -- Подтип типа My_String, состоящий из 10 элементов. type Money is delta 1/100 range 0.0 ... 10000.0
Инкапсуляция и абстрактные типы данных
Модульность и раздельная трансляция
Раздельная трансляция
C, C++
Раздельная трансляция означает то, что программа разбивается на части — физические модули или единицы компиляции. Каждая единица может или обязана транслироваться отдельно от остальных. Независимая раздельная трансляция означает то, что транслятор не обладает информацией об уже оттранслированных единицах и поэтому не может проверить корректность межмодульных связей.
Исключительные ситуации и обработка ошибок
Исключения и блоки try {} catch {} finally {}. Семантика возобновления и семантика завершения.
Семантика возобновления: после обработки исключения управление может вернуться непосредственно в точку, где возникло исключение (варианты: на следующий оператор или на любой оператор из того же блока). Пример языка c семантикой возобновления: Visual Basic.
Семантика завершения: после возникновения исключения блок, в котором оно возникло, обязательно завершается. Обработка исключения происходит в блоках, вызвавших блок с исключением. Пример языка с семантикой завершения: Си++.
Наследование типов и классов
Динамический полиморфизм
Абстрактные классы и интерфейсы
Абстрактный тип данных (АТД) — это тип с полностью инкапсулированной структурой. Использовать объекты АТД возможно только при помощи явно определенных в интерфейсе типа операций. Абстрактный класс (АК) — это класс, содержащий хотя бы один абстрактный метод.
Прямой связи между АК и АТД нет. АТД может быть абстрактным классом, а может и не быть. Аналогично, АК может иметь инкапсулированную структуру, а может и не иметь.
Множественное наследование
Динамическая идентификация типа
Понятие о родовых объектах. Обобщенное программирование
Итоговая таблица
Если в таблице указан знак вопроса, то либо этого языка не было в списке языков в задании, либо информация отсутствует.
C | C++ | C# | Java | Pascal | Delphi | Оберон | Оберон-2 | Modula-2 | Ada83 | Ada95 | |
---|---|---|---|---|---|---|---|---|---|---|---|
есть оператор перехода «goto метка» | есть | есть | есть | нет | ? | есть | нет | нет | нет | есть | есть |