~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ E63CD447BDFFF9758709D7BC26B548F1__1685517000 ✰
Заголовок документа оригинал.:
✰ ALGOL 68-R - Wikipedia ✰
Заголовок документа перевод.:
✰ АЛГОЛ 68-Р — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/ALGOL_68-R ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/e6/f1/e63cd447bdfff9758709d7bc26b548f1.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/e6/f1/e63cd447bdfff9758709d7bc26b548f1__translat.html ✰
Дата и время сохранения документа:
✰ 02.07.2024 03:12:57 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 31 May 2023, at 10:10 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

АЛГОЛ 68-Р — Википедия Jump to content

АЛГОЛ 68-Р

Из Википедии, бесплатной энциклопедии
АЛГОЛ 68Р
Оригинальный автор(ы) И.Ф. Карри, Сьюзен Дж. Бонд , Джей Ди Моррисон
Разработчики) Королевское радарное учреждение
Начальная версия 20 июля 1970 г .; 53 года назад ( 1970-07-20 )
Написано в АЛГОЛ 60 (оригинал)
АЛГОЛ 68-Р (последний)
Операционная система Джордж 3
Платформа ICL 1907F
Размер 34 тыс. слов
Доступно в Английский
Тип Составитель , переводчик
Лицензия Бесплатное ПО
Веб-сайт SW .ccs .bcs .org /CCs /g3

АЛГОЛ 68-R был первой реализацией алгоритмического языка АЛГОЛ 68 .

В декабре 1968 года был опубликован отчет об алгоритмическом языке АЛГОЛ 68. (IFIP) организовала рабочую конференцию 20–24 июля 1970 г. Международная федерация обработки информации для обсуждения проблем внедрения языка. [1] небольшая группа из Королевского радиолокационного учреждения (RRE) присутствовала, чтобы представить свой компилятор , написанный И. Ф. Карри, Сьюзан Г. Бонд , [2] и Джей Ди Моррисон. Учитывая оценки, требующие до 100 человеко-лет для реализации языка с использованием многопроходных компиляторов с числом до семи проходов, они описали, как они уже реализовали однопроходный компилятор , который находился в производстве для инженерных и научных целей.

Компилятор [ править ]

Компилятор ALGOL 68-R изначально был написан на локальном диалекте ALGOL 60 с расширениями для манипулирования адресами и обработки списков. Парсер был написан с использованием синтаксического анализатора Syntax Improving Device (SID) генератора JM Foster .

Около 20 тысяч из них — это программа, которая, по нашему мнению, слишком велика.
- Карри [3]

Первая версия компилятора занимала 34 тыс. слов. Позже он был переписан в АЛГОЛе 68-R. [4] для компиляции большинства программ требуется около 36 тыс. слов. [5]

АЛГОЛ 68-R был реализован под операционной системой George 3 на ICL 1907F . Компилятор бесплатно распространялся компанией International Computers Limited (ICL) от имени Королевского радарного учреждения (RRE).

Ограничения в компилируемом языке [ править ]

Это вопрос морали. У нас есть Библия, а вы грешите!
Майю [6]

Чтобы обеспечить однопроходную компиляцию, в ALGOL 68-R реализовано подмножество языка, определенное в исходном отчете: [7]

  1. Идентификаторы, режимы и операторы необходимо указать перед использованием.
  2. Нет автоматической обработки
  3. Явный VOID режим
  4. Нет официальных декларантов
  5. Никакой параллельной обработки
  6. GOTO нельзя опустить
  7. Объединение возможно только в сильных позициях

Многие из этих ограничений были приняты в пересмотренном отчете об Алголе 68.

Спецификация перед использованием [ править ]

Чтобы обеспечить возможность компиляции за один проход, АЛГОЛ 68-R настаивал на том, чтобы все идентификаторы были указаны (объявлены) перед использованием.

Стандартная программа:

PROC  четный = (  число INT  )  BOOL  : (число = 0 |  ИСТИНА  | нечетное (  ABS  (число - 1))); 
  PROC  нечетное = (  число INT  )  BOOL  : (число = 0 |  ЛОЖЬ  | четное (  ABS  (число - 1))); 
 

придется переписать так:

