Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Часть сеанса JOSS в RAND в 1970 году, на котором пользователь выполняет ряд простых вычислений в «прямом режиме». Обратите внимание на разницу между точкой в ​​конце операторов и интерпунктом для умножения.

JOSS , аббревиатура от JOHNNIAC Open Shop System , [a] был одним из первых интерактивных языков программирования с разделением времени . В нем впервые появилось множество функций, которые стали распространены в языках с 1960-х по 1980-е, включая номера строк как инструкции редактирования и цели для ветвей, операторы, основанные на логических решениях, и встроенный редактор, который может выполнять инструкции "напрямую". "или" немедленный "режим, диалоговый пользовательский интерфейс .

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

Система имела большое влияние, порождая множество портов и ответвлений. Некоторые остались похожими на оригинал, например TELCOMP и STRINGCOMP , CAL , CITRAN, ISIS, PIL / I, JEAN ( серия ICT 1900 ), AID ( PDP-10 ); в то время как другие, такие как FOCAL и MUMPS , развивались в разных направлениях. Он также очень похож на интерпретаторы BASIC, которые использовались на микрокомпьютерах в 1980-х годах, отличаясь, прежде всего, деталями синтаксиса.

История [ править ]

Первоначальная идея [ править ]

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

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

Формальное предложение разработать то, что стало JOSS на компьютере JOHNNIAC, было принято в марте 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].

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

PDP-6 прибыл в конце июля 1965 года и первоначально был испытан с использованием Teletype Model 33 в качестве терминалов. Новую версию кода разработали Чарльз Л. Бейкер, Джозеф В. Смит, Ирвин Д. Гринвальд и Дж. Эдвард Брайан. Система была впервые объявлена ​​работающей в октябре, хотя это включало шесть часов планового технического обслуживания в неделю. [11] Первый прототип терминала прибыл в ноябре. В декабре терминал в Лас-Вегасе впервые был удаленно подключен к машине. [10] В феврале 1966 года он был отправлен на базу ВВС Макклеллан , затем один в августе в Академию ВВС и два в сентябре в ARPA.и офис ВВС в Пентагоне . Первое постоянное внешнее соединение телетайпа для Teletype Model 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 выходов. Еще восемь строк были посвящены входам Teletype Model 33 , в отличие от Selectrics в стиле JOSS. Затем эти 48 линий были подключены к электронному мультиплексору, подключенному к ЦП. Мультиплексор управлялся прерыванием , то есть неиспользуемые терминалы не использовали никаких циклов. [26]

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

Язык [ править ]

Прямой и косвенный режим [ править ]

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

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

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

Операторы программы [ править ]

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

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

Страницы используются для определения подпрограмм , которые возвращаются, когда следующая строка находится на другой странице. Например, если подпрограмма для вычисления квадратного корня из числа находится на странице 3, у нее может быть три строки кода 3.1, 3.2 и 3.3, и она будет вызываться с использованием Do part 3.. Код вернется к оператору после Do, когда он доходит до следующей строки на другой странице, например, 4.1. Нет необходимости в эквиваленте a RETURNв конце, хотя, если требуется досрочный возврат, он Doneвыполняет это.

Каждая строка должна начинаться с ключевого слова команды, следующего за номером строки. Не существует концепции «команды по умолчанию», как в случае BASIC с его необязательным LETоператором. В одной строке можно разместить несколько операторов, разделенных двоеточием или точкой с запятой. Каждая строка должна заканчиваться точкой.

Циклы и условия [ править ]

JOSS использует суффиксную нотацию для обозначения условной оценки, «сделай это, если это правда», по сравнению с большинством языков, в которых условие помещается впереди в префиксной нотации, «если это правда, сделай это». Подобно BASIC, но в отличие от FORTRAN или FOCAL , любой оператор может быть условно оценен таким образом. Например, чтобы напечатать строку только при выполнении условия, можно объединить if с Type:

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

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

Петли были обработаны таким же образом, используя Forкоманду и несколько неясного формат для указания границы цикла и значения шага, start(step)end. Например, для шага от 1 до 10 на 2 формат будет 1(2)10. Мол If, Forможет быть применено к любому другому утверждению:

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

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

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

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

Выражения и предложения [ править ]

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

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

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

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

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

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

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

ДЛЯ I = 1 ДО 5 ШАГ 2     

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

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

 Я = 1 (2) 5

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

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

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

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

Команды [ править ]

