ОПЫТ СОЗДАНИЯ ТРОИЧНЫХ ЦИФРОВЫХ МАШИН

Брусенцов Н.П., Жоголев Е.А., Маслов С.П., Х.Рамиль Альварес 
МГУ,   Москва,   Россия
Известно, что троичная арифметика обладает существенными преимуществами в сравнении с двоичной, используемой в современных компьютерах. Дональд Кнут в связи с этим выразил надежду, что в один прекрасный день замена "флип-флопа" на "флип-флэп-флоп" все-таки произойдет [1]. Эта замена, в реальность которой при теперешнем засилии двоичной техники трудно поверить, упростит и усовершенствует не только компьютерную арифметику, но и информатику в целом, поскольку весьма актуальное, но лишь неявно подразумеваемое в двузначной логике третье значение (Аристотель называл его snmbzbhkoV) станет явным и непосредственно манипулируемым. Трехзначная логика лучше соответствует природе вещей и неформальному мышлению человека [2]. К сожалению, современные исследования по многозначным (недвоичным) логикам носят, как правило, формальный характер и не связаны с запросами практики.
Примечательным исключением служит опыт создания троичных компьютеров "Сетунь" и "Сетунь 70" в Московском университете им. М.В.Ломоносова [3, 4, 7], убедительно подтвердивший практические преимущества троичной цифровой техники.
Разработка малой цифровой машины "Сетунь" (Сетунь - это небольшая речка, впадающая в Москва-реку неподалеку от территории МГУ на Ленинских горах) была предпринята по инициативе академика С.Л.Соболева в 1956г. Предполагалось создать малогабаритную, недорогую, непритязательную в обслуживании и простую в использовании машину для учебных заведений, исследовательских лабораторий, конструкторских бюро, а также для управления технологическими процессорами. С этой целью в составе вычислительного центра университета была образована группа молодых специалистов (4 с высшим и 5 со средним техническим образованием). Был организован совместный семинар инженеров и программистов, в работе которого постоянно участвовали С.Л.Соболев, К.А.Семендяев, М.Р.Шура-Бура, И.С.Березин. На этом семинаре исследовались проблемы оптимизации архитектуры и технической реализации компьютеров, обсуждались варианты решений по создаваемой машине.
Ввиду неудовлетворительной надежности типичных в то время цифровых элементов с электронными лампами и недоступности транзисторов решили разработать быстродействующие магнитные элементы с использованием миниатюрных ферритовых тороидов и полупроводниковых диодов. Построенные по принципу управляемых трансформаторов импульсов тока эти элементы оказались эффективным средством реализации пороговой логики, в частности, ее трехзначной версии с положительными и отрицательными весами [5], которая обеспечивала большее по сравнению с двоичной быстродействие, существенную экономию оборудования и лучшую надежность. Поэтому стали разрабатывать троичный компьютер.
Соответственно характеру элементов “Сетунь” является машиной последовательного действия, но с блоком быстрого умножения, благодаря которому достигнуто быстродействие на уровне параллельных машин того времени. Небольшая (3 страницы по 54 слова) ферритовая RAM-память, связанная постраничным обменом с основной памятью на магнитном барабане, выполняет в сущности функцию cash-памяти.
Архитектура машины - одноадресная с одним индекс-регистром, содержимое которого в зависимости от значения (+, 0, -) трита модификации адресной части команды прибавляется к адресу либо вычитается из него. В наборе команд машины всего лишь 24 команды, включая нормализацию мантиссы числа при вычислениях с плавающим масштабом, сдвиг и комбинированные операции умножения со сложением. Три зарезервированные кода операций остались неиспользованными - в пополнении набора команд на протяжении 15-ти лет разнообразных применений машины не возникло необходимости.
Простота, экономность и изящность архитектуры - непосредственное и весьма важное следствие троичности, а точнее, представления данных и команд троичным симметричным (сбалансированным) кодом, т.е. кодом с цифрами 0, +1, -1. В этом коде в противоположность двоичным кодам не приходится различать "числа без знака" и "числа со знаком", благодаря чему вдвое сокращается необходимое число условных команд и несопоставимо облегчается их использование; арифметические операции допускают свободное варьирование длины операндов и выполнение с операндами неравной длины; идеальное округление чисел достигается просто отсечением соответствующей хвостовой части, т.е. отсечение совпадает с округлением, обеспечивая наилучшее приближение округляемого округленным. 
Значительность отмеченных преимуществ троичности недвусмысленно подтвердил опыт как создания машины и разработки ее программного оснащения (системы программирования), так и последующее практическое использование ее в различных областях. Несмотря на малочисленность и неопытность разработчиков, а также на то, что троичный компьютер создавался впервые, "на голом месте", опытный образец машины был готов уже в декабре 1958г., т.е. через два года после начала работы, причем практически без отладки смог выполнять имевшиеся к тому времени программы. К началу 1960г. машина обладала достаточным программным оснащением, чтобы предъявить ее на государственные испытания, которые она успешно выдержала в апреле 1960г.
"Сетунь" показала необыкновенную для того времени безотказность и устойчивость функционирования в широком диапазоне температур при значительных изменениях напряжения электрической сети, была признана несложной в изготовлении и техническом обслуживании, пригодной в широком спектре применений. Комиссия рекомендовала ее для серийного производства.
К сожалению, в администрации, ответственной за производство вычислительной техники, еще до проведения испытаний возобладало негативное отношение к этому непредусмотренному и необычному "плоду университетской фантазии", и в дальнейшем вместо того чтобы поддержать новшество и извлечь из него выгоду, постоянно предпринимались попытки задавить "гадкого утенка". 
Решающим доводом было то, что “от двоичных и десятичных голова болит, а они еще с троичной лезут”. И практически завершенная разработка без ознакомления с ее результатами была занесена в черный список прекращаемых под предлогом нераспыления средств. Непреклонность С.Л.Соболева все-таки победила бюрократов, однако переубедить их было невозможно.
При наличии значительного числа заявок, в том числе зарубежных, и недефицитности комплектации выпускали по 10-15 машин в год, причем ни одной не поставили на экспорт и воспрепятствовали планировавшемуся в Чехословакии крупносерийному производству. В 1965 г. выпуск машин "Сетунь" был прекращен при неудовлетворенном спросе, и в производство была запущена двоичная машина той же мощности, но в 2,5 раза более дорогая.
Всего, включая опытные образцы, было произведено 50 машин "Сетунь", из которых 30 были поставлены в университеты и технические вузы, а остальные - в промышленные и исследовательские организации. Географически машины были разбросаны по всей стране от Калининграда до Якутска и от Ашхабада до Новосибирска. Несмотря на практически полное отсутствие сервиса в подавляющем большинстве они были успешно освоены и нашли эффективные применения.
Троичный компьютер оказался исключительно благоприятным для пользователей. Простота и экономность программирования в машинном коде (ассемблер разрабатывать не стали) позволили в сжатые сроки создать серию интерпретаторов, в том числе польской инверсной (постфиксной) записи, позволявших эффективно и надежно программировать самые различные применения от научно-технических расчетов и автоматизированной обработки экспериментальных данных до управления производственными процессами и программированного обучения. 
На основе положительного опыта машины "Сетунь" в 1966-1968 гг. была разработана и исчерпывающе определена на алголоподобном языке [6] архитектура стекового троичного компьютера, который был введен в эксплуатацию в 1970 г. и назван "Сетунь 70" [7]. В этой машине особенности троичности воплощены с большим пониманием и полнотой: установлен троичный формат для кодирования алфавитных символов (аналог двоичного байта) - трайт из шести тритов (~9.5 битов); пополнен набор операций трехзначной логики и "троичных" команд управления ходом программы; увеличены возможности выполнения операций с числами различной длины: трайт, два и три трайта, длина результата до шести трайтов.
В архитектуре "Сетунь 70" нет традиционного понятия машинной команды как слова, содержащего код операций и адреса операндов. Программа представляет собой последовательность трайтов-операций и трайтов-адресов, выполнимые сочетания которых можно рассматривать как виртуальные команды. Однако программисту думать о командах не приходится он конструирует постфиксные (в польской инверсной записи - ПОЛИЗ) выражения непосредственно из операндов и операций подобно тому как это делается в алгебре. 
"Сетунь 70" представляет собой двухстековую машину: стек операндов является как бы развитием регистра-аккумулятора одноадресной машины, стек адресов возврата составляет основу автомата, управляющего вложенностью подпрограмм. В дальнейшем потребовалась [8] незначительная модификация этой схемы, чтобы превратить "Сетунь 70" в машину предложенного Э.Дейкстрой структурированного программирования [9]. Были введены операционные трайты позволяющие конструировать команды: 
JSR A - вызова подпрограммы-процедуры A; 
BRT A1 A2 A3 - альтернативного вызова одной из трех процедур в зависимости от знака текущего значения вершины стека операндов;
DOW A - циклического вызова процедуры A, пока текущее значение вершины стека не равно нулю.
Достигнутая таким путем адекватная реализация идей Дейкстры, названная процедурным программированием, полностью оправдала его надежды радикально усовершенствовать программистское дело (чего, как известно, "structured revolution" так и не достигла [10]) - трудоемкость создания, обслуживания и модификации программ на "процедурной машине" уменьшилась в 3-5 раз при гарантируемой их надежности.
Однако "Сетунь 70" оказалась последним "ternac"-ом, поскольку работы на этом направлении были прекращены. Опытный образец машины составил основу автоматизированной системы обучения "Наставник" [11]. Процедурное программирование перевоплотилось в Диалоговую систему структурированного программирования (ДССП), которая в основе своей эмулирует архитектуру "Сетуни 70", реализуя достоинства процедурного структурирования на двоичных машинах [12]. Результатом дальнейшего развития ДССП явился Развиваемый интеллектуальный инструментарий информационных систем (РИИИС) и возникшее на его основе высокоуровневое конструктное программирование [13].
Вопреки распространенному мнению, будто главное преимущество троичного кода перед двоичным состоит в его экономности, которая обусловлена тем , что 3 ближе чем 2 к основанию натурального логарифма e=2,718... , следует сказать, что эта экономия не превышает 5%, т.е. практически не имеет значения. Вместе с тем, может быть оправдана и существенная неэкономность кодирования трита парой битов ради реализации действительных преимуществ троичного кода. Эти преимущества обусловлены тем, что 3 - минимальное основание системы счисления с естественным представлением чисел со знаком.
В двоичной системе естественно представимы неотрицательные либо неположительные числа, а поскольку необходимы и те, и другие, то приходится прибегать к дополнительному или обратному коду или вводить особый бит знака числа (“прямой код”). По сравнению с троичным кодом, позволяющим ввести знак (+, 0, -) на уровне элемента-трита, благодаря чему радикально упрощаются все дальнейшие построения, двоичные конструкции в принципе неполноценны, за исключением, разве только двоично-троичной, представляющей триты парами битов.
Дело в том, что числа (похоже, как и все в мире) тройственны по природе. Ведь положительное не есть неотрицательное (вопреки тому, как это встречается в англоязычной литературе) и отрицательное не есть неположительное, потому что имеется три фундаментальных класса чисел - положительные, отрицательные и нуль. Это трехзначная (не хрисиппо-булева) логика: положительное есть антиотрицательное, а отрицательное - антиположительное, комплементарно же положительному отрицательное или нуль и т.д. Это логика знаков числа, и хотя их два (плюс, минус), значений все-таки три: +, 0, -.
Опыт машин “Сетунь” и “Сетунь 70” убедительно показал принципиальные достоинства троичной цифровой техники перед двоичной. Дефектов последней, представляющих собой удовлетворительно неразрешимые проблемы (кодирование чисел со знаком, округление, операций с операндами разной длины), в троичной просто нет. Незначительное усложнение на уровне элементов (тритов) воздается решающим упрощением на всех последующих уровнях: комбинационные сумматоры, а также устройства умножения и деления обрабатывают числа с учетом их знаков, счетчики и стеки реверсивны - все естественно, просто для понимания и эффективно. То же относительно архитектуры машины в целом и программного оснащения. А кроме того, огромное техническое преимущество - сокращение практически вдвое количества межэлементных и междублочных соединений, поскольку трехзначный сигнал равноценен двум несовпадающим двухзначным.