PROC  (  INT  )  BOOL  нечетный; 
  PROC  четный = (  число INT  )  BOOL  : (число = 0 |  ИСТИНА  | нечетное (  ABS  (число - 1))); 
  нечетное := (  число INT  )  BOOL  : (число = 0 |  ЛОЖЬ  | четное (  ABS  (число - 1))); 
 

Чтобы разрешить рекурсивное объявление режимов (типов), использовалось специальное объявление режима -заглушки , чтобы сообщить компилятору, что предстоящий символ является режимом, а не оператором:

РЕЖИМ   Б  ; 
  РЕЖИМ   A  =  СТРУКТУРА  (  REF   B  b); 
  РЕЖИМ   B  = [1:10]  ЗАДАНИЕ   A  ; 
 

Никаких процедур [ править ]

В стандартном языке процедур приведение могло бы в строгом контексте преобразовать выражение некоторого типа в процедуру, возвращающую этот тип. Это можно использовать для реализации вызова по имени .

Другим случаем использования процедур было объявление процедур в объявлении:

PROC  x плюс 1 =  INT  : x + 1;
 

правая часть представляла собой x преобразование + 1 в целое число, которое затем было преобразовано в процедуру, возвращающую целое число .

Команда разработчиков ALGOL 68-R сочла это слишком сложным и внесла в язык два изменения. Приведение процедур было удалено, а выражение form mode:expression было переопределено как обозначение процедуры , приведение типов обозначалось явным символом VAL :

REAL  : x  CO  приведение к  REAL  в ALGOL 68  CO 

 REAL   VAL  x  CO  приведение к  REAL  в ALGOL 68-R  CO 

Код, в котором допустимо использовать вызов по имени (например, устройство Дженсена ), может просто передать обозначение процедуры:

 Сумма PROC  = (  INT  lo, hi,  PROC  (  INT  )  REAL  term)  REAL  : 
   НАЧАТЬ 
     РЕАЛЬНУЮ  температуру := 0; 
      ДЛЯ  Я  ОТ  ло  ДО  привет  ДЕЛАТЬ 
         темп +:= термин (я); 
      температура 
   КОНЕЦ  ; 
   распечатать (сумма (1, 100, (  INT  i)  REAL  : 1/i)) 
 

В версии языка, определенной в пересмотренном отчете, эти изменения были приняты, хотя форма приведения была немного изменена на режим (выражение) .

REAL  (x)  CO  приведение к  REAL  в пересмотренном АЛГОЛе 68  CO 

Явный режим void [ править ]

В исходном языке режим VOID был представлен пустым режимом:

: х := 3,14;   CO  cast (x := 3.14) для аннулирования  CO 

 PROC  endit =  GOTO  end;   CO  процедура, возвращающая void  CO 

Команда ALGOL 68-R решила использовать явный символ VOID , чтобы упростить синтаксический анализ (и повысить читаемость):

 ЗНАЧЕНИЕ  ПУСТОЕ  x := 3,14;   CO  cast (x := 3.14) для отмены  CO 

 PROC  endit =  VOID  :  GOTO  end;   CO  процедура, возвращающая void  CO 

Эта модификация языка была принята в пересмотренном отчете ALGOL 68.

официальных Нет декларантов

Формальные объявления — это режимы в левой части объявления идентичности или режимы, указанные в объявлении процедуры. В исходном языке они могли включать границы массива и указывать, был ли соответствующий фактический оператор объявления фиксированным: FLEX или ИЛИ ЛИБО :

[ 15 ]  ИНТ  а;   CO  фактический оператор объявления, границы 1:15  CO 
 REF  [ 3 : ]  INT  b = a;   CO  Это ошибка  CO 

 PROC  x = (  REF  [ 1 :  EITHER  ]  INT  a) : ... 
 

Я думаю, что для меня было разумным опустить границы в формальных объявлениях, но я думаю, что было ужасным преступлением опустить ИЛИ или FLEX .
Линдси [8]

Команда ALGOL 68-R переопределила формальные объявления, чтобы они были такими же, как виртуальные объявления , которые не включают в себя связанную информацию. Они обнаружили, что это уменьшает неоднозначность при синтаксическом анализе языка, и посчитали, что эта функция не будет использоваться в рабочих программах.

