JOSS - JOSS - Wikipedia

JOSS
РазработчикКлифф Шоу, RAND
Впервые появился1963; 57 лет назад (1963)
Под влиянием
ТЕЛКОМП, CAL, ФОКУСНЫЙ и МАМПЫ
Часть сеанса JOSS в RAND в 1970 году, на котором пользователь выполняет ряд простых вычислений в «прямом режиме». Обратите внимание на разницу между точкой в ​​конце отчетов и вставлять для умножения.

JOSS, сокращение от Система открытых магазинов JOHNNIAC,[а] был одним из первых интерактивных, совместное времяпровождение языки программирования. Он стал пионером ряда функций, которые стали распространенными в языках с 1960-х по 1980-е годы, в том числе номера строк как инструкции редактирования и цели для веток, операторы, основанные на логических решениях, и встроенный редактор, который может выполнять инструкции в «прямом» или «немедленном» режиме, диалоговый пользовательский интерфейс.

JOSS изначально был реализован на ДЖОННИАК машина на Rand Corporation и был запущен в 1963 году. Он оказался очень популярным, и пользователи быстро остановили машину. К 1964 году потребовалась замена с более высокими характеристиками. JOHNNIAC был отправлен на пенсию в 1966 году и заменен PDP-6, которые в конечном итоге стали поддерживать сотни компьютерные терминалы на основе IBM Selectric. Терминалы использовали зеленые чернила для пользовательского ввода и черные для ответа компьютера. Любая непонятная команда вызывала ответ «А?» или "ИЗВИНИТЕ".

Система была очень влиятельной, порождая множество портов и ответвлений. Некоторые остались похожи на оригинал, например ТЕЛКОМП и STRINGCOMP, CAL, CITRAN, ISIS, PIL / I, ЖАН (ИКТ 1900 серии ), ПОМОГАТЬ (PDP-10 ); в то время как другие, такие как ФОКУСНЫЙ и МАМПЫ, развивались в отличительных направлениях. Он также очень похож на БАЗОВЫЙ переводчики найдены на микрокомпьютеры в 1980-х, отличаясь в первую очередь деталями синтаксиса.

История

Первоначальная идея

В 1959 г. Уиллис Уэр написал меморандум Рэнда на тему вычислений, в котором заявил, что компьютеры будущего будут иметь «множество персональных станций ввода-вывода, так что многие люди смогут взаимодействовать с машиной одновременно».[2] Записка вызвала интерес ВВС США, Главными спонсорами Rand, и в 1960 году они сформировали проект Information Processor Project, чтобы изучить эту концепцию, которая вскоре стала совместное времяпровождение. Проект не был специально посвящен разделению времени, но был направлен на улучшение взаимодействия человека с компьютером в целом. В то время идея заключалась в том, что постоянное взаимодействие между пользователем и компьютером взад-вперед сделало бы такое взаимодействие более естественным.[2] Как директор JOSS Кит Ункафер позже поставлю:

Я думаю, что было два мнения, которые привели к эксперименту. Один из них был, по крайней мере, с 1950 года, когда я присоединился к Rand, в компьютерной части Rand всегда было сосредоточено на плавном взаимодействии с пользователем. Это просто встроено в нас. Мы узнали это от Ганнинга. ... все, о чем мы думали. Во-вторых, математики боролись с калькуляторами Маршана и не могли использовать JOHNNIAC в исходной форме. Это было слишком сложно. Им пришлось учиться на программистов. Для них это было просто разочаровывающим опытом. Мы хотели что-то, что могло бы восприниматься ими как естественный способ мышления о помощи в решении их проблем без особой подготовки и без какого-либо ощущения того, чтобы стать программистом, потому что это удержало бы их подальше.[3]

Официальное предложение по развитию того, что стало JOSS на ДЖОННИАК Компьютер был принят в марте 1961 года.[2]

JOSS-1

JOSS был практически полностью реализован Дж. Клиффорд Шоу, математик, работавший в растущем вычислительном подразделении Rand. Это было написано символическим язык ассемблера называемый EasyFox (E и F в фонетическом алфавите американских вооруженных сил того времени), также разработанный Шоу.[4]