Установить [ редактировать ]

Команда Setприсваивает результаты выражения указанной переменной. Эквивалент BASIC LET.

01.30 Установите p = 3,14156.01.60 Установите i = l * (r / 100) * t.

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

Позвольте [ редактировать ]

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

Пусть t (x) = sin (x) / cos (x).Положим j = t (1.1).Введите j.

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

Пусть x = 5.

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

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

Спрос [ править ]

DemandПринимает список переменных и сохраняют пользовательский ввод переменных. Необязательный asквалификатор добавил настраиваемую подсказку. Эквивалент BASIC INPUT.

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

Тип [ редактировать ]

Команда Typeвыводит один или несколько элементов, разделенных запятыми. По своей основной форме он эквивалентен BASIC PRINT. Однако Typeвключает ряд дополнительных форм, которые сильно перегружают его, выполняя ряд несвязанных задач вывода. [42]

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

Тип также используется как эквивалент LISTоператора BASIC при написании программы. Например, Type step 1.1.распечатает одну строку кода, Type part 1.распечатает всю часть и Type all.распечатает всю программу. [42]

Кроме того, его также можно использовать для печати списков внутренних значений. Type all values.создает список всех переменных и их значений, а также Type size.выводит размер программы. Ключевые слова включают size, timeи users. [42]

Страница [ править ]

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

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

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

Строка [ править ]

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

Чтобы [ редактировать ]

Команда Toпереводит выполнение программы на указанный номер части или шага с помощью To part 1.или To step 1.1.соответственно. [45] Это эквивалент BASIC GOTO. В отличие Goот косвенной команды, используемой из командной строки, которая запускает программы, эквивалент BASIC RUN.

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

Сделайте [ редактировать ]

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

01.15 Выполните шаг 7.24.01.16 Сделайте часть 8.

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

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

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

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

Готово [ править ]

Команда Doneвозвращается из вызова подпрограммы. Поскольку подпрограммы возвращаются автоматически, когда достигается конец части, Doneтребуется только для раннего возврата и часто используется с условным условием. Эквивалент BASIC RETURN.

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

Остановить [ редактировать ]

Команда Stopзавершает выполнение программы и возвращает управление среде редактирования. Эквивалентен BASIC ENDили STOP, хотя BASIC STOPпредназначен для того, чтобы позволить запускать CONTвыполнение в том же месте, функция, которая не имеет прямого эквивалента в системе JOSS, ориентированной на рабочее пространство.

01.10 Тип X.01.20 Стоп.

Перейти [ править ]

Доступен только в прямом режиме, Goэквивалентен BASIC RUNи CONTзависит от того, остановлена ​​ли программа в настоящий момент из-за ошибки или Stopобнаруженной команды. [47]

Отменить [ редактировать ]

Другая команда, Cancelработающая только в прямом режиме, используется, когда программа остановилась из-за ошибки, и пользователь хочет сбросить программу, что он делает, очищая счетчик программы . GoБы забрать в последнем месте, но оформив Cancelмарку Goснова начать в верхней части. [48] Если текущая точка останова возникла из-за скобок (Do.), можно выполнить отмену в скобках (Cancel.), чтобы остановить только это подвыполнение и позволить a Goпродолжить с последней строки без скобок. [46]

Математика [ править ]

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

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

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

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

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

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

Функции [ править ]

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

Математика [ править ]

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

Boolean [ править ]

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

Циклические функции [ править ]

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

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

Управление файлами [ править ]

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

