JOSS (акроним для JOHNNIAC Open Shop System) — один из первых интерактивныхИнтерактивное программирование — это метод разработки, позволяющий изменять код и сразу видеть результаты его работы во время выполнения, не перезапуская программу. Это обеспечивает "диалог" с системой, ускоряет отладку и часто используется в интерактивных средах. см. языков программирования с разделением времени. В нём впервые появились такие возможности, которые впоследствии стали обычными в языках с 1960-х по 1980-е годы, включая: использование номеров строк в качестве адресов для редактирования инструкций и целевых объектов для ветвей; операторы, основанные на логических условиях; встроенный редактор исходного кода, который может выполнять инструкции в прямом (direct) или немедленном (immediate) режиме, названном диалоговым пользовательским интерфейсом.

Первоначально JOSS был реализован на машине в RAND Corporation и введён в эксплуатацию в 1963 году. Он оказался очень популярным, и пользователи быстро перегрузили машину. К 1964 году потребовалась замена на машину с более высокой производительностью. JOHNNIAC был снят с производства в 1966 году и заменён , который впоследствии вырос до поддержки сотен компьютерных терминалов на базе пишущей машинки IBM Selectric; эти терминалы использовали зелёные чернила для пользовательского ввода и черные для ответа компьютера. Любая команда, которая не была распознана, вызывала ответ: или .

Система оказала огромное влияние, породив множество портов и ответвлений. Некоторые остались похожими на оригинал, например и , , CITRAN, ISIS, PIL/I, для мейнфреймов от , Algebraic Interpretive Dialogue (AID, для PDP-10); в то время как другие, такие как FOCAL и MUMPS, развивались в специфических направлениях. Он также очень похож на интерпретаторы Basic, использовавшиеся в микрокомпьютерах 1980-х годов, отличаясь в основном деталями синтаксиса.

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

Официальное предложение разработать то, что впоследствии стало JOSS на компьютере JOHNNIAC, было принято в марте 1961 года.

JOSS-1 JOSS был почти полностью реализован Клиффордом Шоу (Cliff Shaw), математиком, работавшим в растущем подразделении вычислений в RAND. Он был написан на символическом языке ассемблера под названием EasyFox (E и F в тогдашнем фонетическом алфавите вооруженных сил США), также разработанном Шоу.

Система JOSS была впервые официально запущена в мае 1963 года и поддерживала пять консолей: одну в машинном зале и ещё четыре в офисах по всему зданию. Ранние консоли были основаны на передающей пишущей машинке IBM Model 868, поскольку на момент начала разработки — Selectric ещё не был представлен на рынке. Первое расписание было опубликовано 17 июня. В то время JOSS работал по три часа с 9:00 до 12:00 ежедневно. В январе 1964 года было объявлено, что он полностью функционирует на восьми терминалах. Окончательная версия была развернута в январе 1965 года.

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

Переход на JOSS-2 В мае 1964 года было принято решение найти новую машину на замену JOHNNIAC и полностью выделить её для работы с расширенной версией JOSS. Машина также должна была поддерживать новые терминалы, изготовленные по спецификациям RAND, и должна быть доставлена к 31 октября 1965.

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

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

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

Использование JOSS-2 К концу 1966 года новая система — JOSS-2 — стала полностью функциональной и была полностью посвящена выполнению JOSS-2 24/7. Новая платформа имела примерно в 30 раз большую скорость вычислений, в пять раз больше места для хранения данных на одного пользователя и множество новых функций в самом языке. Согласно подсчётам, новая платформа могла бы поддерживать одновременное использование до 100 терминалов. Владельцем системы оставались Военно-воздушные силы, а Rand и другие выступали в качестве консультантов. Процессорное время оплачивалось внешними пользователями по цене около 1 долл. за минуту. Учитывалось только время фактического выполнения программы; время, затрачиваемое на набор текста и печать, было бесплатным.

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

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

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

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

Язык Прямой и косвенный режим JOSS представила идею единого редактора командной строки, который работал и как интерактивный язык, и как программный редактор. Команды, которые были введены без номера строки, выполнялись немедленно, в том, что JOSS назвал «прямым режимом». Если же перед командой стоял номер строки, вместо выполнения она копировалась в область хранения кода программы, которую JOSS назвал «косвенным режимом» (indirect mode). Если номер был уникальным, новая строка добавлялась в программу. Если номер был неуникальным, существующая строка с таким номером заменялась или удалялась из программы, если вводился только существующий номер строки, без команды.

В отличие от большинства разновидностей BASIC, JOSS сохранял в файлах весь пользовательский ввод, а не только программный код. JOSS при загрузке программы, по сути, снова вводил строки. Это означало, что программные файлы могли содержать как операторы программы, так и инструкции прямого (direct) режима. Например, было обычным делом видеть программы, в которых перечислялись строки операторов, а затем файл заканчивался на для немедленного запуска программы, как только она завершит загрузку. Были некоторые функции, которые можно было использовать только в прямом режиме, такие как и , которые вводились без номеров строк, но все же выполнялись при загрузке программы.

Инструкции прямого и косвенного режимов можно было свободно смешивать в рабочей области. Это позволяло вставлять комментарии в исходный код, добавляя строки прямого режима, начинающиеся с или помещая этот символ в конец строки кода, а затем добавляя комментарий после него. Пустые строки также игнорировались, что позволяло разбивать программу для ясности. type "Hello" *Выведет "Hello" 1.1 type "Hello" *запишет команду по адресу 1.1 1.1 type "World" *перезапишет команду по адресу 1.1 *удаление команды по адресу 1.1: 1.1

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

Часть номера строки слева от точки называется страницей (page) или частью (part), а часть справа называется строкой (line). Таким образом, номер строки относится к странице 10, строке 12. Ветви могут быть нацелены либо на страницу, либо на строку внутри страницы. В более позднем формате, объединённые вместе страница и строка называются шагом.

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