Впервые система JOSS была официально представлена ​​в мае 1963 года, поддерживая пять консолей, одну в машинном отделении и четыре в офисах вокруг здания.[5] Первые консоли были основаны на передающей пишущей машинке IBM Model 868, так как Selectric еще не был представлен на рынке, когда началась разработка.[6] Первое расписание было опубликовано 17 июня, при этом JOSS работает ежедневно по три часа с 9 до 12 часов.[7] В январе 1964 года он был объявлен полностью готовым к эксплуатации на восьми терминалах.[1] Окончательная версия была развернута в январе 1965 года.[8]

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

Люди приспосабливают свою жизнь к JOSS… Бесполезно приходить в RAND до 10:00, когда приезжает JOSS, на самом деле полдень или после 17:00 - лучшее время, JOSS менее занят. Когда JOSS начинает набирать ответы, щекотливое удовольствие может быть уравновешено только последующей болью, когда JOSS прерывается тарабарщиной или уходит, предавая ваш код забвению. С JOSS трудно жить, но и без него жить не можем.[9]

Другой выразился более лаконично:

Это лучше пива - мы на крючке.[1]

Переключение JOSS-2

В мае 1964 года было принято решение искать новую машину, которая заменит JONNIAC, и полностью посвятить ее работе с расширенной версией JOSS. Машина также должна была поддерживать новые терминалы, изготовленные по спецификациям Rand, и должна была быть доставлена ​​к 31 октября 1965 года.[7]

На новую машину было подано девять заявок. Корпорация цифрового оборудования (DEC) выиграли конкурс со своими новыми PDP-6 система, и для покупки было выделено финансирование ВВС. DEC также согласилась построить тридцать терминалов на базе Пишущая машинка IBM Selectric модифицирована специальным механизмом для перехода к следующей странице при подаче фальцованной бумаги. Некоторые другие части общей системы были доставлены другими компаниями.[10]

PDP-6 прибыл в конце июля 1965 года и первоначально был испытан с использованием Телетайп Модель 33 это как терминалы. Новую версию кода разработали Чарльз Л. Бейкер, Джозеф В. Смит, Ирвин Д. Гринвальд и Дж. Эдвард Брайан. Впервые система была объявлена ​​работающей в октябре, хотя это включало шесть часов планового технического обслуживания в неделю.[11] Первый прототип терминала прибыл в ноябре. В декабре терминал в Лас Вегас был подключен к машине удаленно впервые.[10] В феврале 1966 года это было отправлено в База ВВС Макклеллан, затем один в августе Военно-воздушная академия и два в сентябре, чтобы ARPA и офис ВВС в Пентагон. Первое постоянное внешнее телетайпное соединение для Телетайп Модель 35 был установлен в База ВВС Лэнгли в феврале 1967 г.[11]

После того, как новая машина была запущена и запущена, JOHNNIAC был отключен от сети 11 февраля 1966 года и официально списан 18 февраля. Его последняя запущенная программа была написана на JOSS и отсчитывала секунды до выключения. Машину отправили в Музей округа Лос-Анджелес,[12] и в итоге оказался в Музей истории компьютеров за пределами Сан-Франциско.[13] Будучи замененным на систему JOSS-2, оригинал был задним числом известен как JOSS-1.[14]

JOSS-2 использование

К концу 1966 года новая система JOSS-2 была полностью функциональна и передана компании JOSS в круглосуточное пользование. Новая машина предлагала примерно в 30 раз большую скорость вычислений, в пять раз больше места для хранения на одного пользователя и множество новых функций в самом языке.[15][1] Новая платформа может поддерживать до 100 терминалов одновременно.[16] Военно-воздушные силы оставались владельцем системы, а Рэнд и другие работали в качестве консультантов. Время процессора был выставлен счет внешним пользователям из расчета около 1 доллара за минуту, хотя это было только во время фактического выполнения, время, затраченное на набор текста и печать, было бесплатным.[17]

К 1970 году на Rand и на различных сайтах ВВС по всей стране было от 500 до 600 пользователей.[18] Многие из них были случайными пользователями, для чего и была предназначена система. Для их поддержки заказные терминалы были оснащены специальными «вилками JOSS», чтобы их можно было перемещать из офиса в офис и вставлять в специальные розетки. Вокруг Рэнда было установлено двести заглушек, а шасси терминала было спроектировано так, чтобы быть достаточно узким, чтобы проходить сквозь двери, оставляя место для кофе с одной стороны.[19] Переключение выключателя питания на терминале привело к его подключению в новом месте.[16]

