Rights-editor-revoke
- 1 year ago
- 0
- 0
TECO ( МФА: [ˈtiːkoʊ] ; первоначально акроним для англ. Tape Editor and COrrector , позже - Text Editor and COrrector ) — текстовый редактор , первоначально разработанный в Массачусетском технологическом институте в 1960-x, после чего мог быть модифицирован «кем угодно» . TECO был прямым предком Emacs , который изначально был реализован как макрос для TECO.
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 стал известным, начиная с реализации для компьютера-мейнфрейма фирмы Digital Equipment Corporation , разработанной в МТИ в 1964 году . Эта реализация непрерывно отображала текст на ЭЛТ-дисплее и использовалась в качестве интерактивного редактора (хотя это не было изначально предполагавшимся способом его использования).
TECO был доступен для нескольких операционных систем и компьютеров, включая PDP-1 , (ITS) на и мейнфрейме PDP-10 , и ОС TOPS-10 и TOPS-20 на компьютере PDP-10 . Версия редактора TECO поставлялась со всеми операционными системами фирмы DEC. Версия, поставлявшаяся с RT-11 , могла управлять графическим дисплеем GT40, хотя версия, поставлявшаяся с RSTS/E , была реализована как многопользовательская система времени выполнения и могла быть использована в качестве полноценной рабочей среды, так что фактически пользователь никогда не выходил из среды TECO.
Компания Hewlett-Packard , купив Compaq (которая ранее купила Digital Equipment Corporation ), начала поставлять TECO со своей операционной системой OpenVMS . Потомок версии, которую 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 — проверяемый тип) |
!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/ ' ! повторить, если в ходе предыдущей итерации было сделано переключение !
Это пример интерпретатора языка 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>