1.	Knuth D.E. The art of computer programming. Vol.2. Seminumerical algorithms. -  Addison-Wesley, 1969.
2.	Брусенцов Н.П. Начала информатики. - М.: "Новое тысячелетие", 1994.
3.	Брусенцов Н.П. Вычислительная машина "Сетунь" Московского государственного университета // Новые разработки в области вычислительной математики и вычислительной техники. - Киев, 1960. С.226-234.
4.	Малая цифровая вычислительная машина "Сетунь"/ Н.П.Брусенцов, С.П.Маслов, В.П.Розин, А.М.Тишулина. - М.: Изд-во Моск. ун-та, 1965.
5.	Брусенцов Н.П. Пороговая реализация трехзначной логики электромагнитными средствами // Вычислительная техника и вопросы кибернетики. Вып.9. - М.: Изд-во Моск. ун-та, 1972. С.3-35.
6.	Брусенцов Н.П., Жоголев Е.А. Структура и алгоритм функционирования малой вычислительной машины // Вычислительная техника и вопросы кибернетики. Вып.8. - Л.: Изд-во Ленингр. ун-та, 1971. С.34-51.
7.	Брусенцов Н.П., Жоголев Е.А., Маслов С.П. Общая характеристика малой цифровой машины "Сетунь 70" // Вычислительная техника и вопросы кибернетики. Вып.10. - Л.: Изд-во Ленингр. ун-та, 1974. С.3-20.
8.	Брусенцов Н.П., Рамиль Альварес Х. Структурированное программирование на малой цифровой машине // Вычислительная техника и вопросы кибернетики. Вып.15. - М.: Изд-во Моск. ун-та, 1978. С.3-8.
9.	Dijkstra E.W. Notes on structured programming. EWD 249 - Technical University, Eindhowen, Netherland, 1969.
10.	Yourdon E. The second structured revolution // "Software World", 1981, v.12, n.3, pp.10-15.
11.	Брусенцов Н.П., Маслов С.П., Рамиль Альварес Х. Микрокомпьютерная система обучения "Наставник". - М.: "Наука", 1990.
12.	 Диалоговая система структурированного программирования ДССП-80 / Н.П.Брусенцов, С.П.Маслов, Х.Рамиль Альварес, С.А.Сидоров // Диалоговые микрокомпьютерные системы. - М.: Изд-во Моск. ун-та, 1986. С.3-21.
13.	Концептуальная характеристика РИИИС-процессора / Н.П.Брусенцов, С.П.Маслов, Х.Рамиль Альварес, С.А.Сидоров // Интегрированная система обучения, конструирования программ и разработки дидактических материалов (учебно-методическое пособие). - М.: Изд-во ф-та ВМиК МГУ, 1996.