Пользовательские терминалы были разработаны для JOSS, поскольку инженеры посчитали, что «телекоммуникационные функции Model 33 - загадка для неподготовленного человека» и будут слишком запутанными для случайных пользователей, чтобы они учились.[20] На практике механизмы на базе Selectric оказались слишком хрупкими для постоянного использования, которые они видели, и часто ремонтировались в полевых условиях военнослужащими IBM. В 1970 году полная треть терминалов была полностью перестроена, и производительность компьютера снизилась, чтобы повысить надежность. К этому времени ВВС решили использовать Model 35, поскольку она была и легкодоступной, и гораздо менее дорогой.[21][11]

Пользователи были восторженными, и чтобы служить им, Рэнд начал публиковать Информационный бюллетень JOSS, отредактированный Ширли Маркс. В итоге с ноября 1967 по июнь 1971 года было опубликовано 44 номера.[22]

JOSS-3

В начале 1970-х программисты в одном из IBM предприятия на западном побережье построили JOSS-3 для IBM 370/158 Бег OS / 360. Информации об этой системе мало, за исключением того, что именно на этой машине JOSS окончательно удалился.[23] Согласно примечанию в историческом обзоре, Рэнд не решался разрешить IBM использовать имя JOSS, и в результате «версия IBM никогда широко не использовалась».[24]

Выполнение

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

JOSS-II на PDP-6 был разделен на две части, что соответствовало структуре внутренней памяти машины. Машина была оборудована двумя банками основная память, с 16k 36-битными словами в каждом банке. Сама система JOSS, в которую вошли Операционная система, код управления пользователями и файлами, обработчик терминала и интерпретатор использовали большую часть первого из этих банков. Второй банк использовался для пользовательских программ. Хотя это был относительно большой объем памяти для той эпохи, система использовалась настолько интенсивно, что пользовательского хранилища 16k слов было недостаточно, и для нее было выполнено резервное копирование с помощью магнитный барабан для поддержки пейджинга.[16] Барабан приводился в движение внешним оборудованием и не требовал внимания со стороны основного процессора.[25]

Для поддержки нескольких пользовательских программ аппаратное обеспечение PDP-6 было модифицировано так, чтобы проверять бит-20 любой адресной ссылки. Если этот бит был установлен, адрес находился в «пространстве пользователя» и был изменен таким образом, чтобы нулевой адрес указывал на базовый адрес этого пользователя. Таким образом, пользовательские программы могут перемещаться в памяти, не вызывая проблем для системы, а операционная система может переключаться от пользователя к пользователю, просто изменяя единственный внутренний регистр.[16]

Постоянное хранение предоставлено компанией Storage Products жесткий диск с объемом памяти 5,7 миллионов слов. Как и барабан, настоящий ввод, вывод в барабан и обратно обрабатывались извне, хотя в этом случае движение запускалось действиями пользователя по загрузке и сохранению своих программ. IBM-совместимый ленточный накопитель использовался для перемещения данных на диск и с диска по мере необходимости, причем эта операция также не зависела от ЦП. Два DECtape были также доступны и работали так же, как и привод IBM.[26]

Клеммы обрабатывались через специальный «концентратор», состоящий из механического Переключатель Строуджера который может подключать любую из 300-400 возможных клеммных колодок к любому из 40 выходов. Еще восемь строк были посвящены Телетайп Модель 33 входы, в отличие от Selectrics в стиле JOSS. Эти 48 линий затем были подключены к электронному мультиплексор подключен к процессору. Мультиплексор был прерывать ведомый, то есть неиспользуемые клеммы не использовали никаких циклов.[26]

Индивидуальные терминалы JOSS были построены DEC. Они состояли из механизма Selectric, встроенного в индивидуальное шасси, содержащего систему связи, источник питания и другие компоненты. Пользовательский шарик шрифта использовался для предоставления основных математических символов, таких как ≠, поэтому двухсимвольные комбинации, такие как <>, не использовались. Система связи была основана на 6-битном символьном коде в 8-битном пакете со стартовыми и стоповыми битами. Скорость передачи строк составляла 120 бит / с, что соответствовало максимальной скорости механизма Selectric 15 символов в секунду. Коды сдвига и сдвига использовались для перехода ленты от зеленого к черному и обратно. Эти коды также были замечены системой связи и изменили индикаторы на передней панели, чтобы указать, имел ли компьютер или пользователь контроль над терминалом в данный момент.[27]

Язык

Прямой и непрямой режим

