~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ B5191D3F6B8BAC0C43A0FBDC004D112C__1692063780 ✰
Заголовок документа оригинал.:
✰ S-algol - Wikipedia ✰
Заголовок документа перевод.:
✰ С-алгол — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/S-algol ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/b5/2c/b5191d3f6b8bac0c43a0fbdc004d112c.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/b5/2c/b5191d3f6b8bac0c43a0fbdc004d112c__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 13:32:13 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 15 August 2023, at 04:43 (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: далее начало оригинального документа

С-алгол — Википедия Jump to content

S-алгол

Из Википедии, бесплатной энциклопедии
S-алгол
Парадигмы Мультипарадигмальность : процедурная , императивная , структурированная.
Семья АЛГОЛ
Разработано Рон Моррисон , Тони Дэви
Разработчик Университет Сент-Эндрюс
Впервые появился 1979 год ; 45 лет назад ( 1979 )
Язык реализации S-алгол
Платформа PDP-11 /40, IBM System/360 , VAX , Zilog Z80 , Macintosh , Sun-3
ТЫ Юникс , БОС/360 , ВМС , КП/М
Под влиянием
АЛГОЛ 60
Под влиянием
PS-алгол , Napier88

S-алгол (Сент-Эндрюс Алгол) [1] : vii — это языка программирования производный от АЛГОЛ 60, разработанный в Университете Сент-Эндрюс в 1979 году Роном Моррисоном и Тони Дэви. Этот язык представляет собой модификацию АЛГОЛА и содержит ортогональные типы данных , которые Моррисон создал для своей докторской диссертации. Моррисон впоследствии стал профессором университета и заведующим кафедрой информатики . Язык S-algol использовался для преподавания в университете на уровне бакалавриата до 1999 года. Этот язык также преподавался в течение нескольких лет в 1980-х годах в местной школе в Сент-Эндрюсе, Мадрасском колледже . Текст по информатике «Рекурсивная компиляция спуска» [2] описывает рекурсивного спуска компилятор для S-алгола, реализованный в S-алголе.

ПС-алгол представляет собой стойкое производное S-алгола. Он был разработан примерно в 1981 году в Эдинбургском и Сент-Эндрюсском университетах. Он поддерживает возможности базы данных , обеспечивая долговечность данных в виде постоянной кучи , которая сохраняется после завершения программ PS-algol.

История и реализации [ править ]

Докторская диссертация Рона Моррисона 1979 года « О разработке Алгола » описывает разработку и реализацию языка S-алгол. [3] В техническом отчете, определяющем язык, «Справочное руководство по S-алголу» (1979, 1988), выражается благодарность нескольким людям за помощь, в том числе Дэвиду Тернеру за обсуждения дизайна языка примерно в 1975 году. [4] : 5  В учебнике по информатике 1981 года « Рекурсивная компиляция спуска» описывается реализация компилятора и процесс начальной загрузки. [2] а в книге 1982 года «Введение в программирование с помощью S-algol» этот язык используется для обучения компьютерному программированию. [1]

Первая реализация S-algol была на компьютере PDP-11 /40 под управлением операционной системы Unix . [1] : vii Из-за небольшого в 64 килобайта адресного пространства , доступного на PDP-11, была выбрана реализация интерпретируемого байт-кода . [3] : 37–38  Однопроходный написанный на S-algol , , компилятор рекурсивного спуска преобразовал исходный код S-algol в S-код, байт-код для абстрактной машины на основе стека, адаптированной для S-algol. Затем S-код был выполнен интерпретатором . Реализация S-algol имела много общего с работой над более ранними Pascal компиляторами . Техника использования компилятора рекурсивного спуска для создания кода для абстрактной машины была хорошо известна, а компилятор Pascal P. известным примером с начала 1970-х годов был [2] : 137  Компилятор S-algol был написан с использованием уточнения. поэтапного процесса [2] : 71  описан Урсом Амманом для разработки компилятора Паскаля [5] и поддержан изобретателем Паскаля Никлаусом Виртом . [6]

Отражая организацию памяти PDP-11 в виде 32 КБ 16-битных слов , кодировка инструкций S-кода была разработана таким образом, чтобы каждый байт-код состоял из одного слова. [3] : 38  Первоначальная загрузка выполнялась путем написания компилятора S-algol на Algol W на IBM/360 , который создавал S-код, и использования его для компиляции компилятора, написанного на S-algol, в S-код. Полученный файл S-кода был скопирован на PDP-11 и выполнен на интерпретаторе S-кода, написанном для PDP-11, что сделало его самостоятельным хостингом . Автономный компилятор S-algol выполнил около 7,7 миллионов инструкций S-кода для своей компиляции, создав выходной файл, содержащий около десяти тысяч инструкций S-кода (16-битных слов). [3] : 45 

Интерпретатор S-кода был написан для компьютера VAX под управлением VMS , что сделало VAX первым портом S-algol . S-algol также был портирован на микропроцессор Zilog Z80 под управлением CP/M , включая средства растровой графики , которые были добавлены в язык. В 1983 году S-алгол был использован в качестве основы для системы PS-алгол, используемой для исследований стойкости . Интерпретатор S-кода PS-algol был реализован на языке C , а язык S-кода был расширен за счет включения растровой графики. Реализация PS-algol послужила основой для портирования S-algol на рабочие станции Macintosh и Sun с компилятором, переписанным на C и ориентированным на расширенный S-код. [4] : 5 

S-алгол стал основой для исследования PS-алгола в 1983 году, а несколько лет спустя PS-алгол стал отправной точкой для языка Napier88 и его реализации. В то время как все компиляторы S-algol создавали S-код для интерпретации, более поздняя реализация Napier88 экспериментировала с генерацией кода на C и компиляцией его с помощью компилятора gcc, чтобы обеспечить реализацию собственного кода . [7]

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

Программа на S-algol представляет собой последовательность объявлений и предложений. Объявленные элементы языка включают константы, переменные, процедуры и структуры. В объявлениях констант и переменных должно быть указано начальное значение. Компилятор выводит тип данных объявленной константы или переменной из типа начального значения, поэтому тип не указывается явно. Типы данных включают целочисленные, вещественные, логические, строковые, указатель (на структуру) и файл, а также векторы (массивы) этих типов. В объявлениях процедур указываются типы данных их аргументов и возвращаемое значение (кроме случаев void). Структуры также определяют типы данных своих полей. Предложения включают в себя выражения и управляющие структуры (if, case, for, while и повторение while). Структуры управления if и case могут иметь значения и могут свободно использоваться в выражениях, если соблюдаются правила совместимости типов. [4] [1]

!  Комментарии начинаются с восклицательного знака и продолжаются до конца строки.

 !  Ключевое слово let вводит объявления констант и переменных.
 !  Идентификаторы начинаются с буквенного символа, за которым следуют буквенно-цифровые символы или точка (.).
 !  Должно быть задано начальное значение, которое определяет тип данных объявления.

 пусть ширина := 10 !  := устанавливает значение переменной, это целое число
 пусть животное := "собака" !  введите строку

 пусть х := -7;  пусть y := x + x !  ;  разделяет предложения, необходим только в том случае, если в строке два или более предложений.

 пусть na = 6.022e+23 !  = используется для установки значения константы, это cfloat (константа с плавающей запятой)

 !  if и case могут иметь значения и использоваться в выражениях
 let no.of.lives := если животное = "кот", то 9, иначе 1

 !  Решето Эратосфена
 напишите "Найти простые числа до n =?"
 пусть n = читай!  постоянные значения могут быть установлены во время работы программы
 пусть p = вектор 2::n true !  вектор bool с границами от 2 до n
 для i = 2 to truncate(sqrt(n)) do !  поскольку индексы являются константами, поэтому они используют =, а не :=
     если p(i) сделает !  векторное разыменование использует круглые скобки, как вызов процедуры
         для j = 2 * i до n, я делаю
             p(j) := ложь
 для i = 2 до n сделать
     если p(i) действительно напишите i, «n» !  'n в буквальной строке - это новая строка

 !  тип структуры (записи) для двоичного дерева cstrings
 !  тип данных pntr может указывать на структуру любого типа, проверка типа выполняется во время выполнения
 структураtree.node(имя cstring; pntr влево, вправо)

 !  вставляет новую строку в голову двоичного дерева
 процедура Insert.tree(cpntr head; cstring new -> pntr)
 !  предложение case заканчивается обязательным параметром по умолчанию, используйте default : {}, если он не нужен
 случай верен для
     head = ноль: Tree.node(новый, ноль, ноль)
     new < head(name): { head(left) := Insert.tree(head(left), new) ;  голова }
     новый > head(имя): { head(right) := Insert.tree(head(right), new) ;  голова }
     по умолчанию: голова

 процедура print.tree(голова cpntr)
 если голова ~= ноль, сделай!  ~= — оператор равенства
 начинать
     print.tree(голова(слева))
     напишите head(имя), "n"
     print.tree(голова(справа))
 конец

 пусть фрукты := ноль
 Fruit := Insert.tree(фрукты, "банан")
 Fruit := Insert.tree(фрукты, "киви")
 Fruit := Insert.tree(фрукты, "яблоко")
 Fruit := Insert.tree(фрукты, "персик")
 print.tree(фрукты) !  печатать в отсортированном порядке

 !  Окончание программы S-algol обозначается ?
 ?
 

Семантические принципы [ править ]

Как следует из названия, S-algol является членом семейства ALGOL языков программирования . Моррисон выделяет пять черт семейства АЛГОЛ: [3] : 5 

  1. Правила области и структура блоков . Имена могут быть введены для определения локальных величин, которые не определены вне локальной среды , но разные среды могут однозначно использовать одно и то же имя для представления разных объектов. [3] : 5 
  2. Средство абстракции — предоставление мощного средства абстракции для сокращения и уточнения программ. В семействе АЛГОЛ это обеспечивается процедурами с параметрами . [3] : 5 
  3. Проверка типов во время компиляции . Типы можно проверить путем статического анализа программы. [3] : 5 
  4. Бесконечное хранилище . Программист не несет ответственности за распределение памяти и может создавать столько объектов данных, сколько необходимо. [3] : 5 
  5. Выборочное обновление магазина . Программа может выборочно изменять магазин. В семействе АЛГОЛ это осуществляется с помощью оператора присваивания . [3] : 6 

S-algol был разработан, чтобы отличаться от предыдущих членов семейства ALGOL, поскольку он был разработан в соответствии с семантическими принципами, обеспечивающими мощность за счет простоты и простоту за счет большей общности. (См. «Ортогонал» .) Моррисон описывает три семантических принципа, которыми руководствовалась конструкция S-алгола:

  1. Принцип соответствия . Правила, регулирующие имена, должны быть единообразными и применяться повсеместно. В основном это касается соответствия объявлений параметрам процедуры, включая рассмотрение всех режимов передачи параметров. Этот принцип был исследован Р.Д. Теннентом совместно с Паскалем. [8] и уходит корнями в работу Питера Ландина. [9] и Кристофер Стрейчи . [3] : 9–10  [10]
  2. Принцип абстракции . Должна быть возможность абстрагировать все значимые семантические категории в языке. Примеры включают функцию, которая является абстракцией над выражениями , и процедуру, которая является абстракцией над операторами . Теннент и Моррисон отмечают, что применить этот принцип сложно, поскольку трудно определить семантически значимые конструкции, которые следует абстрагировать. [3] : 10 
  3. Принцип полноты типов данных . Все типы данных должны иметь одинаковые права в языке и должны быть разрешены в общих операциях, таких как присвоение или передача в качестве параметра. [3] : 10  (См. первоклассный гражданин .)

Моррисон также выделяет еще одно основное соображение при проектировании:

  1. Концептуальное хранилище . Ключевые проектные решения, касающиеся хранилища ( управления памятью ), включают в себя то, как используется хранилище, его связь с типами данных, реализацию указателей и защиту ( постоянные местоположения, которые не могут быть обновлены). [3] : 10–11 

Дизайн [ править ]

Диссертация Моррисона объясняет, как принципы проектирования были применены в S-алголе.

Типы данных [ править ]

Базовыми или примитивными типами данных в S-алголе являются целочисленные, действительные, логические, файловые и строковые. (Позднее были добавлены типы пикселей и изображений для поддержки растровой графики .) Целое , вещественное и логическое значения — это типы, общие для большинства языков программирования. Тип файла представляет собой ввода-вывода (I/O) поток , который позволяет записывать или читать объекты данных. Строковый тип во многих языках того времени считался составным типом , но включение его в качестве собственного типа упрощает использование основных операций конкатенации, выбора подстроки, определения длины и сравнения (равно, меньше и т. д.). Это гораздо приятнее, чем массивы символов, используемые в Паскале. [3] : 12 

Векторы снабжены компонентами любого типа. Для любого типа данных T, *T — это тип вектора с компонентами типа T. Границы вектора не являются частью его типа, а определяются динамически, а многомерные массивы реализуются как векторы векторов . [3] : 12 

содержит Тип данных структуры любое фиксированное количество полей, каждое из которых имеет фиксированный тип. Класс структуры не является частью типа, но может определяться динамически. [3] : 12 

Замыкание базовых типов векторов и структур обеспечивает бесконечное количество типов данных. Определение языка позволяет использовать любой тип везде, где он приемлем. Это не относится к инфиксным операторам , поскольку они являются синтаксическим сахаром для общих функций и не являются частью семантической модели. [3] : 12–13 

Магазин [ править ]

Векторы и структуры имеют полные права и могут назначаться при передаче в качестве параметров, но копирование при назначении и при передаче может быть неэффективно для больших объектов. Векторы и структуры рассматриваются как указатели на объекты, а указатели назначаются и передаются как параметры. Указатели как общие объекты, как в АЛГОЛе 68 и C, отвергаются для S-алгола из-за опасений CAR Hoare по поводу нулевого указателя. [11] и проблемы с висящими указателями . [3] : 13 

S-algol предоставляет истинные константные значения , объекты, значение которых не может быть обновлено. Эта идея принадлежит Стрейчи, но константы во многих языках, таких как Паскаль, являются константами манифеста, обрабатываемыми во время компиляции и не реализуемыми как защищенные места. Также должна быть возможность объявить константу любого типа данных, а не только скалярных типов. [3] : 13 

Структуры управления [ править ]

S-algol — это язык, ориентированный на выражения, а операторы — это выражения типа void . Как следствие, некоторые управляющие структуры представляют собой выражения, возвращающие значения .

Существует несколько условных конструкций . Двуальтернативная версия условного оператора: if <condition> then <clause> else <clause>, где предложения могут быть утверждениями или выражениями. Если это выражения, они должны иметь один и тот же тип. Однорукий условный if <condition> do <statement> имеет тип void. [3] : 13  Использование do вместо else в условном операторе позволяет избежать висящей синтаксической двусмысленности else . [2] : 20 

The caseВ предложении есть селектор любого типа, который сопоставляется с помощью проверки равенства с выражениями того же типа, чтобы найти выбранное предложение. Предложение case может быть оператором или выражением, поэтому все предложения результата должны быть операторами (типа void) или выражениями одного и того же типа. Матчи проверяются по порядку, поэтому это напоминает защищенные команды Эдсгера Дейкстры без недетерминизма . [3] : 14 

Операторы цикла в основном обычные. for цикл аналогичен циклу Хоара. [12] Идентификатор элемента управления является постоянным и не может быть изменен внутри цикла. Также традиционными являются while <condition> do <statement> и repeat <statement> while <condition>петли. repeat <statement> while <condition> do <statement> конструкция обеспечивает ранний выход или «полтора» [13] петля. [3] : 14 

Абстракции [ править ]

S-алгол абстрагирует выражения как функции, а операторы (пустые выражения) — как процедуры. Модули могли бы обеспечить абстракцию объявлений, но S-algol не включает модули из-за трудностей, которые они создают при использовании блочной структуры. Последняя синтаксическая категория — секвенсор или управляющая структура. Теннент использовал термин «продолжение» для абстракции секвенсоров. Это были обобщения goto и Break . Самая известная абстракция в этой категории — call-with-current-continuation , но она станет понятна лишь несколько лет спустя. S-algol не поддерживает переходы и разрывы, а также абстракцию над секвенсорами. [3] : 14 

Объявления и параметры [ править ]

Каждому объекту данных в S-алголе должно быть присвоено значение при его объявлении. Это соответствует вызову по передаче параметра по значению и исключает возможность использования неинициализированного значения. Фактически вызов по значению — единственный метод передачи параметров в S-алголе. Ссылочные и результирующие параметры отклоняются, что согласуется с запретом S-алгола на передачу l-значений . Структуры и векторы передаются как указатели на объекты, но это по-прежнему является вызовом по значению, поскольку поведение такое же, как и значение, используемое в правой части присваиваний. [3] : 15 

Каждое объявление имеет параметрический эквивалент. Необходимо указать все типы параметров процедуры. Для любой процедуры, передаваемой в качестве параметра, указан полный тип (в отличие от Паскаля), и то же самое справедливо и для структурного класса. [3] : 15 

Модель ввода-вывода [ править ]

S-алгол обеспечивает file тип данных для потоков ввода-вывода и несколько вариантов read и writeопределены для работы с базовыми типами. Ожидается, что отдельные реализации будут расширять эти простые возможности по мере необходимости. [3] : 15 

Конкретный синтаксис [ править ]

Языки АЛГОЛ критиковали за многословие. S-algol пытается улучшить эту ситуацию, предоставляя менее строгий синтаксис. [1] : 159  Это демонстрируется в основном в синтаксисе объявлений. Поскольку объявления переменных всегда должны включать начальное значение, тип не нужно указывать явно. [3] : 17 

Хотя можно было бы определить параметры процедуры и типы возвращаемых значений, проверив, где вызывается процедура, S-algol требует указания типов параметров и возвращаемых значений. Это практическое решение, поскольку должно быть возможно понять процедуру, не изучая ее вызовы. [3] : 17 

Большинство АЛГОЛов требуют, чтобы все объявления предшествовали инструкциям в блоке. В S-алголе объявления могут быть смешаны с операторами, поскольку все должно быть объявлено до того, как оно будет использовано, и не существует перехода, который позволил бы пропустить объявление. [3] : 17 

См. также [ править ]

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

  1. ^ Перейти обратно: а б с д Это Коул, Эй Джей; Моррисон, Р. (1982), Введение в программирование с использованием S-алгола , Cambridge University Press, ISBN  978-0-521-25001-6
  2. ^ Перейти обратно: а б с д Это Дэви, Энтони Дж.Т.; Рональд Моррисон (1981), Брайан Мик (редактор), Компиляция рекурсивного спуска , серия Эллиса Хорвуда о компьютерах и их приложениях, Чичестер, Западный Суссекс: Эллис Хорвуд, ISBN  978-0-470-27270-1
  3. ^ Перейти обратно: а б с д Это ж г час я дж к л м н О п д р с т в v В Икс и С аа аб и объявление Моррисон, Р. (1979). О разработке Алгола (доктор философии). Университет Сент-Эндрюс . стр. 1–70.
  4. ^ Перейти обратно: а б с Моррисон, Рон (1988) [1979], Справочное руководство по языку S-algol (PDF) (технический отчет CS/79/1), Файф: Университет Сент-Эндрюса, стр. 1–53, заархивировано из оригинала (PDF) 12 мая 2014 г.
  5. ^ Амман, Урс (1972), «Разработка компилятора», Proc. Межд. Симпозиум по вычислительной технике , Северная Голландия, стр. 93–99.
  6. ^ Вирт, Никлаус (апрель 1971 г.), «Разработка программы путем поэтапного усовершенствования», Communications of ACM , 14 (4): 221–227, doi : 10.1145/362575.362577 , hdl : 20.500.11850/80846 , S2CID   13214445
  7. ^ Бушелл, С.Дж.; Дирл, А; Браун, Алабама; Воган, Ф.А. (1994), «Использование C в качестве целевого языка компилятора для генерации собственного кода в постоянных системах» (pdf) , в Аткинсоне, член парламента; Майер, Д; Бензакен, В. (ред.), Proc. 6-й международный семинар по системам постоянных объектов (POS6), Тараскон, Франция , Семинары по вычислительной технике, Springer-Verlag, стр. 164–183.
  8. ^ Теннент, Р.Д. (1977), «Методы языкового проектирования, основанные на семантических принципах», Acta Informatica , 8 (2): 97–112, doi : 10.1007/bf00289243 , S2CID   31491993
  9. ^ Ландин, П.Дж. (март 1966 г.), «Следующие 700 языков программирования», Communications of ACM , 9 (3): 157–164, doi : 10.1145/365230.365257 , S2CID   13409665
  10. ^ Стрейчи, К. (1966), «На пути к формальной семантике», Языки формального описания языков , Северная Голландия, стр. 198–220.
  11. ^ Хоар, CAR (1975), «Рекурсивные структуры данных» , International Journal of Computer and System Sciences , 4 (2): 105–132, doi : 10.1007/bf00976239 , S2CID   24022888 , заархивировано из оригинала 26 сентября 2017 г.
  12. ^ Хоар, CAR (1972), «Примечание к заявлению for», BIT , 12 (3): 334–341, doi : 10.1007/bf01932305 , S2CID   61902610
  13. ^ Эдсгер Дейкстра (1973). Личное общение с Дональдом Кнутом , цитируемое в Кнут, Д. (1974), «Структурное программирование с переходом к операторам» (PDF) , Computing Surveys , 6 (4): 261–301, CiteSeerX   10.1.1.103.6084 , doi : 10.1145/356635.356640 , S2CID   207630080 , заархивировано из оригинал (PDF) от 23 октября 2013 г.

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

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