Введение

TECO (/t//iː//k//oʊ/), сокращение от Text Editor & Corrector, — это одновременно текстовый редактор, ориентированный на символы, и язык программирования, разработанный в 1962 году для компьютеров Digital Equipment Corporation, и впоследствии ставший доступным на ПК и Unix. Дэн Мерфи разработал TECO, будучи студентом Массачусетского технологического института (MIT). По словам Мерфи, первоначальная аббревиатура была Tape Editor and Corrector, поскольку "пробитая бумажная лента была единственным носителем для хранения исходного кода программ на нашем PDP 1. Не было жестких дисков, дискет, магнитных лент (магтепа) или сетей". TECO является прямым предком Emacs, который изначально был реализован в виде макросов TECO.

Описание

TECO — это не только редактор, но и интерпретируемый язык программирования для обработки текста. Произвольные программы (называемые «макросами») для поиска и изменения текста наделяют его огромной мощью. Однако, в отличие от регулярных выражений, этот язык был императивным, хотя в некоторых версиях в поиске строк присутствовал оператор «или». У TECO фактически нет синтаксиса: каждый символ в программе — это императивная команда, направляемая в соответствующую подпрограмму. Эта подпрограмма может считывать дополнительные символы из потока программы (создавая эффект строковых аргументов), изменять положение «счетчика команд» (создавая эффект управляющих структур) или помещать значения в стек (создавая эффект вложенных скобок). Но ничто не препятствует таким операциям, как переход в середину комментария, поскольку синтаксиса и разбора нет. TECO не учитывает регистр и пробелы (за исключением табуляции, которая является командой вставки). В сатирическом эссе о компьютерном программировании «Настоящие программисты не используют Паскаль» предполагалось, что распространенной забавой для поклонников TECO было вводить свое имя в виде последовательности команд, а затем пытаться понять, что произойдет. В том же эссе, описывающем TECO, была придумана аббревиатура YAFIYGI, означающая «Вы просили – получили» (в отличие от WYSIWYG).

Влияние

Редактор EMACS, изначально разработанный Дэвидом А. Муном и Гаем Л. Стилом-младшим, был реализован в TECO как набор макросов редактора (Editor MACroS). TECO получил более широкое распространение после реализации для PDP-6 компании Digital Equipment Corporation (DEC), разработанной в MIT Project MAC в 1964 году. Эта реализация непрерывно отображала редактируемый текст на экране ЭЛТ и использовалась как интерактивный онлайн-редактор. Более поздние версии TECO могли работать в полноэкранном режиме на различных видеотерминалах DEC RS-232, таких как VT52 или VT100. TECO был доступен для нескольких операционных систем и компьютеров, включая PDP-1, PDP-8 (под OS/8), Incompatible Time-Sharing System (ITS) на PDP-6 и PDP-10, а также TOPS-10 и TOPS-20 на PDP-10. Версия TECO поставлялась со всеми операционными системами DEC; версия для RT11 могла управлять графическим дисплеем GT40, а версия для RSTS/E была реализована как многопользовательская система времени выполнения и могла использоваться в качестве полноценной операционной среды пользователя, из которой пользователю не требовалось выходить. Макрос VTEDIT (Video Terminal Editor) для TECO часто использовался в системах RSTS/E и VAX с терминалами, поддерживающими прямое управление курсором (например, VT52 и VT100), для обеспечения полноэкранного визуального редактора, функционально схожего с Emacs, разрабатывавшимся одновременно. TECO продолжает поставляться с OpenVMS компанией VSI и вызывается командой EDIT/TECO. Наследник версии TECO, распространяемой DEC для PDP-10, до сих пор доступен в Интернете, а также существуют несколько частичных реализаций для среды MS-DOS/Microsoft Windows.

История

TECO был первоначально разработан в MIT примерно в 1963 году Дэниелом Л. Мерфи для использования на двух компьютерах PDP 1, принадлежащих разным отделам, оба размещенные в здании 26 MIT. На этих машинах обычный процесс разработки включал использование флексорайтера Friden для подготовки исходного кода в автономном режиме на непрерывной полосе перфорированной бумажной ленты. Программисты крупных мейнфреймов IBM обычно пробивали исходный код на карточках, используя ключевые пробивные устройства, которые печатали удобочитаемые символы в виде точек вдоль верхней части каждой карты одновременно с пробивкой каждого машиночитаемого символа. Таким образом, программисты IBM могли читать, вставлять, удалять и перемещать строки кода, физически манипулируя картами в колоде. Перфорированная бумажная лента не предлагала таких удобств, что привело к развитию онлайн-редактирования. Ранний редактор для PDP 1 был назван "Дорогая пишущая машинка". Написанный Стивеном Д. Пайнером, это был самый примитивный из возможных редакторов, ориентированных на строки, не имеющий даже функций поиска и замены. Его название было выбрано как ироничный намек на более ранний, довольно громоздкий редактор под названием "Колоссальная пишущая машинка". Даже в те дни онлайн-редактирование могло сэкономить время в цикле отладки. Другая программа, написанная хакерами PDP 1, была Expensive Desk Calculator, в аналогичном духе. Первоначальной целью TECO было более эффективное использование PDP 1. Как указано в руководстве, вместо того чтобы выполнять редактирование "затратно", сидя за консолью, можно было просто изучить ошибочный текст и подготовить "коррекционную ленту", описывающую операции редактирования, которые должны быть выполнены над текстом. Затем исходную ленту и коррекционную ленту можно было эффективно подавать в PDP 1 через его высокоскоростной (200 символов в секунду) считыватель. Запустив TECO, он немедленно выдавал отредактированную ленту с высокой скоростью (60 символов в секунду). Затем можно было сразу загрузить и запустить ассемблер, не тратя времени на онлайн-редактирование. Сложные операции поиска в TECO были обусловлены тем, что распечатки Flexowriter в автономном режиме не имели нумерации строк. Поэтому места редактирования необходимо было указывать по контексту, а не по номеру строки. Различные циклические и условные конструкции (которые сделали TECO полным по Тьюрингу) были включены для обеспечения достаточной описательной силы для коррекционной ленты. Лаконичный синтаксис минимизировал количество нажатий клавиш, необходимых для подготовки коррекционной ленты. Коррекционная лента была программой и требовала отладки, как и любая другая программа. Скоро стали очевидны недостатки даже самого простого глобального поиска и замены. На практике редактирование в TECO выполнялось онлайн, как и в Expensive Typewriter (хотя TECO, безусловно, был более полнофункциональным редактором, чем Expensive Typewriter, поэтому редактирование было намного эффективнее). Оригинальная версия PDP 1 не имела дисплея. Единственным способом наблюдения за состоянием текста в процессе редактирования было ввод команд, которые заставляли текст (или его части) печататься на консольной пишущей машинке. К 1964 году специальная версия TECO (TECO 6) была реализована на PDP 6 в MIT. Эта версия поддерживала визуальное редактирование, используя экранный дисплей, который показывал содержимое буфера редактирования в реальном времени, обновляя его по мере изменения. Среди создателей TECO 6 были Ричард Гринблатт и Стюарт Нельсон. В MIT разработка TECO продолжалась осенью 1971 года. Карл Миккельсен реализовал режим редактирования в реальном времени, основанный на командах графической консоли TECO 6, но работающий с недавно установленными текстовыми дисплеями Datapoint 3300 CRT. Однако реализация буфера TECO была крайне неэффективной для обработки функций вставки или удаления одного символа — редактирование потребляло 100% ресурсов PDP 10. При поддержке Ричарда Гринблатта летом 1972 года Карл перереализовал хранилище буфера TECO и преобразовал макросы в нативный код PDP 10. Поскольку вход в режим реального времени осуществлялся с помощью набора символа запятой, этот режим был известен как режим управления R. В то же время Ричи Ликнайцкий добавил макросы времени ввода, которые работали по мере чтения командной строки, а не при ее выполнении. Макросы времени чтения сделали вспомогательные буферы текста TECO, называемые Q-регистрами, более полезными. Карл расширил пространство имен Q-регистра. С макросами времени чтения, большим пространством имен Q-регистра и эффективными операциями с буфером были созданы условия для привязки каждой клавиши к макросу. Эти редакционные макросы со временем превратились в Emacs. Реализация VMS имеет долгую историю — она началась с TECO 8, реализованного на ассемблере PDP 8. Этот код был переведен на ассемблер PDP 11 для создания TECO 11. TECO 11 использовался в ранних версиях VAX/VMS в режиме совместимости с PDP 11. Затем он был переведен с ассемблера PDP 11 на ассемблер VAX для создания TECO32. TECO32 затем был преобразован с помощью утилит двоичной трансляции VEST и AEST, чтобы сделать его совместимым с OpenVMS на Alpha и Itanium соответственно.

Команда OS/8 MUNG

Команда OS/8 CCL MUNG вызывала TECO для чтения и выполнения указанной макроопределения TE TECO. Дополнительные параметры командной строки обеспечивали большую гибкость.

Как инструмент программиста

Во время и сразу после эпохи перфокарт существовали исходные программы, которые изначально были созданы для работы с перфокартами. Комментарии часто представляли собой последовательность строк, содержащих одиночные звездочки на полях и сплошные строки звездочек вверху и внизу. После переноса карт в онлайн-режим, выравнивание звездочек на полях требовало значительных усилий. На помощь пришел TECO.