JOSS представил идею сингла командная строка редактор, который работал и как интерактивный язык, и как редактор программ. Команды, набранные без номера строки, выполнялись немедленно, в том, что JOSS назвал «прямым режимом». Если к той же строке добавлялся номер строки, она вместо этого копировалась в область хранения программного кода, которую JOSS назвал «косвенным режимом». Новые строки добавлялись в программу, если номер строки был уникальным, заменял существующие строки тем же номером или удалялся из программы, если существующий номер строки был введен без какого-либо кода после него.[28]

В отличие от большинства BASIC, JOSS сохранял в файлы все данные, введенные пользователем, а не только программный код. После загрузки JOSS, по сути, вводил строки обратно. Это означало, что «программные файлы» могли содержать как программные операторы, так и инструкции прямого режима. Например, часто можно было увидеть программы, которые перечисляли строки операторов, а затем заканчивали файл на Идти. чтобы сразу запустить программу, как только она загрузится. Были некоторые функции, которые можно было использовать только в прямом режиме, например Позволять и Форма, которые были введены без номеров строк, но все равно возвращались при загрузке программы.[29]

Прямые и косвенные инструкции можно было свободно смешивать в рабочем пространстве. Это позволило вставлять комментарии в исходный код добавляя строки прямого режима, начинающиеся с *,[30] или поместив его в конец строки кода, а затем добавив после него комментарий. Пустые строки также игнорировались, что позволяло разбить программу на части для ясности.[31]

Операторы программы

Каждая строка в программе JOSS должна начинаться с номера строки. Номера строк - это числа с фиксированной точкой, состоящие из двух двузначных целых чисел, разделенных точкой. Как и в BASIC, номера строк используются как метки для таргетинга. К и Делать заявления, а также для поддержки редактирования. Ввод строки кода с новым номером строки вставляет ее в программу, а ввод строки с существующим номером строки заменяет предыдущую версию или удаляет ее, если она пуста.

Часть номера строки слева от точки называется «страницей» или «частью», а часть справа называется «строкой». Таким образом, номер строки 10.12 относится к странице 10, строка 12. Ветви могут быть нацелены либо на страницу, либо на строку внутри страницы. Когда используется более поздний формат, объединенная страница и строка известны как «шаг».

Страницы используются для определения подпрограммы, которые возвращаются, когда следующая строка находится на другой странице. Например, если подпрограмма для вычисления квадратного корня из числа находится на странице 3, у вас может быть три строки кода 3.1, 3.2 и 3.3, и она будет вызываться с использованием Сделайте часть 3. Код вернется к оператору после Do, когда он достигнет следующей строки на другой странице, например, 4.1. Нет необходимости в эквиваленте ВОЗВРАЩАТЬСЯ в конце, хотя если требуется досрочный возврат, Выполнено выполняет это.

Каждая строка должна начинаться с ключевого слова команды, следующего за номером строки. Не существует концепции "команды по умолчанию", как в случае с BASIC с ее необязательной ПОЗВОЛЯТЬ утверждение. В одной строке можно разместить несколько операторов, разделенных двоеточием или точкой с запятой. Каждая строка должна заканчиваться точкой.

Циклы и условия

JOSS использует суффиксную нотацию для обозначения условной оценки, «сделай это, если это правда», по сравнению с большинством языков, в которых условие ставится впереди в префиксной нотации, «если это правда, сделай это». Как BASIC, но в отличие от FORTRAN или же ФОКУСНЫЙ, таким образом можно условно оценить любой оператор. Например, чтобы напечатать строку только при выполнении условия, можно объединить if с Тип:

1.1 Введите "Hello, World!" если X = 5.

JOSS поддерживает шесть инфиксных сравнений, =, , , , > и <, а также логические операторы или же, и и нет.[32]

Аналогичным образом обрабатывались петли с использованием За команда и несколько непонятный формат для указания границ цикла и значения шага, начало (шаг) конец. Например, для перехода от 1 к 10 на 2 формат будет следующим: 1(2)10. Нравиться Если, За может применяться к любому другому утверждению:

1.2 Введите «Привет, Википедия!» для i = 1 (2) 10.

Обратите внимание, что for применяется только к одному оператору; если кто-то хочет запустить несколько операторов в цикле, они будут разделены на другую часть и вызваны с помощью do:

1.3 Выполните часть 5 для i = 1 (1) 100.5.1 Введите «Привет, Википедия!» 5.2 Введите «Это JOSS.».

Как и в BASIC, любые входные данные цикла for могут быть константами, переменными или другими выражениями.

