Text Editor and Corrector

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
TECO
Тип

Текстовый редактор

Автор

Dan Murphy

Первый выпуск

1962/63

Последняя версия

TECO (МФА: [ˈtiːkoʊ]; первоначально акроним для англ. Tape Editor and COrrector, позже Text Editor and COrrector) — текстовый редактор, первоначально разработанный в Массачусетском технологическом институте в 1960-x, после чего мог быть модифицирован «кем попало»[1]. TECO был прямым предком Emacs, который изначально был реализован как макрос для TECO.[2]

Краткое описание[править | править исходный текст]

TECO был не только текстовым редактором, но ещё и интерпретируемым языком программирования для манипуляции текстами. Различные программы (называемые макросами) для поиска и модификации текста делали редактор довольно мощным. В отличие от регулярных выражений, язык программирования был императивным (хотя некоторые версии и имели оператор OR для поиска подстрок).

Язык TECO на самом деле не имел строгого синтаксиса, каждый символ рассматривался как императивная команда, выполняющая определённое действие. Это действие может быть чтением последующих символов из потока программы (дающее эффект «строкового аргумента»), сменой положения «счётчика команд» (дающая эффект применения управляющих операторов) или помещением значений в стек значений (дающее эффект вложенных скобок). Но ничто не предотвращает переход в середину комментария, так как у языка нет строгого синтаксиса и нет грамматического разбора.

В классическом эссе о программировании «Настоящие программисты не используют Паскаль», говорится о том, что распростренённой игрой для приверженцев редактора TECO было ввести своё имя в качестве последовательности команд, и посмотреть, что произойдёт. В том же эссе был впервые упомянут акроним YAFIYGI, означающий «You Asked For It You Got It» (англ. «ты попросил об этом — ты это получил») и ставший антитезисом WYSIWYG («What You See Is What You Get», «что видишь, то и получишь»).

Ныне известный редактор Emacs был изначально реализован на TECO. Поздние версии Emacs, сначала Multics Emacs, а затем GNU Emacs, были реализованы на языках Lisp и C соответственно. TECO стал известным, начиная с реализации для компьютера-мейнфрейма PDP-6 фирмы Digital Equipment Corporation, разработанной в МТИ в 1964 году. Эта реализация непрерывно отображала текст на ЭЛТ-дисплее, и использовалась в качестве интерактивного редактора (хотя это не было изначально предполагаемым способом его использования).

TECO был доступен для нескольких операционных систем и компьютеров, включая PDP-1, Incompatible Timesharing System (ITS) на PDP-6 и мейнфрейме PDP-10, и ОС TOPS-10 и TOPS-20 на компьютере PDP-10. Версия редактора TECO поставлялась со всеми операционными системами фирмы DEC. Версия, поставлявшаяся с RT-11, могла управлять графическим дисплеем GT40, хотя версия, поставлявшаяся с RSTS/E, была реализована как многопользовательская система времени выполнения и могла быть использована в качестве полноценной рабочей среды, так что фактически пользователь никогда не выходил из среды TECO.

Компания Hewlett-Packard, купив Compaq (которая купила Digital Equipment Corporation), начала поставлять TECO со своей операционной системой OpenVMS.[3] Потомок версии, которую DEC распространяла для PDP-10, до сих пор доступен в Интернете, наряду с несколькими частичными реализациями для окружения MS-DOS/Microsoft Windows.

История[править | править исходный текст]

TECO был первоначально разработан в Массачусетском технологическом институте около 1963 года Дениелом Мёрфи для использования на двух компьютерах PDP-1, принадлежащего различным подразделениям, оба которых были размещены в 26-ом корпусе МТИ. На этих вычислительных машинах в процесс разработки включался Friden Flexowriter, на котором заранее готовился исходный код программы на отрезке перфорированной бумажной ленты. Программисты больших мейнфреймов IBM обычно записывали исходный код на перфокарты, используя ключевой перфоратор, на котором данные не только пробивались на карте в машиночитаемом виде, но также и печатались на матричном принтере вверху каждой карточки в обычном виде, понятном человеку. Таким образом, программисты IBM могли читать, вставлять, удалять и перемещать строки кода, физически перемещая перфокарты в колоде. При использовании перфоленты такой возможности уже не было, и это привело к необходимости редактирования в реальном времени.

Одна из первых версий редактора для PDP-1 была названа «Expensive Typewriter». Написанная Стивеном Пинером, она была элементарным строчно-ориентированным редактором, в котором отсутствовали даже функции поиска и замены текста. Его название было выбрано в качестве пародии на название более раннего редактора под названием «Colossal Typewriter». Даже в те дни редактирование в реальном времени могло сохранить немало времени на отладку. Другой программой, написанной активными пользователями PDP-1, был «Expensive Desk Calculator», названный в похожем стиле.

Примеры кода[править | править исходный текст]

Пример кода Пояснение
ER file $ открыть файл для чтения
[q]q поместить в стек … достать из стека регистр Q (операция может быть произведена с числом, текстом или кодом)
< code > итерация цикла; существуют коды для next, break, continue, и т. д.
n"X then-code | else-code условный оператор (X — проверяемый тип)

Примеры программ[править | править исходный текст]

Пример 1[править | править исходный текст]

!START! j 0aua               ! перейти к началу, загрузить первый символ в регистр A !
!CONT! l 0aub                ! загрузить первый символ следующей строки в регистр B !
qa-qb"g xa k -l ga 1uz '     ! если A>B, переключить строку и установить флаг в регистр Z !
qbua                         ! загрузить B в A !
l z-."g -l @o/CONT/ '        ! вернуться к началу цикла, если в буфере есть хотя бы одна строка !
qz"g 0uz @o/START/ '         ! повторить, если в ходе предыдущей итерации было сделано переключение !

Пример 2[править | править исходный текст]

Это пример интерпретатора языка Brainfuck, написанный на TECO. Он работает путём выполнения текущего буфера как программы на языке Brainfuck, и демонстрирует возможности редактора.

 @^UB#@S/{^EQQ,/#@^UC#@S/,^EQQ}/@-1S/{/#@^UR#.U1ZJQZ\^SC.,.+-^SXQ-^SDQ1J#@^U9/[]-+<>.,/<@:-FD/^N^EG9/;>J30000<0@I/
 />ZJZUL30000J0U10U20U30U60U7@^U4/[]/@^U5#<@:S/^EG4/U7Q7;-AU3(Q3-91)"=%1|Q1"=.U6ZJ@i/{/Q2\@i/,/Q6\@i/}/Q6J0;'-1%1'
 >#<@:S/[/UT.U210^T13^TQT;QT"NM5Q2J'>0UP30000J.US.UI<(0A-43)"=QPJ0AUTDQT+1@I//QIJ@O/end/'(0A-45)"=QPJ0AUTDQT-1@I//
 QIJ@O/end/'(0A-60)"=QP-1UP@O/end/'(0A-62)"=QP+1UP@O/end/'(0A-46)"=-.+QPA^T(-.+QPA-10)"=13^T'@O/end/'(0A-44)"=^TUT
 8^TQPJDQT@I//QIJ@O/end/'(0A-91)"=-.+QPA"=QI+1UZQLJMRMB\-1J.UI'@O/end/'(0A-93)"=-.+QPA"NQI+1UZQLJMRMC\-1J.UI'@O/en
 d/'!end!QI+1UI(.-Z)"=.=@^a/END/^c^c'C>

Примечания[править | править исходный текст]