Text Editor and Corrector
TECO (МФА: [ˈtiːkoʊ]; первоначально акроним для англ. Tape Editor and COrrector, позже - Text Editor and COrrector) — текстовый редактор, первоначально разработанный в Массачусетском технологическом институте в 1960-x, после чего мог быть модифицирован «кем угодно»[1]. TECO был прямым предком Emacs, который изначально был реализован как макрос для TECO.[2]
TECO | |
---|---|
Тип | Текстовый редактор |
Автор | Dan Murphy |
Разработчик | Дэниэл Мерфи[вд] |
Первый выпуск | 1962/63 |
Аппаратные платформы | PDP-1, PDP-6[вд] и PDP-10 |
Краткое описание
править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>
Примечания
править- ↑ The Glorious Horror of TECO (англ.) (30 ноября 2010). Архивировано 10 июля 2013 года.
- ↑ The GNU Emacs FAQ. Where does the name “Emacs” come from? (англ.). Архивировано 2 сентября 2013 года.
- ↑ HP OpenVMS system documentation. Архивная копия от 13 июня 2011 на Wayback Machine Как вызвать TECO.
Ссылки
правитьВ другом языковом разделе есть более полная статья TECO (англ.). |