Файлы записываются File all as item filename.и загружаются с помощью Recall item filename.. Можно также прочитать или сохранить только определенные части рабочего пространства, например, File part 1 as item filename.чтобы сохранить одну процедуру в файл. [51] Кроме того, можно было установить файл по умолчанию, в котором все ссылки предполагались с помощью Use item filename.Files, с помощью которого можно было удалить Discard. [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. ^ а б в г Брайан 1966 , стр. 2.
  2. ^ a b c Marks 1971 , стр. 1.
  3. ^ Norberg, Артур (10 июля 1989). "Интервью с КИТ АНКАФЕР" (PDF) (Интервью). п. 7.
  4. Перейти ↑ Ware 2008 , p. 62.
  5. Перейти ↑ Marks 1971 , p. iii.
  6. ^ Шоу 1965 , стр. 3.
  7. ^ a b Marks 1971 , стр. 2.
  8. ^ Смит, JW (август 1967). JOSS: Central Processing Routines (справочное руководство пользователя). РЭНД. RM 5270 PR . Проверено 16 апреля 2012 .
  9. ^ Шоу 1965 , стр. 14.
  10. ^ a b Marks 1971 , стр. 3.
  11. ^ a b c Marks 1971 , стр. 9.
  12. Перейти ↑ Marks 1971 , p. 4.
  13. ^ "ДЖОННИАК" . Музей истории компьютеров .
  14. Перейти ↑ Ware 2008 , p. 15, 109.
  15. Перейти ↑ Marks 1971 , p. 5.
  16. ^ а б в г Брайан 1966 , стр. 3.
  17. Перейти ↑ Marks 1971 , p. 32.
  18. Перейти ↑ Marks 1971 , p. 10.
  19. Перейти ↑ Marks 1971 , p. 15.
  20. Перейти ↑ Marks 1971 , p. 14.
  21. ^ Брайан 1966 , стр. 12.
  22. Перейти ↑ Marks 1971 , p. 47.
  23. Перейти ↑ Ware 2008 , p. 65.
  24. Перейти ↑ Ware 2008 , p. 16.
  25. ^ Брайан 1966 , стр. 4.
  26. ^ а б Брайан 1966 , стр. 5.
  27. ^ Брайан 1966 , стр. 6.
  28. ^ Gimble 1967 , стр. v.
  29. ^ Gimble 1967 , стр. vi.
  30. ^ а б Гимбл 1967 , стр. 65.
  31. Перейти ↑ Marks 1971 , p. 42.
  32. ^ а б Гимбл 1967 , стр. 70.
  33. ^ a b c Гимбл 1967 , стр. 77.
  34. ^ Gimble 1967 , стр. 24, 69.
  35. ^ a b c Гимбл 1967 , стр. 75.
  36. Перейти ↑ Marks 1971 , p. 41.
  37. ^ Gimble 1967 , стр. 25.
  38. ^ Gimble 1967 , стр. 68.
  39. ^ Gimble 1967 , стр. 74-75.
  40. ^ Gimble 1967 , стр. 45.
  41. ^ Gimble 1967 , стр. 63.
  42. ^ а б в г д Гимбл 1967 , стр. 66.
  43. ^ Gimble 1967 , стр. 7.
  44. ^ а б Гимбл 1967 , стр. 49.
  45. ^ Gimble 1967 , стр. 67.
  46. ^ а б Гимбл 1967 , стр. 58.
  47. ^ Gimble 1967 , стр. 57.
  48. ^ Gimble 1967 , стр. 53.
  49. ^ а б Гимбл 1967 , стр. 69.
  50. ^ Gimble 1967 , стр. 59.
  51. ^ а б Гимбл 1967 , стр. 61.

Источники [ править ]

  • Гимбл, EP (май 1967). JOSS: Решение проблем для инженеров (PDF) (Технический отчет). Rand.
  • Брайан, GE (4 ноября 1966 г.). ДЖОСС: Введение в реализацию системы . Радиационная лаборатория Лоуренса, Беркли, Калифорния: DECUS. п. 19 . Проверено 19 июня 2019 .CS1 maint: ref = harv ( ссылка )
  • Маркс, Ширли (декабрь 1971 г.). Годы JOSS: Размышления об эксперименте (PDF) (Технический отчет). Rand . Проверено 19 июня 2019 .
  • Саммет, Жан (1969). Языки программирования: история и основы . Прентис-Холл . С. 217–226. ISBN 0-13-729988-5.
  • Шоу, JC (май 1965 г.). JOSS: Опыт работы с экспериментальной вычислительной службой для пользователей удаленных консолей пишущих машинок (PDF) (Технический отчет). Rand.
  • Уэр, Уиллис, изд. (2008). РАНД и информационная эволюция (PDF) . Rand. ISBN 9780833048165.

Дальнейшее чтение [ править ]

  • «Справочное руководство для пользователей JOSS», Р.Л. Кларк, Отчет R-1555/9, RAND Corp (январь 1975 г.)
  • Устное историческое интервью с Китом Ункафером , Институт Чарльза Бэббиджа , Университет Миннесоты. Обзор проектов в RAND, когда Кейт Ункафер был нанят в 1950 - начале 1970-х годов, таких как JOHNNIAC , JOSS, выживаемая национальная сеть, а также некоторые работы, связанные с ARPANET .