Участник:Nikita22007/JOSS: различия между версиями
Создано переводом страницы «JOSS» |
Создано переводом страницы «JOSS» |
||
Строка 149: | Строка 149: | ||
JOSS used a somewhat obscure format to define the limits of the loop. The equivalent code in JOSS would be: |
JOSS used a somewhat obscure format to define the limits of the loop. The equivalent code in JOSS would be: |
||
I=1(2)5 |
|||
Обратите внимание, что этот код не включает for. Это потому, что в JOSS диапазоны являются |
Обратите внимание, что этот код не включает for. Это потому, что в JOSS диапазоны являются отдельными конструкциями языка, а не частью цикла, как в BASIC. Диапазоны могут быть определены и использованы во многих контекстах вне циклов. Например, вот условное выражение, вычисляющее факториал параметра x: {{Sfn|Gimble|1967|p=75}} |
||
Let f(x)=[x=0:1 ; fp(x)=0:prod(i=1(1)x:i)]. |
|||
В этом примере есть два основных предложения, разделенных точкой с запятой. Первое (левое) утверждает, что если параметр x равен 0, условие должно немедленно вернуть 1. Если это предложение не подходит (условие ложно), вычисление переходит ко второму тесту (правому). Он проверяет, равна ли дробная часть x нулю (т. е. является ли это число целым), и если да, то вызывает функцию {{Code|prod}} для умножения диапазона значений. Параметр, принимаемый в данном примере функцией {{Code|prod}}, также является предложением, но в данном случае он заменяется итератором цикла, который выполняется от 1 до x с шагом 1. Если проверка истинна (а она истинна для всех значений цикла), оно возвращает индекс i. Это приводит к отправке ряда значений в {{Code|prod}} от 1 до x. {{Sfn|Gimble|1967|p=75}} |
|||
Комбинация этих функций позволяет писать сложные функции с помощью нескольких команд. Такого рода функциональность стала распространенной только в гораздо более современных языках, которые обычно используют [[Итератор|итераторы]] или функцию [[Map (программирование)|map]] для получения тех же результатов. Способность JOSS объединять решения и циклы в компактной форме отсутствовала в других языках той эпохи, включая такие ответвления, как FOCAL. |
|||
=== Команды === |
|||
==== Set ==== |
|||
Команда {{Code|Set}} присваивает результаты выражения указанной переменной. Эквивалент {{Code|LET}} в BASIC. |
|||
01.30 Set p=3.14156. |
|||
01.60 Set i=l*(r/100)*t. |
|||
{{Code|Set}} was optional when used in direct mode, where one could type {{Code|x{{=}}5.}} without the Set command. This was not allowed in indirect mode, in contrast to BASIC.{{Sfn|Gimble|1967|p=68}} |
|||
<nowiki> |
<nowiki> |
||
[[Категория:Языки программирования, появившиеся в 1963 году]] |
[[Категория:Языки программирования, появившиеся в 1963 году]] |
Версия от 20:24, 17 ноября 2022
Paradigms | non-structured, procedural, imperative |
---|---|
Family | JOSS |
Designed by | Cliff Shaw |
Developer | RAND Corporation |
First appeared | 1963 |
Scope | Lexical |
Implementation language | assembly language |
Platform | JOHNNIAC, PDP-6 |
Influenced | |
TELCOMP, CAL, FOCAL, MUMPS |
JOSS (акроним для JOHNNIAC Open Shop System ) [a] был одним из первых интерактивных языков программирования с разделением времени . Он стал пионером во многих функциях, которые стали обычными в языках с 1960-х по 1980-е годы, включая использование номеров строк в качестве как адресов для редактирования инструкций и целевых объектов для ветвей, операторов, основанных на логических условиях, и встроенный редактор исходного кода, который может выполнять инструкции в прямом (direct) или немедленном (immediate) режиме, названном диалоговым пользовательским интерфейсом.
Первоначально JOSS был реализован на машине JOHNNIAC в RAND Corporation и введен в эксплуатацию в 1963 году. Он оказался очень популярным, и пользователи быстро перегрузили машину. К 1964 году потребовалась замена на машину с более высокой производительностью. JOHNNIAC был снят с производства в 1966 году и заменен PDP-6, который в конечном итоге вырос до поддержки сотен компьютерных терминалов на базе IBM Selectric . Терминалы использовали зеленые чернила для пользовательского ввода и черные для ответа компьютера. Любая команда, которая не была распознана, вызывала ответ. Eh?
или SORRY
.
Система оказала огромное влияние, породив множество портов и ответвлений. Некоторые остались похожими на оригинал, например TELCOMP и STRINGCOMP, CAL, CITRAN, ISIS, PIL/I, JEAN ( серия ICT 1900 ), Algebraic Interpretive Dialogue (AID, на PDP-10 ); в то время как другие, такие как FOCAL и MUMPS, развивались в специфических направлениях. Он также очень похож на интерпретаторы BASIC, использовавшиеся в микрокомпьютерах 1980-х годов, отличаясь в основном деталями синтаксиса .
История
Первоначальная идея
В 1959 году Уиллис Уэр написал меморандум RAND на тему вычислений, в котором заявил, что будущие компьютеры будут иметь «множество персональных станций ввода-вывода, чтобы многие люди могли взаимодействовать с машиной одновременно». [2] Меморандум вызвал интерес у ВВС США, основных спонсоров Rand, и в 1960 году они сформировали проект «Информационный процессор» для изучения этой концепции, которая вскоре стала известна как разделение времени . Проект не был конкретно связан с разделением времени, но был направлен на улучшение взаимодействия человека и компьютера в целом. Идея в то время заключалась в том, что постоянное взаимодействие между пользователем и компьютером в манере туда-сюда (запрос-ответ) сделает такое взаимодействие более естественным. [2] Как позже выразился директор JOSS Кит Ункафер :
There were two perceptions that I think drove the experiment. One was, from at least 1950, when I joined Rand, there was always a focus in the computer science part of Rand toward smooth user interaction. It was just built into us. We learned it from Gunning. ... all we thought about. The other was, seeing the mathematicians struggling with Marchant calculators, not being able to use JOHNNIAC in its raw form. It was just too hard. They had to learn to be programmers. It was just a frustrating experience for them. We wanted something that would look to them as being a natural way of thinking about an aid to the solution of their problems without very much training, and without any perception of becoming a programmer, because that would have kept them away.[3]
Официальное предложение разработать то, что стало JOSS на компьютере JOHNNIAC, было принято в марте 1961 года.[2]
JOSS-1
JOSS был почти полностью реализован Дж. Клиффордом Шоу, математиком, работавшим в растущем вычислительном подразделении Rand. Он был написан на символическом языке ассемблера под названием EasyFox (E и F в тогдашнем фонетическом алфавите вооруженных сил США), также разработанном Шоу. [4]
Система JOSS была впервые официально запущена в мае 1963 года и поддерживала пять консолей, одну в машинном зале и еще четыре в офисах по всему зданию. [5] Ранние консоли были основаны на передающей пишущей машинке IBM Model 868, поскольку Selectric еще не был представлен на рынке, когда началась разработка. [6] Первое расписание было опубликовано 17 июня, когда JOSS работал по три часа с 9:00 до 12:00 каждый день. [7] В январе 1964 года было объявлено, что он полностью функционирует на восьми терминалах. [1] Окончательная версия была развернута в январе 1965 года. [8]
К этому времени JOHNNIAC было уже более десяти лет, и его ламповая логика никогда не отличалась высокой надежностью. Даже когда она работала хорошо, система стала настолько популярной, что быстро была перегружена. Пользователи были в восторге, один заявил:
People adjust their lives to fit around JOSS… No use coming into RAND before 10:00 am when JOSS arrives, in fact noon or after 5:00 pm is a better time, JOSS is less busy. When JOSS starts typing answers, the titillating pleasure is equaled only by the ensuing anguish when JOSS breaks off into jibberish[sic] or goes away commending your code to oblivion. We can hardly live with JOSS, but we can’t live without it.[9]
Другой выразился более кратко:
It's better than beer — we're hooked.[1]
Переход на JOSS-2
В мае 1964 года было принято решение найти новую машину для замены JOHNNIAC и полностью посвятить ее работе с расширенной версией JOSS. Машина также должна была поддерживать новые терминалы, изготовленные по спецификациям Rand, и должна быть доставлена к 31 октября 1965 [7] .
Всего на новую машину было получено девять предложений. Digital Equipment Corporation (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 оригинал cnfl известен как JOSS-1. [14]
Использование JOSS-2
К концу 1966 года новая система JOSS-2 была полностью функциональной и передана в пользование JOSS 24/7. Новая машина предлагала примерно в 30 раз большую скорость вычислений, в пять раз больше места для хранения данных на одного пользователя и множество новых функций в самом языке.[15][1] Новая платформа в конечном счете могла бы поддерживать одновременное использование до 100 терминалов.[16] Владельцем системы оставались Военно-воздушные силы, а Рэнд и другие выступали в качестве консультантов. Процессорное время оплачивалось внешним пользователям по ставке около 1 доллара в минуту, хотя это было только во время фактического выполнения, время, затрачиваемое на набор текста и печать, было бесплатным.[17]
К 1970 году в Rand и на различных объектах ВВС по всей стране насчитывалось от 500 до 600 пользователей. [18] Многие из них были случайными пользователями, для чего и была предназначена система. Для их поддержки нестандартные терминалы были оснащены специальными «штекерами JOSS», чтобы их можно было возить из офиса в офис и подключать к нестандартным розеткам. Вокруг Рэнда было установлено двести розеток, а шасси терминала было спроектировано так, чтобы оно было достаточно узким, чтобы проходить через двери, оставляя при этом место для кофе с одной стороны. [19] Переключение выключателя питания на терминале водило к его подключению в новом месте. [16]
Индивидуальные терминалы были разработаны для JOSS, поскольку инженеры считали, что «телекоммуникационные функции Model 33 являются загадкой для неподготовленного человека» и будут слишком запутанными для изучения случайными пользователями. [20] На практике механизмы на базе Selectric оказались слишком хрупкими для постоянного использования, и их часто ремонтировали в полевых условиях сотрудники IBM. В 1970 году треть терминалов была полностью перестроена, а вывод из компьютера замедлился для повышения надежности. К этому времени ВВС решили использовать вместо этого модель 35, поскольку она была легко доступна и стоила намного дешевле. [21] [11]
Пользователи были полны энтузиазма, и чтобы удовлетворить их, Рэнд начал публиковать Информационный бюллетень JOSS под редакцией Ширли Маркс. В конечном итоге с ноября 1967 г. по июнь 1971 г. было опубликовано 44 выпуска. [22]
JOSS-3
В начале 1970-х программисты одного из заводов IBM на западном побережье построили JOSS-3 для IBM 370/158 под управлением OS/360 . Существует мало информации об этой системе, за исключением того, что именно на этой машине JOSS окончательно ушел в отставку. [23] Согласно примечанию в историческом обзоре, Rand не решалась разрешать 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 бит/с, чтобы соответствовать максимальной скорости 15 символов в секунду механизма Selectric. Коды shift-in и shift-out использовались для перемещения ленты с зеленого на черный и обратно. Эти коды также детектировались системой связи и изменяли состояние индикаторов на передней панели, чтобы указать, кто контролирует терминал в данный момент: пользователь или компьютер. [27]
Язык
Прямой и косвенный режим
JOSS представила идею единого редактора командной строки, который работал и как интерактивный язык, и как программный редактор. Команды, которые были введены без номера строки, выполнялись немедленно, в том, что JOSS назвал «прямым режимом». Если же перед одной строкой стоял номер строки, вместо выполнения она копировалась в область хранения кода программы, которую JOSS назвал «косвенным режимом» (indirect mode). Если номер был уникальным, новая строка добавлялась в программу. Если номер был неуникальным, существующая строка с таким номером заменялась или удалялась из программы, если существующий номер строки вводился без кода, следующего за ним. [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. Для возврата из подпрограммы используется Done
(эквивалент RETURN
в других языках программирования). Нет необходимости использовать Done
в конце подпрограммы.
Каждая строка должна начинаться с ключевого слова команды, следующего за номером строки. Не существует понятия команды по умолчанию, как в случае с BASIC с его необязательным оператором LET
. В одной строке можно разместить несколько операторов, разделенных двоеточием или точкой с запятой. Каждая строка должна заканчиваться точкой.
Циклы и условия
JOSS использует суффиксальную нотацию для обозначения условных операторов, «сделайте это действие, если это условие верно», в отличие от большинства языков, которые помещают условие впереди (префиксная нотация), «если это условие верно, сделайте это действие». Подобно BASIC, но в отличие от 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.
Обычно, если кто-то вызывает это способом, подобным RUN
в BASIC:
Do part 1.
Это выведет:
0
Однако можно изменить это поведение, добавив к вызову конструкцию цикла:
Полученный вывод будет:
1 2 3 4 5
Это позволяет создавать формулы в программах без необходимости помещать их в циклы. Зацикливание, при желании, может быть обеспечено пользователем при запуске программы.
Выражения и предложения
Уникальной особенностью JOSS была обработка логических выражений. Большинство компьютерных языков предлагают какой-либо способ формирования математического выражения, состоящего из нескольких частей, например, Set x=(1+2)·3.
который устанавливает переменную x в значение 9. JOSS расширил эту концепцию, четко определив понятие «предложение» ("proposition") — выражение, которое возвращает логическое значение, истинное или ложное, вместо числового. В основном они встречались в операторах If
, как в приведенных выше примерах, но логическое значение также можно было хранить в переменной напрямую [33] или можно было преобразовать значение true в 1, а значение false в 0 с помощью функции tv
(значение истинности). [34]
В дополнение к предложениям в JOSS также было понятие «условных выражений». Они состояли из строк утверждений вместе с кодом, который выполнялся бы, если бы это утверждение было верным. Это позволяло записывать многоступенчатые деревья решений в одну строку. Они служат цели, аналогичной тернарному оператору в современных языках, таких как C или Java, где они используются для возврата значения из компактной структуры, реализующей if-then-else . JOSS допускает любое количество условных выражений, а не только три, так что это скорее компактный оператор switch, чем компактный 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 used a somewhat obscure format to define the limits of the loop. The equivalent code in JOSS would be:
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. Если проверка истинна (а она истинна для всех значений цикла), оно возвращает индекс i. Это приводит к отправке ряда значений в prod
от 1 до x. [35]
Комбинация этих функций позволяет писать сложные функции с помощью нескольких команд. Такого рода функциональность стала распространенной только в гораздо более современных языках, которые обычно используют итераторы или функцию map для получения тех же результатов. Способность JOSS объединять решения и циклы в компактной форме отсутствовала в других языках той эпохи, включая такие ответвления, как FOCAL.
Команды
Set
Команда Set
присваивает результаты выражения указанной переменной. Эквивалент LET
в BASIC.
01.30 Set p=3.14156. 01.60 Set i=l*(r/100)*t.
Set
was optional when used in direct mode, where one could type x=5.
without the Set command. This was not allowed in indirect mode, in contrast to BASIC.[38]
[[Категория:Языки программирования, появившиеся в 1963 году]]
[[Категория:Страницы с непроверенными переводами]]
- ↑ 1 2 3 4 Bryan, 1966, p. 2.
- ↑ 1 2 3 Marks, 1971, p. 1.
- ↑ Norberg, Arthur (10 July 1989). "An Interview with Keith Uncapher" (PDF) (Interview). p. 7.
- ↑ Ware, 2008, p. 62.
- ↑ Marks, 1971, p. iii.
- ↑ Shaw, 1965, p. 3.
- ↑ 1 2 Marks, 1971, p. 2.
- ↑ Smith, JW. JOSS: Central Processing Routines. — RAND, August 1967. — ISBN RM 5270 PR.
- ↑ Shaw, 1965, p. 14.
- ↑ 1 2 Marks, 1971, p. 3.
- ↑ 1 2 3 Marks, 1971, p. 9.
- ↑ Marks, 1971, p. 4.
- ↑ JOHNNIAC . Computer History Museum.
- ↑ Ware, 2008, p. 15, 109.
- ↑ Marks, 1971, p. 5.
- ↑ 1 2 3 4 Bryan, 1966, p. 3.
- ↑ Marks, 1971, p. 32.
- ↑ Marks, 1971, p. 10.
- ↑ Marks, 1971, p. 15.
- ↑ Marks, 1971, p. 14.
- ↑ Bryan, 1966, p. 12.
- ↑ Marks, 1971, p. 47.
- ↑ Ware, 2008, p. 65.
- ↑ Ware, 2008, p. 16.
- ↑ Bryan, 1966, p. 4.
- ↑ 1 2 Bryan, 1966, p. 5.
- ↑ Bryan, 1966, p. 6.
- ↑ Gimble, 1967, p. v.
- ↑ Gimble, 1967, p. vi.
- ↑ Gimble, 1967, p. 65.
- ↑ Marks, 1971, p. 42.
- ↑ Gimble, 1967, p. 70.
- ↑ Gimble, 1967, p. 77.
- ↑ Gimble, 1967, p. 24, 69.
- ↑ 1 2 3 Gimble, 1967, p. 75.
- ↑ Marks, 1971, p. 41.
- ↑ Gimble, 1967, p. 25.
- ↑ Gimble, 1967, p. 68.
Ошибка в сносках?: Для существующих тегов <ref>
группы «lower-alpha» не найдено соответствующего тега <references group="lower-alpha"/>