Выражения и предложения

Уникальной особенностью JOSS была обработка логических выражений. Большинство компьютерных языков предлагают способ составить математическое выражение, состоящее из нескольких частей, например, Положим x = (1 + 2) · 3. который устанавливает переменную x в значение 9. JOSS расширил эту концепцию, четко определив концепцию «предложения», выражения, которое возвращает логическое значение, истинное или ложное, вместо числового. Их в основном видели в Если операторы, как в примерах выше, но логическое значение также может быть сохранено в переменной напрямую,[33] или можно было преобразовать истину в 1 и ложь в 0, используя телевидение (значение истинности) функция.[34]

В дополнение к предложениям, JOSS также использовал понятие «условных выражений». Они состояли из строк предложений вместе с кодом, который работал бы, если бы это предложение было истинным. Это позволило записать многоступенчатые деревья решений в одну строку. Они служат цели, аналогичной тернарный оператор найдено в современных языках, таких как C или же Ява, где они используются для возврата значения из компактной структуры, реализующей если-то-еще. Версия JOSS имеет любое количество условных выражений, а не только три, поэтому она более компактна. оператор переключения чем компактное если-то.[35]

В этом примере воссоздается функция sgn функция:[36]

Пусть s (x) = [x = 0: 0; х> 0: 1; х <0: -1].

Это определяет функцию «s», которая принимает единственный параметр «x» и выполняет три последовательных теста против него. Какой бы тест ни был успешным, он возвращает соответствующее значение после двоеточия.[37]

Диапазоны

Еще одна передовая особенность JOSS заключалась в том, что в нем использовалась концепция классифицировать как встроенный тип, который можно хранить и манипулировать. Диапазоны обычно используются как входные данные для для петель, где они являются частью синтаксиса самого цикла. Например, в BASIC цикл for пишется с использованием этого базового синтаксиса:

ЗАя=1К5ШАГ2

Это выполнит цикл, который присваивает I значения 1, 3, 5, а затем завершает работу.

JOSS использовал несколько непонятный формат для определения границ цикла. Эквивалентный код в JOSS:

 Я = 1 (2) 5

Обратите внимание, что этот код не включает в себя. Это потому, что в JOSS диапазоны - это первоклассные граждане языка, а не что-то, что является частью цикла, как в BASIC. Диапазоны можно определять и использовать во многих контекстах вне циклов. Например, вот условное выражение, которое оценивает факториал параметра x:[35]

Пусть f (x) = [x = 0: 1; fp (x) = 0: prod (i = 1 (1) x: i)].

В этом примере есть два основных предложения, разделенных точкой с запятой. В первом слева говорится, что если параметр x равен 0, условие должно немедленно вернуть 1. Если это предложение терпит неудачу, оно переходит ко второму тесту, расположенному справа. Этот проверяет, равна ли дробная часть x нулю (т. Е. Целое число), и если да, то вызывает толкать функция умножения диапазона значений. В толкатьпараметр также является предложением, но в этом случае тест заменяется итератором цикла, который работает от 1 до x, шагая на 1. Если это утверждение верно, то есть для всех значений цикла, оно возвращает индекс i. Это вызывает отправку серии значений в толкать от 1 до х.[35]

Комбинация этих функций позволяет записывать сложные функции в несколько команд. Подобная функциональность стала обычным явлением только в гораздо более современных языках, которые обычно используют итераторы или функция карты чтобы обеспечить те же результаты. Способность JOSS комбинировать решения и циклы в компактной форме неизвестна другим языкам той эпохи, включая ответвления, такие как FOCAL.

Команды

Набор

В Набор команда присваивает результаты выражения указанной переменной. Эквивалент BASIC's ПОЗВОЛЯТЬ.

01.30 Установить p = 3.14156.01.60 Установить i = l * (r / 100) * t.

Набор был необязательным при использовании в прямом режиме, где можно было ввести х = 5. без команды Set. В отличие от BASIC это было недопустимо в непрямом режиме.[38]

Позволять

Позволять был использован для определения пользовательских функций.[39] Эквивалент BASIC's DEF FN.[30]

Пусть t (x) = sin (x) / cos (x). Положим j = t (1.1). Тип j.

Позволять также можно использовать для установки значения переменной с помощью формулы, состоящей из константы:

Пусть x = 5.