Если процедуре необходимы определенные границы для ее аргументов, она может проверить их самостоятельно с помощью операторов UPB (верхняя граница) и LWB (нижняя граница).

В АЛГОЛе 68-R приведенный выше пример можно было бы перекодировать следующим образом: (границы a в процедуре будут зависеть от вызывающей стороны).

[ 15 ]  ИНТ  а;   CO  фактический оператор объявления, границы 1:15  CO 
 REF  []  INT  b = a [  AT  3];   CO  использует  фрагмент  , чтобы b имел границы 3:17  CO 

 PROC  x = (  REF  []  INT  a)  VOID  : ...  границы CO  , заданные вызывающей стороной  CO 

В пересмотренном отчете по Алголу 68 формальные границы также были удалены, но индикатор FLEX был перемещен в такое положение, чтобы его можно было включить в формальные объявления:

[ 1:  FLEX  ]  INT  a;   CO  оригинальный АЛГОЛ 68 или АЛГОЛ 68-R  CO 
 FLEX  [ 1: ]  INT  a;   CO  пересмотрела Алгол 68,  CO 
PROC  x = (  REF  [ 1:  FLEX  ]  INT  a) : ...  CO  Исходный ALGOL 68  CO 
 PROC  x = (  REF  [ ]  INT  a)  VOID  : ...  CO  ALGOL 68-R  CO 
 PROC  x = (  REF   FLEX  [ ]  INT  a)  VOID  : ...  CO  Пересмотренный ALGOL 68  CO 

Никакой параллельной обработки [ править ]

В ALGOL 68 код можно запускать параллельно, записывая PAR , за которым следует вспомогательное предложение , например:

ПАР   НАЧАЛО 
     режиссер, 
     потребитель 
  КОНЕЦ 

процедуры производителя и потребителя будут выполняться параллельно. Тип семафора ( SEMA ) с традиционными операторами P ( DOWN ) и V ( UP ) предусмотрен для синхронизации между частями параллельного предложения,

Эта возможность не была реализована в АЛГОЛЕ 68-R.

Было написано расширение под названием ALGOL 68-RT, которое использовало функцию подпрограммирования ICL 1900 для предоставления возможностей многопоточности программам ALGOL 68-R с семантикой, аналогичной современным потоков . библиотекам [9] В компилятор не вносилось никаких изменений, только библиотека времени выполнения и компоновщик.

goto нельзя опускать [ править ]

В АЛГОЛе 68 символ GOTO можно было опустить при переходе:

Стоп PROC  = : ...; 

  ... 

  BEGIN 
    IF  x > 3  THEN  стоп  FI  ;   CO  прыжок, а не вызов  CO 
     ... 
  останавливаться: 
     ПРОПУСТИТЬ 
 КОНЕЦ 

Поскольку АЛГОЛ 68-R был однопроходным компилятором, это было слишком сложно, поэтому символ GOTO был сделан обязательным.

Такое же ограничение было сделано в официальном подъязыке АЛГОЛ 68S . [10]

Объединение разрешено только в сильных позициях [ править ]

В Алголе 68 объединение — это приведение, которое создает СОЕДИНЕНИЕ из составного режима, например:

РЕЖИМ   IBOOL  =  СОЮЗ  (  INT  ,  BOOL  );   CO  IBOOL  это  INT  или  BOOL   CO 
 IBOOL  a =  TRUE  ;   CO  BOOL  значение  TRUE  объединяется  с  IBOOL   CO 

В стандарте АЛГОЛа 68 объединение было возможно в устойчивом или сильном контексте, поэтому, например, его можно было применить к операндам формул :

 OP   ISTRUE  = (  IBOOL  a)  BOOL  : ...; 
   ЕСЛИ   ИСТИННО  1  CO  законно, потому что 1 (  INT  ) можно объединить с  IBOOL   CO, 
  ТОГДА  ... 
 

Разработчики Алгола 68-R обнаружили, что это приводит к слишком большому количеству неоднозначных ситуаций, поэтому ограничили объединяющее приведение сильными контекстами.

