Paradigm | императивный (процедурный ) |
---|---|
Разработано | Пол Тенцар и Ричард Бломм |
Разработчик | Пол Тенцар и Университет Иллинойса в Урбана-Шампейн |
Впервые появился | 1969 (1969) |
Печатная дисциплина | нет |
Основные реализации | |
TUTOR, Micro-TUTOR | |
Под влиянием | |
, (Regency Systems ) |
TUTOR, также известный как PLATO Author Language, это язык программирования, разработанный для использования в системе PLATO в Университете штата Иллинойс в Урбана-Шампейн примерно с 1965 года. TUTOR был первоначально разработан для использования в компьютерных инструкциях (CAI) и компьютерных инструкциях (CMI) (в компьютерных программах, называемых "уроками") и имеет много функций для этой цели. Например, TUTOR имеет мощные команды синтаксического анализа и оценки ответов, графика и функции, упрощающие работу с записями учащихся s и статистика инструкторов. Гибкость TUTOR в сочетании с вычислительной мощностью PLATO (работающая на том, что в 1972 году считалось суперкомпьютером), также сделала его подходящим для создания игр, включая авиасимуляторы, военные игры, многопользовательские ролевые игры в стиле подземелий, карточные игры, словесные игры. игры и медицинские обучающие игры, такие как Bugs and Drugs (BND). TUTOR продолжает жить сегодня как язык программирования для системы Cyber1 PLATO, которая запускает большую часть исходного кода из PLATO 1980-х годов и имеет примерно 5000 пользователей по состоянию на июнь 2020 года.
TUTOR изначально разрабатывался как специальный язык разработки для разработки учебных уроков, и его эволюция в язык программирования общего назначения е было незапланированным. Имя TUTOR впервые было применено к авторскому языку системы PLATO в более поздние дни Платона III. Первой документацией по языку под этим названием, по-видимому, была «Учебник для преподавателей», отчет CERL X-4, составленный Р.А. Авнером и П. Тенцаром, январь 1969 г.
Статья «Обучение переводу русского языка» by Computer дает снимок TUTOR незадолго до того, как PLATO IV заработал. Присутствовали основные элементы языка, но команды были даны в верхнем регистре, и вместо использования общего механизма поддержка альтернативных наборов символов осуществлялась через специальные имена команд, такие как WRUSS
для «записи с использованием русских символов. задавать."
В 1970-е годы разработчики TUTOR воспользовались тем фактом, что весь корпус программ TUTOR хранился в режиме онлайн в одной и той же компьютерной системе. Всякий раз, когда они чувствовали необходимость изменить язык, они запускали программное обеспечение для преобразования корпуса кода TUTOR, чтобы пересмотреть весь существующий код, чтобы он соответствовал внесенным ими изменениям. В результате после разработки новых версий TUTOR поддержание совместимости с версией PLATO могло быть очень затруднительным.
Control Data Corporation (CDC) к 1981 году в значительной степени исключила имя TUTOR из своей документации PLATO. Они назвали этот язык Авторским языком PLATO. Однако фраза TUTOR file или даже TUTOR Lesson file сохранилась как имя типа файла, используемого для хранения текста, написанного на языке PLATO Author.
A Урок TUTOR состоит из последовательности блоков, где каждый блок начинается с представления информации, и переход от одного блока к другому зависит от правильного ответа на один или несколько вопросов. Как и в случае с абзацами COBOL, элемент управления может войти в блок TUTOR из предыдущего блока и выйти в следующий, но блоки также могут быть вызваны как подпрограммы с использованием do
или join
команды.
Вот пример единицы измерения со страницы 5 памятки пользователя TUTOR, март 1973 г. (Лаборатория компьютерных образовательных исследований, Университет Иллинойса в Урбане-Шампейне):
unit math на 205 напишите Ответьте на эти задачи 3 + 3 = 4 × 3 = стрелка 413 ответ 6 стрелка 613 ответ 12
Несколько вещей должны быть сразу очевидны из этого примера.
write
выше, тег может состоят из нескольких строк. Строки продолжения либо пустые, либо имеют начальную табуляцию.Что может не быть очевидна структура управления, заложенная в этом устройстве. Команда стрелка
отмечает вход в судейский блок. Эта структура управления является одной из уникальных особенностей TUTOR.
TUTOR содержал ряд уникальных функций. Следующий список не предназначен для замены учебного пособия для РУКОВОДИТЕЛЯ, а просто выделяет наиболее интересные, новаторские и иногда сбивающие с толку особенности языка.
Блок оценки в TUTOR - это управляющая структура, которая начинается с команды arrow
и заканчивается следующей arrow
, endarrow
или unit
команда. Команда стрелка
также запрашивает ввод со специальным символом стрелки (похожим на «▷»), отображаемым в качестве подсказки в указанных координатах экрана. Фактически, оценочный блок можно рассматривать как структуру управления обратным прослеживанием, где ученик может делать несколько попыток ответить на вопрос, пока правильный ответ не позволит продвинуться вперед.
Каждый блок оценки состоит из последовательности команд сопоставления шаблонов, каждая из которых вводит (возможно, пустой) блок команд, который должен быть выполнен, если это соответствие шаблону. Двумя наиболее распространенными командами сопоставления шаблонов были ответ
и неверный
. У них была идентичная семантика сопоставления с образцом, за исключением того, что answer
оценивал ответ учащегося как правильный, если он совпадал, а неверно
оценивал ответ учащегося как неправильный.
Поля тегов в командах answer
и неправильный
состояли из списков необязательных, обязательных и альтернативных слов. рассмотрим этот пример из упражнения 4-1 в памятке пользователя TUTOR 1973:
answer(right, rt) (треугольник, треугольник)
Это соответствует ответам, например, «это прямоугольный треугольник» или « это треугольная фигура »или просто« пт треугольник ». Он не будет соответствовать «вроде треугольника», потому что слова «вроде» не указаны как игнорируемые, и он не будет соответствовать «треугольнику, верно?» потому что заказ неправильный.
Подсистема сопоставления с образцом распознала орфографические ошибки, поэтому слова «треугольник» или «треугольник» будут соответствовать образцу в примере. Автор урока мог использовать команду specs
, чтобы указать, насколько педантичной была система в отношении орфографических ошибок.
Алгоритмы сопоставления с образцом, используемые различными реализациями TUTOR, различались в деталях, но обычно каждое слово во входном тексте и каждое слово в шаблоне преобразовывались в битовые векторы. Чтобы увидеть, совпадает ли введенное студентом слово со словом в шаблоне, расстояние Хэмминга между двумя битовыми векторами использовалось как мера степени различия между словами. Битовые векторы обычно имели длину 60 или 64 бита с полями для указания наличия букв, присутствия пары букв и первой буквы. В результате количество единичных битов в исключающем или из двух таких битовых векторов приблизительно соответствует степени фонетической разницы между соответствующими словами.
Все ранние представления контрольной структуры блока судейства TUTOR сбивали с толку. Однако в современных терминах оценочный блок можно описать как итеративную управляющую структуру, которая завершается, когда вводимые студентом данные признаны правильными. Тело этой управляющей структуры состоит из серии вариантов, каждый из которых вводится командой сопоставления с образцом, такой как ответ
или неверный
. Весь вывод, произведенный основной частью цикла оценки в предыдущем цикле, стирается с экрана перед переходом в следующий цикл.
Рассмотрим пример из упражнения 4-1 памятки пользователя TUTOR 1973:
неправильныйквадрат на 1501 записи У квадрата четыре стороны.
В случае, если учащийся вводит «квадрат» или «квадрат», ответ считается неправильным, а текст «У квадрата четыре стороны». выводится, начиная со строки 15 столбца 1 на экране. Этот вывод остается на экране до тех пор, пока ученик не начинает вводить новый ответ, после чего он стирается, чтобы можно было вычислить ответ на новый ответ. Механизм, с помощью которого экран дисплея возвращается в свое предыдущее состояние, варьируется от реализации к реализации. Ранние реализации работали путем переключения терминала в режим стирания и повторного выполнения всего совпавшего случая. Некоторые более поздние реализации буферизовали вывод, созданный во время оценки, чтобы этот вывод можно было стереть.
Команда join
была уникальной формой вызова подпрограммы. Это было определено как эквивалентное текстовой подстановке тела объединенного модуля вместо самой команды соединения (стр. 21, Заметка пользователя TUTOR 1973 г.). Таким образом, объединенный блок может содержать часть судейского блока. Таким образом, хотя блок оценки концептуально представляет собой итератор, охватывающий серию вариантов, этот блок может быть произвольно разбит на подпрограммы. (Альтернативный вызов подпрограммы, команда do
, соответствовала обычной семантике, связанной с вызовами подпрограмм в других языках программирования.)
PLATO IV Студенческий терминал имел плазменную панель с разрешением 512 на 512 пикселей пикселей с аппаратной поддержкой точечной печати, рисования линий и отображения текста. Каждый пиксель на терминале PLATO IV был оранжевым или черным. Терминал CDC PLATO V использовал монохромный черно-белый CRT для имитации плазменной панели. Встроенный набор символов имел 4 набора из 63 символов, каждый размером 8 на 16 пикселей, половина из них была фиксированной, а половина - программируемой. Язык Tutor обеспечивает полную поддержку этого терминала.
Было две системы координат (см. Стр. II-1 книги TUTOR Language Брюса Шервуда):
В следующем примере показаны некоторые команды рисования наставника.
рисовать 1812; 1852; пропускать; 1844; круг 1544 16,344,288 рисовать 1837; 1537; 1535; 1633; 1833
Обратите внимание на использование точек с запятой для разделите последовательные координаты в команде draw
. Это позволяет однозначно использовать точные координаты, разделенные запятыми. Обычно команда рисования соединяет последовательные точки с отрезками линии, но, поместив в тег skip
, можно заставить команду draw
концептуально приподнять перо.
Теги в команде circle
задают радиус и точные координаты центра. Дополнительные теги могут указывать начальный и конечный углы для частичных окружностей.
Составлять команды рисования вручную сложно, поэтому к 1974 году в систему PLATO был включен редактор изображений, чтобы автоматизировать эту работу. Это могло иметь дело только с командами рисования с постоянными координатами.
В следующем примере показаны некоторые инструменты визуализации текста Tutor.
размер заголовка блока 9,5 $$ текст в 9,5 раз больше обычного размера повернуть 45 $$ текст повернут на 45 градусов при 2519 записать латинский размер 0 $$ вернуться к обычному письму повернуть 0 при 3125 записать Уроки по глаголам
Текст, отображаемый с нулевым размером, вращением с нулевым поворотом, использовал встроенное аппаратное обеспечение визуализации символов терминала PLATO, при визуализации с ненулевым размером и поворотом выполнялся с линейными сегментами и, следовательно, значительно медленнее из-за скорости линии связи с терминалом.
Помимо уникальных механизмов оценки ответов, исходный набор управляющих структур TUTOR был довольно скудным. В середине 1970-х этот недостаток был устранен путем введения блоков if
, endif
с необязательными разделами elseif
и else
. Семантика этих управляющих структур была рутинной, но синтаксис унаследовал обязательный отступ языка Tutor Language, предваряя отступ Python и добавляя уникальный непустой символ отступа, чтобы отличать отступ от строк продолжения..
Это проиллюстрировано в следующем примере со страницы S5 Сводки команд и системных переменных TUTOR (10-е изд) Элейн Авнер, 1981:
if n8 <4. write first branch. calc n9⇐34 elseif n8=4. write second branch. do someunit else. write default branch. if n8>6.. напишите специальную ветку. endif endif
(Стрелка присваивания в инструкции calc
отображается неправильно в некоторых браузерах. Похоже, что это похоже на <= but as one character. It had a dedicated key on the PLATO IV keyboard.)
Такой же синтаксис использовался для цикла ,
endloop
блоки с семантикой, сравнимой с циклами while в традиционных языках программирования. Это проиллюстрировано в следующем примере со страницы S6 Сводки команд и системных переменных TUTOR ( 10-е изд) Элейн Авнер, 1981:
loop n8 <10. write within loop. sub1 n8 reloop n8≥5. write still within loop. do someunit outloop n8<3. write still within loop endloop write outside of loop
Обратите внимание, что команды reloop
и outloop
в некоторой степени аналогичны командам continue
и break
операторов языков, основанных на C, за исключением того, что они должны находиться на уровне отступа цикла, который они изменяют, и у них есть тег условия, который указывает, когда должна выполняться указанная передача управления. place. Это делает конструкцию более мощной, чем в других языках, потому что любая строка внутреннего цикла может завершить или повторно выполнить несколько внешних циклов одним оператором.
Синтаксис выражения TUTOR не обращался к синтаксису FORTRAN и не ограничивался плохо разработанными наборами символов той эпохи. Например, набор символов PLATO IV включал управляющих символов для нижнего индекса и верхнего индекса, и TUTOR использовал их для возведения в степень. Рассмотрим эту команду (со страницы IV-1 The TUTOR Language, Sherwood, 1974):
circle (41 + 72.6), 100,200
Набор символов также включал обычные символы для умножения и деление, ×
и ÷
, но в более радикальном отходе от соглашений, установленных FORTRAN, он допускал неявное умножение, поэтому выражения (4 + 7) (3+ 6)
и 3,4 + 5 (2-3) / 2
были действительными, со значениями 99 и 15,9, соответственно (цитата выше). Эта функция считалась важной. Когда студенты вводили числовой ответ на вопрос, они могли использовать операторы, переменные и стандартную алгебраическую нотацию, а программа использовала команду TUTOR «вычислить» для компиляции и запуска формулы и проверки ее числового эквивалента (или в пределах ошибка округления с плавающей запятой) к правильному ответу.
Язык включал предопределенную константу, названную греческой буквой пи (π), с соответствующим значением, которое можно было использовать в вычислениях. Таким образом, выражение πr
можно использовать для вычисления площади круга с использованием встроенной константы π, неявного умножения и возведения в степень, обозначенных верхним индексом.
В TUTOR сравнение с плавающей запятой x = y
было определено как истинное, если x
и y
были приблизительно равны (см. Стр. C5 меморандума пользователя PLATO, номер один Авнера, 1975 г.). Это упростило жизнь математически наивным разработчикам учебных уроков, но иногда вызывало головную боль у разработчиков сложного числового кода, потому что было возможно, что и x
x≥y
могут быть истинными одновременно.
Как язык разработки, TUTOR начинался с минимальных ресурсов памяти и только самых грубых инструментов для управления ими. Каждый пользовательский процесс имел частный сегмент данных из 150 переменных, и могли быть присоединены общие общие блоки, что позволяло межпользовательское взаимодействие через общую память.
В системе PLATO IV слова были 60-битными, в соответствии с семейством компьютеров CDC 6600. В некоторых более поздних реализациях это значение было изменено на 64 бита.
Область частной памяти каждого процесса состояла из 150 слов каждая, называемых переменными ученика; значения этих переменных были постоянными, отслеживая индивидуального пользователя от сеанса к сеансу. К ним обращались как от n1
до n150
при использовании для хранения целочисленных значений или как от v1
до v150
при использовании для хранения значений с плавающей запятой..
Урок НАУЧНИКА может присоединить одну область общей памяти объемом до 1500 слов с помощью команды common
. У каждого урока может быть безымянный временный общий блок, содержащий переменные, общие для всех пользователей этого урока. Такие блоки создавались, когда урок использовался, и освобождались, когда урок становился неактивным. Напротив, именованные общие блоки были связаны с блоком урока (файлом на диске). Общая память была адресована как от nc1
до nc1500
(для целых чисел) или от vc1
до vc1500
(для чисел с плавающей запятой).
Если 150 переменных ученика было недостаточно, на уроке можно было использовать команду storage
для создания дополнительного сегмента частной памяти размером до 1000 слов. Этот сегмент существовал только в пространстве подкачки, но его можно было сопоставить с переменными студента или общими переменными. Например (со страницы X-11 The TUTOR Language, Sherwood, 1974):
common 1000 storage 75 stoload vc1001,1,75
В этом примере от nc1
до nc1000
как общий безымянный общий блок, а от nc1001
до nc1075
- частное хранилище.
Команда Tutor define
была очень похожа на директиву C #define
препроцессора. Это был единственный способ связать мнемонические имена с переменными. Программист должен был статически выделять память и присваивать имена переменным. Рассмотрим этот пример со страницы 17 памятки пользователя TUTOR - Введение в TUTOR, 1973 "
define mynames first = v1, second = v2 result = v3
Это создает набор определений с именем mynames
определение трех переменных с плавающей запятой. Пользователям сообщили, что «не должно быть никаких v3 или v26 где-либо на вашем уроке, кроме самого оператора define
. Поместите все свои определения в самое начало урока, где у вас будет готовая ссылка на то, какие переменные вы используете ». (Подчеркивание из оригинала, страница IV-5 The TUTOR Language, Sherwood, 1974.)
Функции могут быть определены с семантикой макроподстановки, как на этой иллюстрации со страницы IX-2 языка TUTOR, Шервуд, 1974:
define cotan (a) = cos (a) / sin (a)
В отличие от C, исходные правила области TUTOR были чистым «определение перед использованием» без положений для локальных определений. Таким образом, формальный параметр a
, использованный выше, не должен иметь никакого предыдущего определения.
Позже, при разработке TUTOR, с введением множества именованных наборов определений, программист получил явный контроль над тем, какие наборы определений действовали в настоящее время. Например, define purge, setname
отбрасывает все определения в названном наборе.
Исходные инструменты TUTOR для манипуляции с текстом основывались на командах для определенных текстовых операций, например, pack
для помещения упакованной строки символов в последовательные переменные в памяти, search
для поиска одной строки внутри другой и move
, чтобы переместить строку из памяти в память. К 1975 году были добавлены более общие инструменты для массивов целых чисел и упакованных массивов. Страница 14 памятки пользователя PLATO - Сводка команд и системных переменных TUTOR, Avner, 1975, дает следующее:
определить сегмент, имя = начальная переменная, число бит на байт, массив s, имя (размер) = начальная переменная array, name (num rows, num columns) = start var
Сегментированные массивы, определенные ключевым словом segment
, были сопоставимы с упакованными массивами в Pascal. Размер байта и то, должны ли элементы массива рассматриваться как подписанные или неподписанные, полностью находились под контролем пользователя. Произвольные манипуляции с текстом могут быть выполнены путем установки размера байта на размер машинного байта, 6 бит в реализациях, использующих код отображения, 8 бит в некоторых более поздних ASCII и расширенных ASCII реализации. Обратите внимание на отсутствие какой-либо спецификации размерности массивов для сегментированных массивов.
Общий механизм передачи параметров был добавлен в TUTOR в начале эпохи PLATO IV. На странице IV-10 The TUTOR Language, автор Sherwood, 1974, приводится следующий пример:
define radius = v1, x = v2, y = v3 unit change do halfcirc (100,150300) do halfcirc (50) * unit halfcirc (radius, x, y) радиус круга, x, y, 0,180 нарисовать x-radius, y; x + radius, y
Обратите внимание, что формальные параметры , перечисленные в списке аргументов для unit
- это просто определенные имена для статически распределенных глобальных переменных. Семантика передачи параметров была дана как эквивалентная назначению во время передачи управления целевому устройству, и если фактические параметры были опущены, как во второй команде do
выше, эффект заключался в том, чтобы оставить прежние значения соответствующих формальных параметров неизменными.
Локальные переменные были добавлены в TUTOR примерно в 1980 году. Авторы уроков, желавшие использовать локальные переменные, должны были использовать команду lvars
, чтобы объявить размер буфер, используемый для локальных переменных, до 128 слов. Сделав это, модуль, использующий локальные переменные, может начаться следующим образом (со страницы C2 Сводки команд и системных переменных TUTOR, Avner, 1981):
unit someu NAME1, NAME2, NAME3 (SIZE) NAME4 = CONSTANT плавающее: NAME5, NAME6, NAME7 (SIZE) целое число, NUM BITS: NAME8, NAME9 integer, NUM BITS, подписано: NAME10 целое: NAME11
Строки продолжения приведенной выше команды unit
считаются строками неявная команда define
с локальной областью действия. Обычные определения переменных студента, такие как n150
, могут использоваться в таком локальном определении
, но все проиллюстрированные здесь формы автоматически связывают имена с местоположениями в блоке памяти, выделенном lvars
команда. В доступной документации TUTOR не обсуждается, как распределяются локальные переменные.
Существует значительное семейство языков, связанных с TUTOR, каждый из которых похож на исходный язык TUTOR, но с отличиями. В частности, TUTOR был компонентом системы (компьютерной образовательной системы PLATO), которая работала на определенном оборудовании мэйнфрейма CDC. Для повышения эффективности в TUTOR были некоторые аппаратно-зависимые элементы (например, переменные, представляющие собой 60-битные слова, которые можно было использовать как массивы из 60 бит или как 10 шестибитных символов и т. Д.). Кроме того, TUTOR был разработан до появления оконно-ориентированного графического интерфейса пользователя (GUI).
Язык microTutor был разработан в рамках проекта PLATO в UIUC, чтобы разрешить выполнение частей урока на терминалах, содержащих микрокомпьютеры, с подключениями к коду TUTOR, работающему на мэйнфрейме. Диалект microTutor был также языком программирования системы Cluster, разработанной в UIUC и лицензированной для TDK в Японии; Кластерная система состояла из небольшой группы терминалов, подключенных к мини-компьютеру, которые обеспечивали хранение и компиляцию. Tencore Language Authoring System - это производная программа TUTOR, разработанная Полом Тенцаром для ПК и продаваемая Computer Teaching Corporation. cT был производным от TUTOR и microTutor, разработанных в Carnegie Mellon, который позволял программам запускаться без изменений в оконных графических средах в системах Windows, Mac и Unix / Linux: Архив языков программирования cT