С этого момента его можно использовать так же, как созданное с помощью Набор. Однако есть небольшая разница: когда этот X упоминается в коде, значение будет вычисляться путем оценки правой части. А Набор оценивается только один раз, поэтому выполняется намного быстрее.[40]

Система обычно предлагала использовать Позволять только в прямом режиме, сохраняя их для использования в программе, вставляя их вверху или внизу файла. Это позволило избежать Позволять вызывается несколько раз во время выполнения, так как он будет вызываться только один раз в процессе загрузки.[41]

требовать

В требовать принимает список переменных и сохраняет введенные пользователем данные в переменных. Необязательный в качестве квалификатор добавил настраиваемую подсказку. Эквивалент BASIC's ВХОД.

01.01 Введите «Сколько вам лет?». 01.02 Запрос A.01.03 Тип «Вы», A.01.04 Введите H как «Какой у вас рост?» 01.05 Тип H, «? Такой высокий?».

Тип

В Тип команда выводит один или несколько элементов, разделенных запятыми. В своей базовой форме он эквивалентен BASIC РАСПЕЧАТАТЬ. Тем не мение, Тип включает ряд дополнительных форм, которые сильно перегружают его, выполняя ряд несвязанных задач вывода.[42]

При использовании для печати значений параметры могут быть переменными, буквальными строками, заключенными в двойные кавычки, и специальными _ символ, который производит перевод строки.[43] Тип также поддерживает форматированный вывод с использованием строк формата. См. Раздел о Форма подробности ниже.[42]

Тип также используется как эквивалент BASIC's СПИСОК выписку, выписывая программу. Например, Введите шаг 1.1. распечатает одну строку кода, а Тип часть 1. распечатает всю часть и Типа все. распечатывает всю программу.[42]

Кроме того, его также можно использовать для печати списков внутренних значений. Введите все значения. создает список всех переменных и их значений, а Размер шрифта. распечатывает размер программы. Ключевые слова включают размер, время и пользователи.[42]

Страница

Страница запускает подачу страницы на специальных терминалах JOSS.[33] JOSS обычно отправляет подачу страницы, когда терминал достигает строки 54 на бумаге, поэтому, если кто-то хочет гарантировать, что блок данных не будет разделен пополам, можно:[44]

1.10 Страница, если $> 44.

$ - псевдопеременная, которая возвращает текущий номер строки.[44]

Линия

Линия запускает перевод строки на специальных терминалах JOSS.[33]

К

В К команда переводит выполнение программы на указанную часть или номер шага, используя К части 1. или же К шагу 1.1. соответственно.[45] Это эквивалент BASIC's ИДТИ К. Контраст с Идти, косвенная команда, используемая из командной строки, которая запускает программы, эквивалент BASIC's ПРОБЕГ.

01.01 Требование «НАПИШИТЕ НОМЕР», A.01.05 К шагу 1.01.01.10 К части 1.

Делать

Делать похоже на К, но переходит к подпрограмме. Как и с К, Вы можете Делай расставание или же Сделать шаг. Если предусмотрен шаг, эта единственная строка запускается, а затем возвращается к оператору после Делать. Если часть предоставлена, выполнение начинается с первой строки блока и продолжается до тех пор, пока не будет достигнут конец блока или Выполнено заявление встречается.

01.15 Сделайте шаг 7.24. 01.16 Сделайте часть 8.

Делать была одна специальная короткая форма для поиска, которая очень распространена в большинстве программ. Это использовало раз модификатор вместо обычного за, в случае простых петель. Таким образом, следующие строки эквивалентны:[42]

Выполните часть 1 для i = 1 (1) 5. повторите часть 1, 5 раз.

JOSS поддерживает указатель на текущую выполняемую строку, которая Делать изменилось бы. Однако он включал в себя специальную «скобку», которую можно было использовать в прямом режиме для тестирования определенных разделов кода без изменения основного указателя. Например, если программа остановилась из-за ошибки и не было ясно, какой раздел вызвал проблему, можно протестировать конкретную подпрограмму с помощью:[46]

 (Выполните часть 2.)

Выполнено

В Выполнено команда возвращается из вызова подпрограммы. Поскольку подпрограммы возвращаются автоматически, когда достигается конец детали, Выполнено требуется только для досрочного возврата и часто используется с условным условием. Эквивалент BASIC's ВОЗВРАЩАТЬСЯ.

* Процедура запроса у пользователя положительного значения и повторения до тех пор, пока он не получит единицу. 01.10 Требование X как «Введите положительное значение больше нуля». 01.20 Готово, если X> 0,01,30 К шагу 1.1

