WikiDer > Сравнение АЛГОЛА 68 и C ++
Эта статья включает список литературы, связанное чтение или внешние ссылки, но его источники остаются неясными, потому что в нем отсутствует встроенные цитаты. (июнь 2013) (Узнайте, как и когда удалить этот шаблон сообщения) |
В C ++ нет:
- PROC - первый класс вложенные функции (эмуляция из-за локальных определений типов классов, которые затем могут быть функторы, также новые C ++ 11 имеет лямбда-функции),
- OP и PRIO - определяемые символы операторов и приоритеты,
- сборка мусора (можно эмулировать с помощью умные указатели),
- использовать перед определением,
- форматированный перевод использование сложных деклараций форматирования,
- := - символ операции присваивания (во избежание путаницы со знаком равенства),
- массив (и операции нарезки над ними, но в многоуровневых библиотеках),
- автоматический СОЮЗЫ,
- CASE-выражения,
- нелокальный ПЕРЕЙТИ К
- интуитивно понятный синтаксис объявления из-за его происхождения от C.
АЛГОЛ 68 не имеет:
- защита доступа к публичной / частной структуре,
- перегруженные процедуры (в отличие от операторов),
- явное освобождение памяти,
- предварительные объявления (допускается использование перед определением)
- текстовый предварительная обработка (например, макросы),
- отдельные типы ссылок и указателей,
- комментарий строки (только комментарии в квадратных скобках),
- наследование структур, функции-члены структуры, виртуальные функции.
- деструкторы, исключения, шаблоны, пространства имен, выходы из структурированного цикла
Сравнение операторов присваивания и равенства
Намерение | АЛГОЛ 68 | C ++ |
---|---|---|
Определите константу | int х = 888; | const int Икс = 888; |
Инициализировать переменную | int х: = 888; | int Икс = 888; |
Присвойте значение 888 переменной Икс | х: = 888; | Икс = 888; |
Сравните два значения | если х = 888 тогда ... фи | если (Икс == 888) { ... } |
Выделите переменную из куча | ссылка int х = куча int; или просто: куча int Икс; | int* Икс = новый int; |
Сравните адрес двух указателей | ссылка int х, у; | int* Икс; int* y;
|
Сравнить значение, на которое ссылаются два указателя | ссылка int х, у; если х = у тогда ... фи | int* Икс; int* y;
|
Назовите новый тип | Режим Longreal = длинная настоящий; | typedef двойной Longreal; или (начиная с C ++ 11): с помощью Longreal = двойной; |
Назовите новый тип записи | Режим cust = структура(строка Название Адрес); | структура cust { стандартное::строка имя, адрес; }; |
Назовите новый тип объединения | Режим Taggedu = союз(строка с, настоящий р); | союз ты { стандартное::строка s; плавать ж; }; |
Назовите процедуру или функцию | proc f = (настоящий Икс) настоящий: (код; результат); | плавать ж(плавать Икс) { код; вернуть результат; } |
Параметры процедуры по умолчанию | proc р = (союз (настоящий, пустота) в x)пустота:
| пустота п(плавать Икс=888) { код; } |
Назовите нового оператора | op ↑ = (настоящий х, у) настоящий: х ** у; | Нет данных |
Установить приоритет на нового оператора | прио ↑ = 9; | Нет данных |
Назначение переменных цепочки | a: = b: = c: = d; | а = б = c = d; |
Оператор смещения - АЛГОЛ 68C только | a: =: = b: =: = c: =: = d; | а = б; б = c; c = d; |
Добавить "substr" к переменной ул | стр +: = "подстр"; | ул += "substr"; |
Префикс "substr" к переменной ул | "substr" + =: str; | ул = "substr" + ул; |
Примеры кода
Заявление и использование Союза
Присвоение значений A68 союз
переменная является автоматической, тип "привязан" к переменной, но извлечение значения обратно синтаксически неудобно, поскольку оговорка о соответствии требуется.
Пример АЛГОЛА 68:
союз(int, char) х: = 666; printf (($ 3d l $, (x | (int i): i)))
Пример C / C ++:
союз { int я; char c; } Икс = { 666 }; стандартное::cout << Икс.я << стандартное::конец;
Чистый эффект «тегирования типов» состоит в том, что строгая типизация «половина» в Algol68 вторгается в союз
.
Объявление режима
Новый режим (тип) может быть объявлен с помощью Режим
декларация:
int макс = 99;Режим Новый тип = [0: 9] [0: макс]структура ( длинная настоящий а, б, в, короткая int я, j, k, ссылка настоящий р);
Это имеет тот же эффект, что и следующий код C ++:
const int Максимум=99;typedef структура { двойной а, б, c; короткая я, j, k; плавать& р;} Новый тип[9+1][Максимум+1];
Обратите внимание, что для АЛГОЛА 68 только имя нового типа появляется слева от равенства, и, что особенно важно, конструкция выполняется - и может быть прочитана - слева направо без учета приоритетов.
внешние ссылки
- Сравнение PASCAL и ALGOL 68 - Эндрю С. Таненбаум - июнь 1977 г.
- Ортогональный языковой дизайн - апр 2004 - получено 10 мая 2007 г.
- Как решить проблему с остальным? - апр 2004 - получено 10 мая 2007 г.
- Сравнение Pascal, C, C ++ и Algol68: типы, cont Система типов, проверка типов, безопасность типов, преобразование типов, примитивные типы, агрегированные типы: массивы - апр 2004 - получено 10 мая 2007 г.
- Массивы в Algol68 - апр 2004 - получено 10 мая 2007 г.
- Сравнение массивов в Алголе 68 и BLISS - Майкл Уокер - 21 февраля 2000 г. - получено 21 декабря 2015 г.