ДЖОСС
Парадигмы | неструктурированный , процедурный , императивный |
---|---|
Семья | ДЖОСС |
Разработано | Клифф Шоу |
Разработчик | РЭНД Корпорация |
Впервые появился | 1963 год |
Объем | Лексический |
Язык реализации | язык ассемблера |
Платформа | ДЖОННИАК , PDP-6 |
Под влиянием | |
TELCOMP , CAL , FOCAL , MUMPS |

direct mode
. Обратите внимание на разницу между точкой в конце операторов и точкой умножения. JOSS (аббревиатура JOHNNIAC Open Shop System ) [а] был одним из первых интерактивных с разделением времени языков программирования . Он стал пионером многих функций, которые стали распространены в языках с 1960-х по 1980-е годы, включая использование номеров строк как в качестве инструкций редактирования, так и в качестве целей для ветвей , операторы, основанные на логических решениях, и встроенный редактор исходного кода , который может выполнять инструкции. в прямом или немедленном режиме, что они назвали диалоговым пользовательским интерфейсом .
Первоначально JOSS был реализован на машине JOHNNIAC в корпорации RAND и запущен в эксплуатацию в 1963 году. Он оказался очень популярным, и пользователи быстро застопорили машину. К 1964 году стали искать замену с более высокими характеристиками. JOHNNIAC был снят с производства в 1966 году и заменен PDP-6 , который в конечном итоге стал поддерживать сотни компьютерных терминалов на базе IBM Selectric . Терминалы использовали зеленые чернила для ввода данных пользователем и черные для ответа компьютера. Любая команда вызывала реакцию непонятая Eh?
.
Система имела большое влияние, породив множество портов и ответвлений. Некоторые остались похожими на оригинал, например TELCOMP и STRINGCOMP , CAL , CITRAN, ISIS, PIL/I, JEAN ( серия ICT 1900 ), Algebraic Interpretive Dialogue (AID, на PDP-10 ). Другие, такие как FOCAL и MUMPS , развивались в разных направлениях. JOSS также очень похож на интерпретаторы BASIC, использовавшиеся в микрокомпьютерах 1980-х годов, отличаясь главным образом деталями синтаксиса .
История
[ редактировать ]Первоначальная идея
[ редактировать ]В 1959 году Уиллис Уэр написал записку RAND на тему вычислений, в которой заявил, что будущие компьютеры будут иметь «множество персональных станций ввода-вывода, чтобы множество людей могли взаимодействовать с машиной одновременно». [2] Записка вызвала интерес ВВС США , основных спонсоров Рэнда, и в 1960 году они сформировали проект «Информационный процессор» для изучения этой концепции, которая вскоре стала известна как разделение времени . Проект не был конкретно посвящен разделению времени, а был направлен на улучшение взаимодействия человека и компьютера в целом. Идея в то время заключалась в том, что постоянное взаимное взаимодействие между пользователем и компьютером сделает такое взаимодействие более естественным. [2] директор JOSS Кейт Анкафер Как позже выразился :
Я думаю, что эксперимент был обусловлен двумя мнениями. Во-первых, по крайней мере с 1950 года, когда я присоединился к Rand, в отделе компьютерных наук Rand всегда уделялось внимание плавному взаимодействию с пользователем. Это просто было встроено в нас. Мы узнали об этом от Ганнинга. ... все, о чем мы думали. Другой заключался в том, что математики сражались с калькуляторами Маршана и не могли использовать ДЖОННИАК в его исходной форме. Это было слишком тяжело. Им пришлось учиться на программистов. Для них это был просто разочаровывающий опыт. Мы хотели чего-то, что выглядело бы для них как естественный способ мышления о помощи в решении их проблем без особой подготовки и без какого-либо представления о том, чтобы стать программистом, потому что это отпугнуло бы их. [3]
Официальное предложение разработать то, что впоследствии стало JOSS, на компьютере JOHNNIAC, было принято в марте 1961 года. [2]
ДЖОСС-1
[ редактировать ]JOSS был почти полностью реализован Дж. Клиффордом Шоу , математиком, работавшим в растущем вычислительном подразделении Рэнда. Он был написан на символическом языке ассемблера под названием EasyFox (E и F в тогдашнем фонетическом алфавите вооруженных сил США), также разработанном Шоу. [4]
Система JOSS была официально запущена впервые в мае 1963 года и поддерживала пять консолей: одну в машинном зале и еще четыре в офисах вокруг здания. [5] Ранние консоли были основаны на передающей пишущей машинке IBM Model 868, поскольку на момент начала разработки Selectric еще не была представлена на рынке. [6] Первое расписание было опубликовано 17 июня: JOSS будет работать три часа с 9:00 до 12 каждый день. [7] В январе 1964 года он был объявлен полностью работоспособным на восьми терминалах. [1] Окончательная версия была развернута в январе 1965 года. [8]
К этому времени JOHNNIAC было уже более десяти лет, и его ламповая логика изначально никогда не была высоконадежной. Даже когда система работала хорошо, она стала настолько популярной, что быстро увязла. Пользователи были в восторге, один из них заявил:
Люди приспосабливают свою жизнь к JOSS… Нет смысла приходить в RAND раньше 10:00, когда прибудет JOSS, на самом деле лучшее время — полдень или после 17:00, JOSS менее занят. Когда JOSS начинает набирать ответы, возбуждающее удовольствие может сравниться только с последующей болью, когда JOSS прерывается на тарабарщину [ sic ] или уходит, предав забвению ваш код. Мы вряд ли сможем жить с JOSS, но мы не можем жить без него. [9]
Другой выразился более лаконично:
Это лучше пива — мы подсели. [1]
Переключение JOSS-2
[ редактировать ]В мае 1964 года было принято решение найти новую машину для замены JOHNNIAC и полностью посвятить ее работе с расширенной версией JOSS. Машина также должна была поддерживать новые терминалы, изготовленные по спецификациям Рэнда, и быть доставлена к 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 году в Рэнде и на различных объектах ВВС по всей стране было от 500 до 600 пользователей. [18] Многие из них были случайными пользователями, а именно для этого и была предназначена система. Для их поддержки специальные терминалы были оснащены специальными «вилками JOSS», чтобы их можно было возить из офиса в офис и подключать к специальным розеткам. Вокруг Рэнда было установлено двести вилок, а шасси терминала было спроектировано так, чтобы быть достаточно узким, чтобы пройти через двери, но при этом с одной стороны оставалось место для кофе. [19] Переключение выключателя питания на терминале привело к его подключению в новом месте. [16]
Специальные терминалы были разработаны для JOSS, поскольку инженеры считали, что «телекоммуникационные функции модели 33 являются загадкой для неподготовленного человека» и будут слишком запутанными для случайных пользователей, чтобы они могли утруждать себя изучением. [20] На практике механизмы на базе Selectric оказались слишком хрупкими для постоянного использования, и их часто ремонтировали в полевых условиях сервисные специалисты IBM. В 1970 году полная треть терминалов была полностью перестроена, а вывод данных с компьютера замедлился для повышения надежности. К этому времени ВВС решили использовать вместо этого Модель 35, поскольку она была легкодоступна и гораздо дешевле. [21] [11]
Пользователи были с энтузиазмом, и, чтобы служить им, Рэнд начал издавать Информационный бюллетень JOSS под редакцией Ширли Маркс. В конечном итоге с ноября 1967 года по июнь 1971 года было опубликовано 44 выпуска. [22]
ИОСС-3
[ редактировать ]В начале 1970-х годов программисты одного из предприятий IBM на западном побережье построили JOSS-3 для IBM 370/158 под управлением OS/360 . Информации об этой системе мало, за исключением того, что именно на этой машине JOSS окончательно ушел на пенсию. [23] Согласно примечанию в историческом обзоре, Рэнд не решался разрешить IBM использовать имя JOSS, и в результате «версия IBM никогда не получила широкого распространения». [24]
Выполнение
[ редактировать ]
JOSS-II на PDP-6 был разделен на две части, соответствующие структуре внутренней памяти машины. Машина была оснащена двумя банками основной памяти по 16 тыс. 36-битных слов в каждом банке. Сама система JOSS, включавшая в себя операционную систему , код управления пользователями и файлами, обработчик терминала и интерпретатор, использовала большую часть первого из этих банков. Второй банк использовался для пользовательских программ. оно было подкреплено магнитным барабаном Хотя для того времени это был относительно большой объем памяти, система использовалась настолько интенсивно, что пользовательского хранилища объемом 16 тыс. слов было недостаточно, и для поддержки подкачки . [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]
В отличие от большинства BASIC, 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. Нет необходимости в эквиваленте RETURN
в конце, хотя если требуется досрочный возврат, Done
это выполняет.
Каждая строка должна начинаться с ключевого слова команды, следующего за номером строки. Не существует концепции команды по умолчанию , как в случае с BASIC с ее необязательной командой. LET
заявление. Несколько операторов можно разместить в одной строке, разделив их двоеточиями или точками с запятой. Каждая строка должна заканчиваться точкой.
Циклы и условия
[ редактировать ]JOSS использует суффиксную нотацию для обозначения условной оценки: «сделай это, если это правда», в отличие от большинства языков, в которых условие помещается впереди в префиксной записи: «если это правда, сделай это». В отличие от FORTRAN или FOCAL , любое утверждение может быть условно оценено таким образом. Например, чтобы напечатать строку только в том случае, если условие выполнено, можно объединить if с Type
:
1.1 Type "Hello, World!" if X=5.
JOSS поддерживал шесть сравнений инфиксов, =
, ≠
, ≥
, ≤
, >
, <
и логические операторы or
, and
, и not
. [32]
Циклы обрабатывались аналогичным образом, используя For
команда и несколько неясный формат для указания границ цикла и значения шага, start(step)end
. Например, чтобы перейти от 1 к 10 на 2, используется следующий формат: 1(2)10
. Нравиться If
, For
может быть применено к любому другому утверждению:
1.2 Type "Hello, Wikipedia!" for i=1(2)10.
Обратите внимание, что for применяется только к одному оператору; если кто-то хочет выполнить несколько операторов в цикле, они будут разделены на другую часть и вызваны с помощью do:
1.3 Do part 5 for i=1(1)100. 5.1 Type "Hello, Wikipedia!". 5.2 Type "This is JOSS.".
Как и в BASIC, входными данными цикла for могут быть константы, переменные или другие выражения.
Поскольку такого рода диапазоны можно было применять к любой строке кода, можно было определять ограничения и циклы при вызове программы. Например, рассмотрим программу:
1.1 Type X.
Обычно, если кто-то вызывает это способом, похожим на BASIC RUN
:
Do part 1.
Это будет производить:
0
Однако это поведение можно изменить, добавив к вызову конструкцию цикла:
Do part 1 for X = 1(1)5.
Что будет производить:
1 2 3 4 5
Это позволяет создавать формулы в программах без необходимости помещения их в циклы. Зацикливание при желании может быть предусмотрено пользователем при запуске программы.
Выражения и предложения
[ редактировать ]Уникальной особенностью JOSS была обработка логических выражений. Большинство компьютерных языков предлагают тот или иной способ формирования математического выражения, состоящего из нескольких частей, например: Set x=(1+2)·3.
которое присваивает переменной x значение 9. JOSS расширил эту концепцию, четко определив концепцию «предложения», выражения, которое возвращает логическое значение, истинное или ложное, вместо числового. Их чаще всего видели в If
операторы, как в примерах выше, но логическое значение также может быть сохранено непосредственно в переменной, [33] или можно преобразовать true в 1 и false в 0, используя tv
(истинное значение). [34]
Помимо предложений, в JOSS также существовало понятие «условных выражений». Они состояли из строк предложений вместе с кодом, который запускался бы, если бы это предложение было верным. Это позволило записать многошаговые деревья решений в одну строку. Они служат цели, аналогичной тернарному оператору, используемому в современных языках, таких как C или Java , где они используются для возврата значения из компактной структуры, реализующей if-then-else . Версия JOSS имеет любое количество условных операторов, а не только три, поэтому это скорее компактный оператор переключения , чем компактный оператор if-then. [35]
В этом примере воссоздается функция sgn
функция: [36]
Let s(x)=[x=0:0; x>0:1; x<0:-1].
Здесь определяется функция «s», которая принимает один параметр «x» и выполняет три последовательные проверки по нему. Какой бы тест ни завершился успешно, он возвращает соответствующее значение после двоеточия. [37]
Диапазоны
[ редактировать ]Еще одной усовершенствованной особенностью JOSS было то, что в нем использовалась концепция диапазона как встроенного типа, который можно было хранить и манипулировать им. Диапазоны обычно являются входными данными для циклов for , где они являются частью синтаксиса самого цикла. Например, в BASIC цикл for пишется с использованием следующего базового синтаксиса:
FOR I=1 TO 5 STEP 2
Это выполнит цикл, который присваивает мне значения 1, 3, 5, а затем завершится.
JOSS использовал несколько неясный формат для определения границ цикла. Эквивалентный код в JOSS будет:
I=1(2)5
Обратите внимание, что этот код не включает оператор for. Это связано с тем, что в JOSS диапазоны являются первоклассными элементами языка, а не частью цикла, как в BASIC. Диапазоны можно определять и использовать во многих контекстах вне циклов. Например, вот условное выражение, которое оценивает факториал параметра x: [35]
Let f(x)=[x=0:1 ; fp(x)=0:prod(i=1(1)x:i)].
В этом примере есть два основных предложения, разделенных точкой с запятой. Первый слева утверждает, что если параметр x равен 0, условие должно немедленно вернуть 1. Если это предложение не выполнено, оно переходит ко второму тесту справа. Он проверяет, равна ли дробная часть x нулю (т. е. является ли оно целым числом), и если да, то вызывает функцию prod
функция умножения диапазона значений. prod
Параметр также является предложением, но в этом случае тест заменяется итератором цикла, который выполняется от 1 до x с шагом на 1. Если это предложение истинно, то есть для всех значений цикла, оно возвращает индекс И. Это приводит к отправке серии значений в prod
от 1 до х. [35]
Комбинация этих функций позволяет писать сложные функции с помощью нескольких команд. Подобные функциональные возможности стали распространены только в гораздо более современных языках, которые обычно используют итераторы или функцию карты для получения тех же результатов. Способность JOSS объединять решения и циклы в компактной форме неизвестна другим языкам той эпохи, включая такие ответвления, как FOCAL.
Команды
[ редактировать ]Набор
[ редактировать ]The Set
Команда присваивает результаты выражения указанной переменной. Эквивалент BASIC LET
.
01.30 Set p=3.14156. 01.60 Set i=l*(r/100)*t.
Set
был необязательным при использовании в прямом режиме, где можно было ввести x=5.
без команды Установить. В косвенном режиме это не допускалось, в отличие от BASIC. [38]
Позволять
[ редактировать ]Let
использовался для определения пользовательских функций. [39] Эквивалент BASIC DEF FN
. [30]
Let t(x)=sin(x)/cos(x). Set j=t(1.1). Type j.
Let
также можно использовать для установки значения переменной с помощью формулы, состоящей из константы:
Let x=5.
С этого момента его можно использовать так же, как и созданный с помощью Set
. Однако есть небольшая разница: когда этот X упоминается в коде, значение будет рассчитываться путем оценки правой части. А Set
оценивается только один раз, поэтому это намного быстрее. [40]
Система обычно предлагала использовать Let
только в прямом режиме, сохраняя их для использования в программе, вставляя их вверху или внизу файла. Это позволило избежать Let
вызывается несколько раз во время выполнения, так как во время процесса загрузки он будет вызываться только один раз. [41]
Требовать
[ редактировать ]The Demand
принимает список переменных и сохраняет введенные пользователем данные в переменных. Необязательный as
квалификатор добавил пользовательское приглашение. Эквивалент BASIC INPUT
.
01.01 Type "What is your age?". 01.02 Demand A. 01.03 Type "You are", A. 01.04 Demand H as "What is your height?". 01.05 Type H,"? That tall?".
Тип
[ редактировать ]The Type
команда выводит один или несколько элементов, разделенных запятыми. В своей базовой форме он эквивалентен BASIC. PRINT
. Однако, Type
включает ряд дополнительных форм, которые делают его сильно перегруженным, выполняя ряд несвязанных задач вывода. [42]
При выводе значений параметрами могут быть переменные, литеральные строки, заключенные в двойные кавычки, а также специальные символы. _
символ, который производит перевод строки. [43] Type
также поддерживает форматированный вывод с использованием строк формата. См. раздел о Form
подробности ниже. [42]
Type также используется как эквивалент BASIC. LIST
заявление, написание программы. Например, 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 Page if $>44.
$
— псевдопеременная, возвращающая текущий номер строки. [44]
Линия
[ редактировать ]Line
вызывает перевод строки на специальных терминалах JOSS. [33]
К
[ редактировать ]The To
Команда переводит выполнение программы на указанный номер детали или шага, используя To part 1.
или To step 1.1.
соответственно. [45] Это эквивалент BASIC. GOTO
. Контраст с Go
, косвенная команда, используемая из командной строки для запуска программ, эквивалент BASIC RUN
.
01.01 Demand A as "TYPE A NUMBER". 01.05 To step 1.01. 01.10 To part 1.
Делать
[ редактировать ]Do
похоже на To
, но переходит к подпрограмме. Как и в случае с To
, ты можешь Do part
или Do step
. Если предусмотрен шаг, эта единственная строка запускается, а затем возвращается к оператору после Do
. Если указана часть, выполнение начинается с первой строки блока и продолжается до тех пор, пока не будет достигнут конец блока или Done
встречается утверждение.
01.15 Do step 7.24. 01.16 Do part 8.
Do
имел одну специальную короткую форму для поиска, которая очень распространена в большинстве программ. Для этого использовались times
модификатор вместо обычного for
, в случае простых циклов. Таким образом, следующие строки эквивалентны: [42]
Do part 1 for i=1(1)5. Do part 1, 5 times.
JOSS поддерживает указатель на исполняемую в данный момент строку, Do
изменился бы. Однако он включал специальную команду do в скобках, которую можно было использовать в прямом режиме для проверки определенных разделов кода без изменения основного указателя. Например, если программа остановилась из-за ошибки и неясно, какой раздел вызвал проблему, можно протестировать конкретную подпрограмму с помощью: [46]
(Do part 2.)
Сделанный
[ редактировать ]The Done
команда возвращается из вызова подпрограммы. Поскольку подпрограммы возвращаются автоматически при достижении конца детали, Done
требуется только для досрочного возврата и часто используется с условным выражением. Эквивалент BASIC RETURN
.
*Routine to ask the user for a positive value and repeat until it gets one 01.10 Demand X as "Enter a positive value greater than zero". 01.20 Done if X>0. 01.30 To step 1.1
Останавливаться
[ редактировать ]The Stop
Команда завершает выполнение программы и возвращает управление среде редактирования. Эквивалент BASIC END
или STOP
, хотя Бейсик STOP
предназначен для того, чтобы позволить CONT
начать выполнение в том же месте — функция, которая не имеет прямого эквивалента в системе JOSS, ориентированной на рабочее пространство.
01.10 Type X. 01.20 Stop.
Идти
[ редактировать ]Доступно только в прямом режиме, Go
эквивалентен BASIC RUN
и CONT
, в зависимости от того, остановлена ли программа в настоящий момент из-за ошибки или Stop
встречающаяся команда. [47]
Отмена
[ редактировать ]Еще одна команда только для прямого режима, Cancel
используется, когда программа остановилась из-за ошибки и пользователь хочет сбросить программу, что он и делает, очищая счетчик программ . А Go
забрал бы в последнем месте, но выдал бы Cancel
делает Go
начните снова сверху. [48] Если текущая точка останова возникла из-за скобки (Do.)
, можно выполнить отмену в скобках, (Cancel.)
, чтобы остановить только это подвыполнение и разрешить Go
продолжить с последней строки без скобок. [46]
Математика
[ редактировать ]JOSS хранит все числа в формате с плавающей запятой по основанию 10. [49]
JOSS содержал шесть математических операторов: [49]
+
для добавления-
для вычитания·
для умножения ( межпунктовая точка , а не точка)/
для разделения*
для экспонентов|...|
для абсолютного значения, с выражением посередине
Математические выражения могут использовать () и [] взаимозаменяемо в совпадающих парах для установления приоритета. Например:
1.30 Set 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)
возвращает 22026fp()
- Дробная часть, возвращает 0,4658.dp()
- Цифровая часть, возвращает 2,20264658.ep()
- Показательная часть, возвращает 4, расположение десятичной дроби.
логическое значение
[ редактировать ]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.
Файлы можно удалить с помощью Discard
. [51]
Пример программы
[ редактировать ]1.1 Demand p,q. 1.2 Stop if q<0 or r(q,2)=0. 1.3 Set a=1. 1.4 Do part 2 while q>1 and a≠0. 1.5 Type a in form 3. 1.6 Stop. 2.1 Do part 20. 2.1 Do part 11 if p<0. 2.2 Do part 12 if p≥q. 2.3 Do part 13 if p=0. 2.4 Done if a=0. 2.5 Set p=p/4 while r(p,4)=0. 2.6 Do part 14 if r(p,2)=0. 2.7 Do part 20. 2.8 Set a=-a if r(p,4)=r(q,4)=3. 2.9 Set s=p, p=q, q=s. 2.95 Do part 20. 11.1 Set a=-a if r(q,4)=3. 11.2 Set p=|p|. 11.3 Do part 20. 12.1 Set p=r(p,q). 12.2 Do part 20. 13.1 Set a=0, p=1, q=1. 14.1 Set a=-a if r(q,8)=3 or r(q,8)=5. 14.2 Set p=p/2. 20.1 Type p, q in form 1 if a=1. 20.2 Type p, q in form 2 if a=-1. Form 1: " L(%.0f,%.0f) =" Form 2: " -L(%.0f,%.0f) =" Form 3: " %.0f\n"
Обратите внимание, что это не оригинальный образец, а образец современного симулятора. Есть некоторые синтаксические отличия от исходного языка JOSS.
Примечания
[ редактировать ]Ссылки
[ редактировать ]Цитаты
[ редактировать ]- ^ Jump up to: а б с д Брайан 1966 , с. 2.
- ^ Jump up to: а б с Маркс 1971 , с. 1.
- ^ Норберг, Артур (10 июля 1989 г.). «Интервью с Китом Анкафером» (PDF) (Интервью). п. 7.
- ^ Посуда 2008 , с. 62.
- ^ Маркс 1971 , с. iii.
- ^ Шоу 1965 , с. 3.
- ^ Jump up to: а б Маркс 1971 , с. 2.
- ^ Смит, JW (август 1967 г.). JOSS: процедуры центральной обработки (справочное руководство пользователя). РЭНД. 5270 ринггитов PR . Проверено 16 апреля 2012 г.
- ^ Шоу 1965 , с. 14.
- ^ Jump up to: а б Маркс 1971 , с. 3.
- ^ Jump up to: а б с Маркс 1971 , с. 9.
- ^ Маркс 1971 , с. 4.
- ^ «ДЖОННИАК» . Музей истории компьютеров .
- ^ Посуда 2008 , с. 15, 109.
- ^ Маркс 1971 , с. 5.
- ^ Jump up to: а б с д Брайан 1966 , с. 3.
- ^ Маркс 1971 , с. 32.
- ^ Маркс 1971 , с. 10.
- ^ Маркс 1971 , с. 15.
- ^ Маркс 1971 , с. 14.
- ^ Брайан 1966 , с. 12.
- ^ Маркс 1971 , с. 47.
- ^ Посуда 2008 , с. 65.
- ^ Посуда 2008 , с. 16.
- ^ Брайан 1966 , с. 4.
- ^ Jump up to: а б Брайан 1966 , с. 5.
- ^ Брайан 1966 , с. 6.
- ^ Gimble 1967 , p. v.
- ^ Гимбл 1967 , с. VI.
- ^ Jump up to: а б Гимбл 1967 , с. 65.
- ^ Маркс 1971 , с. 42.
- ^ Jump up to: а б Гимбл 1967 , с. 70.
- ^ Jump up to: а б с Гимбл 1967 , с. 77.
- ^ Гимбл 1967 , с. 24, 69.
- ^ Jump up to: а б с Гимбл 1967 , с. 75.
- ^ Маркс 1971 , с. 41.
- ^ Гимбл 1967 , с. 25.
- ^ Гимбл 1967 , с. 68.
- ^ Гимбл 1967 , с. 74-75.
- ^ Гимбл 1967 , с. 45.
- ^ Гимбл 1967 , с. 63.
- ^ Jump up to: а б с д и Гимбл 1967 , с. 66.
- ^ Гимбл 1967 , с. 7.
- ^ Jump up to: а б Гимбл 1967 , с. 49.
- ^ Гимбл 1967 , с. 67.
- ^ Jump up to: а б Гимбл 1967 , с. 58.
- ^ Гимбл 1967 , с. 57.
- ^ Гимбл 1967 , с. 53.
- ^ Jump up to: а б Гимбл 1967 , с. 69.
- ^ Гимбл 1967 , с. 59.
- ^ Jump up to: а б Гимбл 1967 , с. 61.
Источники
[ редактировать ]- Гимбл, EP (май 1967 г.). JOSS: Решение проблем для инженеров (PDF) (Технический отчет). Рэнд.
- Брайан, GE (4 ноября 1966 г.). JOSS: Введение в внедрение системы . Радиационная лаборатория Лоуренса, Беркли, Калифорния: DECUS. п. 19 . Проверено 19 июня 2019 г.
- Маркс, Ширли (декабрь 1971 г.). Годы JOSS: Размышления об эксперименте (PDF) (Технический отчет). Рэнд . Проверено 19 июня 2019 г.
- Саммет, Жан (1969). Языки программирования: история и основы . Прентис-Холл . стр. 217–226. ISBN 0-13-729988-5 .
- Шоу, Дж. К. (май 1965 г.). JOSS: Опыт работы с экспериментальной вычислительной службой для пользователей удаленных консолей пишущих машинок (PDF) (Технический отчет). Рэнд.
- Уэр, Уиллис, изд. (2008). РЭНД и информационная эволюция (PDF) . Рэнд. ISBN 9780833048165 .
Дальнейшее чтение
[ редактировать ]- «Справочное руководство для пользователей JOSS», Р. Л. Кларк, отчет R-1555/9, RAND Corp (январь 1975 г.)
- Интервью по устной истории с Китом Ункафером , Институт Чарльза Бэббиджа , Университет Миннесоты. Обзор проектов в RAND Corporation , когда Кейт Ункафер был нанят в 1950–начале 1970-х годов, таких как JOHNNIAC , JOSS, жизнеспособная национальная сеть и некоторые работы, связанные с ARPANET .
Внешние ссылки
[ редактировать ]- JOSS: Онлайн-вычислительная система (VPRI-0270) , фильм, демонстрирующий JOSS, снятый RAND в марте 1964 года, когда он еще работал на JOHNNIAC.