Останавливаться

В Останавливаться Команда завершает выполнение программы и возвращает управление среде редактирования. Эквивалент BASIC's КОНЕЦ или же ОСТАНОВКА, хотя BASIC's ОСТАНОВКА предназначен для того, чтобы позволить ПРОДОЛЖЕНИЕ запускать выполнение в том же месте, функция, которая не имеет прямого эквивалента в системе JOSS, ориентированной на рабочее пространство.

01.10 Тип X.01.20 Stop.

Идти

Доступно только в прямом режиме, Идти эквивалентен BASIC ПРОБЕГ и ПРОДОЛЖЕНИЕ, в зависимости от того, остановлена ​​ли программа из-за ошибки или Останавливаться встречающаяся команда.[47]

Отмена

Еще одна команда только для прямого режима, Отмена используется, когда программа остановилась из-за ошибки, и пользователь хочет сбросить программу, что он делает, очищая счетчик команд. А Идти заберут в последнем месте, но выдаст Отмена делает Идти снова начать сверху.[48] Если текущая точка останова возникла из-за скобки (Делать.), можно выполнить отмену в скобках, (Отмена.), чтобы остановить только это подвыполнение и разрешить Идти , чтобы продолжить с последней строки без скобок.[46]

Математика

JOSS хранит все числа как целое число и десятичную экспоненту. Это означает, что вычисления были точными десятичными значениями, а не плавающая точка расчеты. 1/3 + 1/3 + 1/3 было ровно 1.[49]

JOSS содержал шесть математических операторов:[49]

  • + для дополнения
  • - для вычитания
  • · для умножения (не точка, а не точка)
  • / для разделения
  • * для экспонентов
  • |...| для абсолютного значения, с выражением в середине

Математические выражения могут использовать () и [] взаимозаменяемо в совпадающих парах для установления приоритета. Например:

  1.30 Установите A = | -10 * [5 + 1] * (1 + 5) |.

Произведет 360.[32]

Функции

Язык содержал следующие встроенные функции:

Математика

  • грех () - Синус угла в радианах
  • cos () - косинус
  • arg () - принимает значения X и Y точки и возвращает угол между этой точкой и осью x
  • бревно() - Наперин бревно
  • exp () - Естественная основа для силы аргументации
  • sqrt () - Квадратный корень
  • sgn () - Знак аргумента, 0 возвращает 0, -ve значения -1, + ve +1
  • ip () - целая часть аргумента, ip (22026.4658) возвращает 22026
  • fp () - Дробная часть, возвращает 0,4658
  • dp () - Цифровая часть, возвращает 2,20264658
  • ep () - Показательная часть, возвращает 4, расположение десятичной дроби

Булево

  • телевидение() - Истинное значение, возвращает 1, если выражение истинно, 0 в противном случае

Циклические функции

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

  • Максимум() - Максимальное значение предоставленных выражений
  • мин () - Минимум
  • сумма () - Сумма
  • prod () - Товар
  • первый() - Первый элемент в списке, который соответствует условию, возвращает этот результат

Управление файлами

В системе JOSS используется жесткий диск для хранения пользовательских программ в отведенном месте. В этом пространстве находился ряд файлов, на которые ссылались с использованием составного имени файла, состоящего из целого числа и пятибуквенного имени в круглых скобках, например, 123 (привет). Целая часть - это эквивалент каталога, а имя - это вложенный файл в нем, который поддерживается самим JOSS.[50]

Файлы пишутся с Сохраните все как имя файла элемента. и загружен Вспомните имя файла элемента.. Также можно было читать или сохранять только определенные части рабочего пространства, например Часть файла 1 как имя файла элемента. чтобы сохранить одну процедуру в файл.[51] Кроме того, можно было установить файл по умолчанию, на который предполагались все ссылки с Используйте имя файла элемента. Файлы могут быть удалены с помощью Отказаться.[51]

Пример программы