Последствия этого ограничения редко были существенными, и при необходимости его можно было обойти, используя приведение типов для обеспечения сильного контекста в требуемом месте программы.

F00L [ править ]

Компилятор ALGOL 68-R инициализировал неиспользуемую память значением -6815700. [11] [12]

Это значение было выбрано потому, что:

  • В качестве целого числа это было большое отрицательное значение.
  • Как адрес он превышал максимальный адрес для любой практической программы на ICL 1900.
  • Как инструкция это было незаконно
  • В виде текста он отображается как F00L
  • Как число с плавающей запятой, у него был установлен бит переполнения.

То же значение использовалось для представления NIL .

Обвязка [ править ]

Я заметил, что в некоторых примерах ваших программ вы ничего не подчеркиваете и не обрезаете.
Майю [13]

В языках семейства АЛГОЛ необходимо различать идентификаторы и основные символы языка. В печатных текстах это обычно достигалось путем печати основных символов жирным шрифтом или подчеркиванием ( BEGIN или Begin например, ).

В с исходным кодом программах ограничения приходилось использовать некоторую технику . Во многих языках, подобных АЛГОЛу, до АЛГОЛа 68-R, это достигалось путем заключения основных символов в одинарные кавычки (например, «начало»). В 68-R основные символы можно было отличить, написав их в верхнем регистре, а для идентификаторов использовался нижний регистр.

Поскольку АЛГОЛ 68-R был реализован на машине с 6- битными байтами (и, следовательно, с набором символов из 64 символов), это было довольно сложно, и, по крайней мере первоначально, программы приходилось составлять на бумажной перфоленте с использованием флексорайтера Friden .

Частично основанный на опыте работы с АЛГОЛом 68-R, в пересмотренном отчете по АЛГОЛу 68 указаны аппаратные представления языка, включая ограничение UPPER.

Расширения Алгола 68 [ править ]

В АЛГОЛ 68-R включены расширения для раздельной компиляции и низкоуровневого доступа к машине.

Раздельная компиляция [ править ]

Поскольку АЛГОЛ 68 является строго типизированным языком, простых библиотечных средств, используемых другими языками в системе ICL 1900, было недостаточно. АЛГОЛ 68-R поставлялся с собственным форматом библиотеки и утилитами, которые позволяли совместно использовать режимы, функции, переменные и операторы между отдельно скомпилированными сегментами кода, которые можно было хранить в альбомах . [14]

Сегмент, который будет доступен другим сегментам, будет заканчиваться списком объявлений, которые должны быть доступны:

Graphlib  CO  имя сегмента  CO 
 BEGIN 
    MODE   GRAPHDATA  =  STRUCT  (...); 
     ИДЕНТ   ГРАФ РЕЖИМА  =  .   ГРАФИКА  ; 
     Новый график PROC  = ( ... )  ГРАФИК  : ...; 
     График рисования PROC  = (  GRAPH  g)  VOID  : ...; 
     ... 
  КОНЕЦ 
 СОХРАНИТЬ   ГРАФИК  , новый график, нарисовать график 
  ЗАКАНЧИВАТЬ 

И тогда функции графа могут быть использованы другим сегментом:

myprog  С  графической библиотекой  ИЗ  графальбума 
  НАЧАТЬ 
     ГРАФИК  g = новый график (...); 
      ... 
      нарисовать график (г); 
      ... 
  КОНЕЧНАЯ 
 ОТДЕЛКА 

Низкоуровневый доступ к системе [ править ]

Будучи строго типизированным языком высокого уровня, АЛГОЛ 68 не позволяет программам напрямую обращаться к аппаратному обеспечению низкого уровня. Например, для адресной арифметики не существует операторов.

Поскольку АЛГОЛ 68-R не компилировался в стандартный полукомпилированный (готовый к компоновке) формат ICL, было необходимо расширить язык, чтобы обеспечить возможности АЛГОЛ 68-R для написания кода, который обычно пишется на языке ассемблера . Машинные инструкции могли быть записаны внутри разделов CODE ... EDOC операторы манипулирования адресами INC , DEC , DIF , AS . и были добавлены [15]

Пример использования операции Джорджа Пери для выдачи команды:

[1 : 120]  усиление CHAR  ; 
  INT  номер устройства; 
  STRUCT  (  режим типа BITS  , ответ,  количество INT  ,  REF   CHAR  адрес  )
        область управления := (8r47400014,0,120,buff[1]); 
  ...; 
  КОД  0,6/шт.номер;   157,6/типрежим  зоны  управления  EDOC 

Наличие [ править ]

Копия компилятора ALGOL 68-R, работающего под эмулятором операционной системы George 3 , созданного Дэвидом Холдсвортом ( Университет Лидса ), доступна вместе с исходным кодом под лицензией GNU General Public License (GPL). [16]

Ссылки [ править ]

  1. ^ Пек, JEL, изд. (1970), Материалы рабочей конференции ИФИП по реализации Алгола 68 , Мюнхен: Северная Голландия, ISBN.  0-7204-2045-8
  2. ^ Бонд, Сьюзен ; Аббате, Джанет (26 сентября 2001 г.). «Устная история: Сьюзен Бонд: Разработка первого в мире компилятора АЛГОЛА 68» . Wiki по истории техники и технологий (ETHW) . Институт инженеров по электротехнике и электронике (IEEE) . Проверено 22 апреля 2020 г. - через Объединенный инженерный фонд (UEF).
  3. ^ Реализация АЛГОЛа 68, стр. 21
  4. ^ Карри, ЕСЛИ; Бонд, Южная Каролина ; Морисон, доктор медицинских наук (1971), «АЛГОЛ 68-R, его реализация и использование», Proc Конгресса ИФИП 1971 г. (Обработка информации, 1971 г.) , Любляна, Югославия: Северная Голландия, стр. 360–363, ISBN  0-7204-2063-6
  5. ^ Аноним (январь 1977 г.). Система Алгол 68-Р – Установка и обслуживание (PDF) . Отдел исследований в области вычислительной техники и программного обеспечения — Королевский радарный институт . Проверено 9 апреля 2011 г. [ постоянная мертвая ссылка ]
  6. ^ Реализация АЛГОЛа 68, стр. 294
  7. ^ Реализация АЛГОЛа 68, страницы 21-26.
  8. ^ Реализация АЛГОЛА 68, стр. 276
  9. ^ Оливер-младший; Ньютон, Р.С. (1979). «Практический опыт работы с АЛГОЛом 68-RT» . Компьютерный журнал . 22 (2): 114–118. дои : 10.1093/comjnl/22.2.114 .
  10. ^ Линдси, Чарльз Х .; ван дер Мейлен, С.Г. (1997). «Приложение 4, подъязык». неофициальное введение в АЛГОЛ 68 (пересмотренный) . Северная Голландия. ISBN  0-7204-0726-5 .
  11. ^ Раймонд, Эрик С. (1996). "дурак". Новый хакерский словарь; 3-е издание . МТИ Пресс. п. 200. ИСБН  978-0-262-68092-9 . Компилятор Algol 68-R инициализировал свое хранилище символьной строкой «F00LF00LF00LF00L...», потому что как указатель или как число с плавающей запятой это вызывало сбой, а как целое число или символьная строка было очень узнаваемо в свалка.
  12. ^ Система Алгол 68-Р – Установка и обслуживание, стр. 25
  13. ^ Реализация АЛГОЛа 68, стр. 30
  14. ^ Вудворд, Премьер-министр ; Бонд, С.Г. (1974). «14 – Сегментация программы». Руководство пользователя АЛГОЛ 68-Р . Канцелярия Ее Величества (HMSO). стр. 87–89. ISBN  0-11-771600-6 .
  15. ^ Система Алгол 68-R – Установка и обслуживание, стр. 26-30.
  16. ^ Тоал, Грэм (сентябрь 2018 г.). «Джордж3: Эмуляция ICL 1900» . Сохранение программного обеспечения и эмуляция машин . Проверено 19 апреля 2020 г.

Внешние ссылки [ править ]

  • Алгол 68 - Общество истории радаров и технологий Малверна
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: E63CD447BDFFF9758709D7BC26B548F1__1685517000
URL1:https://en.wikipedia.org/wiki/ALGOL_68-R
Заголовок, (Title) документа по адресу, URL1:
ALGOL 68-R - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)