1.1 Требование p, q. 1.2 Остановить, если q <0 или r (q, 2) = 0.1.3 Установить a = 1.1.4 Выполнить часть 2, пока q> 1 и a 0.1.5 Введите a в форме 3.1.6 Остановить .2.1 Выполните часть 20.2.1 Выполните часть 11, если p <0,2.2 Выполните часть 12, если p≥q. 2.3 Выполните часть 13, если p = 0,2,4 Выполните, если a = 0,2,5 Установите p = p / 4, в то время как r ( p, 4) = 0.2.6 Выполните часть 14, если r (p, 2) = 0,2.7 Выполните часть 20.2.8 Установите a = -a, если r (p, 4) = r (q, 4) = 3.2.9 Установить s = p, p = q, q = s. 2.95 Выполнить часть 20.11.1 Установить a = -a, если r (q, 4) = 3.11.2 Установить p = | p |. 11.3 Выполнить часть 20.12.1 Установить p = r (p, q). 12.2 Выполните часть 20.13.1 Установите a = 0, p = 1, q = 1.14.1 Установите a = -a, если r (q, 8) = 3 или r (q, 8) = 5.14.2 Установите p = p / 2.20.1 Введите p, q в форме 1, если a = 1.20.2 Введите p, q в форме 2, если a = -1. Форма 1: "L (%. 0f,%. 0f ) = "Форма 2:" -L (%. 0f,%. 0f) = "Форма 3:"% .0f  n "

Обратите внимание, что это не оригинальный образец, а образец современного симулятора. Есть некоторые синтаксические отличия от исходного языка JOSS.

Примечания

  1. ^ Когда он ушел из JOHNNIAC, было предложено изменить аббревиатуру на «JOSS Open Shop System», что сделало его ранним примером рекурсивного имени.[1]

Рекомендации

Цитаты

  1. ^ а б c d Брайан 1966, п. 2.
  2. ^ а б c Марки 1971, п. 1.
  3. ^ Норберг, Артур (10 июля 1989 г.). "Интервью с КИТ АНКАФЕР" (PDF) (Опрос). п. 7.
  4. ^ Посуда 2008 г., п. 62.
  5. ^ Марки 1971, п. iii.
  6. ^ Шоу 1965, п. 3.
  7. ^ а б Марки 1971, п. 2.
  8. ^ Смит, Дж. В. (август 1967 г.). JOSS: процедуры центральной обработки (справочное руководство пользователя). РЭНД. RM 5270 PR. Получено 2012-04-16.
  9. ^ Шоу 1965, п. 14.
  10. ^ а б Марки 1971, п. 3.
  11. ^ а б c Марки 1971, п. 9.
  12. ^ Марки 1971, п. 4.
  13. ^ "ДЖОННИАК". Музей истории компьютеров.
  14. ^ Посуда 2008 г., п. 15, 109.
  15. ^ Марки 1971, п. 5.
  16. ^ а б c d Брайан 1966, п. 3.
  17. ^ Марки 1971, п. 32.
  18. ^ Марки 1971, п. 10.
  19. ^ Марки 1971, п. 15.
  20. ^ Марки 1971, п. 14.
  21. ^ Брайан 1966, п. 12.
  22. ^ Марки 1971, п. 47.
  23. ^ Посуда 2008 г., п. 65.
  24. ^ Посуда 2008 г., п. 16.
  25. ^ Брайан 1966, п. 4.
  26. ^ а б Брайан 1966, п. 5.
  27. ^ Брайан 1966, п. 6.
  28. ^ Гимбл 1967, п. v.
  29. ^ Гимбл 1967, п. vi.
  30. ^ а б Гимбл 1967, п. 65.
  31. ^ Марки 1971, п. 42.
  32. ^ а б Гимбл 1967, п. 70.
  33. ^ а б c Гимбл 1967, п. 77.
  34. ^ Гимбл 1967, п. 24, 69.
  35. ^ а б c Гимбл 1967, п. 75.
  36. ^ Марки 1971, п. 41.
  37. ^ Гимбл 1967, п. 25.
  38. ^ Гимбл 1967, п. 68.
  39. ^ Гимбл 1967, п. 74-75.
  40. ^ Гимбл 1967, п. 45.
  41. ^ Гимбл 1967, п. 63.
  42. ^ а б c d е Гимбл 1967, п. 66.
  43. ^ Гимбл 1967, п. 7.
  44. ^ а б Гимбл 1967, п. 49.
  45. ^ Гимбл 1967, п. 67.
  46. ^ а б Гимбл 1967, п. 58.
  47. ^ Гимбл 1967, п. 57.
  48. ^ Гимбл 1967, п. 53.
  49. ^ а б Гимбл 1967, п. 69.
  50. ^ Гимбл 1967, п. 59.
  51. ^ а б Гимбл 1967, п. 61.

Источники

дальнейшее чтение