Файлы средств литературного («грамотного») программирования для скачивания
О системе литературного программирования WEB
Собственно, о проделанной русификации tangle и weave
Коды завершения работы tangle и weave
Отличия данной версии rutangle.exe от разработанного Д. Е. Кнутом tangle
Таблица. Транслитерация имён в rutangle
Литературное программирование и ассемблер
Настройка оболочки для работы с web-файлами
Некоторые заметки об использовании инструментальных средств литературного программирования
Как писать программы на паскале по-русски
Дополнение. Программа Tie (объединение нескольких файлов изменений)
Ссылки на видеолекции других авторов
Плоды моих трудов. Программы для работы в командной строке среды Windows. Все текстовые документы (web, pas, tex) в кодировке ДОС.
rutangle.exe | — | программа для получения файлов для freepascal |
ruweave.exe | — | программа для получения файлов для TeX |
rwebmac.tex | — | файл макросов для TeX |
rwebmacpdf.tex | — | файл макросов для TeX для создания файлов с закладками и гиперссылками в формате pdf. (Используются команды \special программы dvipdfm) |
web_exam.web | — | учебный пример web-файла. Эта программа ни чего не делает, просто показывает основные средства литературного программирования, и как их использовать |
web_exam.pdf | — | это итог перевода учебного файла в читаемый документ. Его целесообразно читать совместно с web_exam.web |
web_exam.pas | — | это итог преобразования .web → .pas. Этот файл вообще для чтения не приспособлен и приложен здесь только для того, чтобы показать, во что превращается web-файл после обработки tangle |
webdescr.pdf | — | краткое руководство по командам языка WEB на русском языке. Со временем предполагается сделать более подробное описание. |
Программы rutangle и ruweave работают под Windows и обрабатывают тексты в кодировке CP866 (ДОС-кодировка). Если вам требуется что-то иное, можете написать в гостевой.
Работы Д. Е. Кнута на английском языке можно найти в любом архиве CTAN. Исходные тексты программ weave.web, tangle.web, а также руководство webman.tex по использованию средств грамотного программирования лежат в каталоге systems/knuth/dist/web или здесь. Файл с набором макросов для обработки TeX-файлов, полученных weave, называется webmac.tex его можно скачать из каталога systems/knuth/dist/lib.
В печатном виде можно найти всё это на сайте стенфордского университета (отчёт № STAN-CS-83-980).
Исполняемые файлы dostp. Вообще говоря, в MikTeX 2.9 входят программы tangle и weave. Входят, но почему-то не работают: выдают ошибку «Read operation failed» (может, автор сборки в более поздних версиях это исправит). Так что, если вам хочется поупражняться с первозданной системой, то стоит обратиться к её воплощению в DOS, кое находится в каталоге CTAN systems/msdos/dostp22/exe, а именно в файле exeweb.zip. Как раз этими программами я и пользовался для сборки русифицированных tangle и weave (исполняемыми файлами, но не исходниками, исходными для меня были только tangle.web и weave.web Д. Кнута). К слову сказать, в dostp сделан перенос под DOS многих программ, связанных с TeX и METAFONT.
Название «литературное программирование» является калькой с английского «literate programming» и иногда переводится как «грамотное программирование». Оно позволяет при разработке программного кода использовать как подход «снизу вверх», так и подход «сверху вниз», а также сочетать их.
Суть литературного программирования состоит в том, что программа описывается отдельными кусочками, следующими в произвольном порядке. Все кусочки программы должны размещаться в одном файле с расширением WEB, из которого при помощи программ TANGLE и WEAVE можно получить программу на языке ПАСКАЛЬ и описание самой программы на языке TeX. Web-файл состоит из разделов, каждый из которых делится на три части: словесное описание на языке TeX, определения макросов, и, собственно, кусочек программы. Любая из этих частей в разделе может отсутствовать.
Кусочки программы могут быть именованными и безымянными. Безымянные кусочки (начинаются с @p) вставляются в паскалевский файл последовательно, в том порядке, в котором они идут в web-файле. А именованные кусочки вставляются только там, где на них есть ссылки. (Имена кусочков указываются между знаками @<…@>.)
Каждый именованный кусочек может вставляться в нескольких местах программы в том числе и в других именованных кусочках. Именованный кусочек может описываться в нескольких разделах, тогда все эти описания последовательно соединяются.
Каждый раздел начинается с символа @ за которым следует пробел или звёздочка. В последнем случае название раздела (предложение до первой точки) программа WEAVE помещает в оглавление. WEAVE также создаёт перечни идентификаторов (имён переменных и функций) с указанием разделов, где они используются, и именованных кусочков с указанием разделов, куда они включаются, и разделов, где они определяются. Кроме того, в конце каждого именованного кусочка помещаются номера разделов, где он определён, и разделов, где он используется.
Для того, чтобы можно было легко вносить изменения в программу, не перерабатывая исходный web-файл, программы TANGLE и WEAVE используют файл изменений (с расширением chg). В этом файле между командами @x и @y указываются искомые строки, а между @y и @z строки, на которые нужно их заменить. WEAVE, собирая документ, помечает номера изменённых разделов звёздочкой.
Сами программы TANGLE и WEAVE описаны на языке WEB, их можно найти там же, где и исходники TeX и METAFONT.
Версии программ TANGLE и WEAVE под ДОС на turbo pascal находятся по адресу ftp://ftp.dante.de/pub/tex/systems/msdos/dostp22/. Недостатком turbo pascal являлось ограничение на размер исходного текста программы 65 кб, что не позволяло компилировать TeX, поэтому данная версия TANGLE разбивает программу на модули (unit).
Разработанные Д. Кнутом методика и средства литературного программирования позволяют очень быстро как писать собственные программы, так и разбираться в чужих и изменять их. Последнее обусловлено тем, что можно сосредоточиться на поиске и исправлении только нужных частей кода. Механизм файлов изменений позволяет не портить исходный текст чужой программы, благодаря чему, легко отменить ошибочные изменения.
Для русскоязычных пользователей эти средства литературного программирования имеют очень существенный недостаток: они не поддерживают русский алфавит, как и вообще символы с кодами 127 и больше. Более того, эти коды интенсивно используются во внутренних структурах данных tangle и weave. Т. е. нельзя ни сделать описание на русском языке, ни именованный кусочек назвать по-русски, ни задать русское сообщение.
Любопытство толкнуло меня сделать русификацию этих программ (пока ещё довольно сырую). Данные воплощения программ разрабатывались исходно под freepascal, у которого нет таких жёстких ограничений на длину программы, и потому на unit-ы программы не разбивают. Для трансляции TeX-документа выполнен перевод стилевого файла, автоматически вставляемого первой строчкой TeX-файла. Сразу заметим, что с LaTeX weave не дружит и для трансляции надо использовать plainTeX. Для русскоязычных файлов нужно использовать cyrtex.
Предполагается расширить возможности программ, в частности, обеспечить возможность транслировать ассемблерный код. (Это уже осуществлено в rutangle, но для реализации в ruweave требуется доработка кода, осуществляющего лексический разбор программы.)
Уже сейчас можно использовать русские имена переменных и функций. Когда rutangle обрабатывает текст, он заменяет русские буквы в именах переменных латиницей. Строки и комментарии (правда, C-подобные только в rutangle), также корректно обрабатываются этими программами. Так что теперь, вполне возможно литературное программирование по-русски. В целом, русификация рассчитана на работу с freepascal.
Следует отметить, что программы для грамотного программирования существуют не только для ПАСКАЛя, но и для многих других языков (ftp://ftp.dante.de/pub/tex/web/). Например, для языка Си есть система cweb с программами ctangle и cweave, скачать которые можно из архивов ctan. В сети можно найти руководство по cweb на русском языке. (Дональд Э. Кнут и Сильвио Леви. Система структурного документирования).
Исходные программы называются tangle (для получения pas-файла из web) и weave (для получения tex-файла из web). Для обработки tex-файла требуется файл макросов webmac.tex.
Русифицированные версии имеют имена, соответственно, rutangle, ruweave и rwebmac.tex. (Хотелось использовать rtangle и rweave, но эти имена оказались уже заняты.) Данные версии программ предназначены для работы в консольном режиме Windows. Входные (WEB) и выходные (PAS и TeX) файлы должны иметь кодировку DOS. В обоих этих программах:
Стилевой файл rwebmac.tex адаптирован для работы с русскими шрифтами, и в нём переведены названия элементов указателей. Знаки ≤ ≥ заменены на принятые в России.
Если Вы хотите делать pdf-файлы, то вместо файла rwebmac.tex можно использовать rwebmacpdf.tex, в котором добавлена поддержка гиперссылок для всех номеров разделов, а также сделаны закладки (bookmarks) для разделов со звёздочкой (начинающихся командой @*), содержания и указателя имён модулей.
Коды завершения. После завершения работы программы возвращают операционной системе значение errorlevel, которое можно использовать для пакетной обработки в командных файлах. (Эти значения возвращают русифицированные версии программ tangle и weave)
errorlevel = 0 — программа отработала успешно;
errorlevel = 1 — найдены мелкие синтаксические неточности;
errorlevel = 2 — обнаружены серьёзные ошибки, или задан несуществующий chg-файл;
errorlevel = 3 — произошла фатальная ошибка;
errorlevel = 10 — web-файл не был задан;
errorlevel = 11 — задан не существующий web-файл.
Символы передаются с почти любыми кодами, кроме служебных (перехода на следующую строку, перехода к началу строки, табуляции), которые обрабатываются обычным образом, и знака с десятичным кодом 26, который воспринимается, как конец файла (даже если он встречается в строке с командой @s). (Причина такой трактовки знака с кодом 26 лежит, видимо, в особенностях реализации функции read(f,…) в freepascal. Потом исправлю, хотя это и не мешает.)
При работе rutangle в отличие от ruweave передача русских букв зависит от контекста. В строках (заключённых в "…" и '…'), при дословной передаче части текста программы (текст между символами @=…@>), знаки с кодами выше 128 передаются как есть. В ДОС-кодировке непосредственно в тексте программы они транслитерируются. Транслитерации сравниваются с латинскими именами, и если совпадают, то выдаётся предупреждение.
В rutangle введена поддержка программ на ассемблере. В ruweave её пока нет (а может, и не будет).
//
(двух косых черт) и заканчиваются концом строки.#
. (В исходной версии этот знак считался удобным местом для
разрыва строки в программе, что затрудняло запись строк кодами их символов.)Транслитерация имён производится в соответствии с таблицей
Таблица. Транслитерация имён в rutangle
Буква | Транслитерация | Коды верхнего и нижнего регистров |
Буква | Транслитерация | Коды верхнего и нижнего регистров |
Буква | Транслитерация | Коды верхнего и нижнего регистров | |||
---|---|---|---|---|---|---|---|---|---|---|---|
А | A | 128 | 160 | Б | B | 129 | 161 | В | V | 130 | 162 |
Г | G | 131 | 163 | Д | D | 132 | 164 | Е | JE | 133 | 165 |
Ё | JO | 240 | 241 | Ж | Q* | 134 | 166 | З | Z | 135 | 167 |
И | I | 136 | 168 | Й | J | 137 | 169 | К | K | 138 | 170 |
Л | L | 139 | 171 | М | M | 140 | 172 | Н | N | 141 | 173 |
О | O | 142 | 174 | П | P | 143 | 175 | Р | R | 144 | 224 |
С | S | 145 | 225 | Т | T | 146 | 226 | У | U | 147 | 227 |
Ф | F | 148 | 228 | Х | H | 149 | 229 | Ц | C | 150 | 230 |
Ч | CH*** | 151 | 231 | Ш | W* | 152 | 232 | Щ | X* | 153 | 233 |
Ъ | _** | 154 | 234 | Ы | Y | 155 | 235 | Ь | _** | 156 | 236 |
Э | E | 157 | 237 | Ю | JU | 158 | 238 | Я | JA | 159 | 239 |
* для уплотнения букв.
** знаки Ь и Ъ не различаются в переменных.
*** буквосочетание «ЦХ» вряд ли часто встречается в русских текстах (в Большой Советской Энциклопедии всего пять слов, и те грузинского происхождения).
Литературное программирование и ассемблер. Поскольку автор этих строк неровно дышит к ассемблеру, то в русификации он позаботился о некоей его поддержке, в состав которой входят:
В строках между asm…end, подавляются неявные переносы строк, например, после точки с запятой. В конце каждой строки автоматически вставляется команда разрыва @\. Между числом и Может, не в FreePascal, но в TASM, MASM и т. п. уж точно допустимо использовать идентификаторы, начинающиеся с точки. Поэтому введена возможность
Когда tangle встречает команду @p, он знает, что нужно добавить новый кусочек в конец собираемой программы. При этом он записывает комментарии вида {1:} {:1}, чтобы обозначить Для сборки программ на языке ассемблера в rutangle введена команда @a. Когда ruweave её встречает, он вставляет в и @(…@>. Определения макросов для ассемблера можно давать командой @e. Она аналогична @d за тем исключением, что в конце строки файла вставляется знак конца строки.
Внутри командных скобок asm…end следует использовать ссылки @(…@>, а не @<…@>. Сами командные скобки должны целиком размещаться внутри кусочка @<…@>=.Учтите, что на данный момент поддержка ассемблера осуществляется только rutangle. Программа ruweave эти ассемблерные вставки сейчас не поддерживает.
Не следует в определении макроса (команда @d) оставлять начало ассемблерного блока без парного ему end;
В режиме ассемблера перенос строк происходит по обычным правилам tangle. Не используйте слишком длинные строки в этом режиме.
Для того, чтобы получить dvi-файл, следует воспользоваться пакетом CyrTeX.
Пакет находится в каталоге %texmf%\tex\plain\cyrplain. Первое, что нужно сделать — войти в этот каталог, открыть файл cyrtex.cfg и установить в нём желаемую кодировку. Данная версия русификации web предполагает кодировку ДОС (cp866). Поэтому ищем в конце файла cyrtex.cfg строку \def\definpenc{…} и ставим в фигурных скобках соответствующую кодировку \def\definpenc{cp866}.
Мне нравится использовать русские буквы в командах TeX. Если Вы тоже хотите их использовать, нужно поставить знак % перед строкой \let\ifinpenc\iftrue (закомментировать её) и убрать его (если есть) перед строкой \let\ifinpenc\iffalse. (Если любите пользоваться несколькими кодировками сразу, то можете этого и не делать, на работе стилевого файла это ни как не отразится, но трансляция TeX будет идти немного медленнее.)
В MikTeX по умолчанию CyrTeX не входит в число генерируемых пакетов. Поэтому нужно зайти в меню "Пуск/программы/MikTeX" (или куда вы его поместили), выбрать подпункт "Maintenance (Admin)/Settings (Admin)". И выполнить следующие действия.
В каталоге "%texmf%\miktex\bin" будет создан файл cyrtex.exe, который далее можно будет использовать для трансляции всех русскоязычных файлов на основе plain.tex (в том числе, и создаваемых программой ruweave.exe).
По умолчанию TeX в сообщениях выводит символы из второй половины таблицы ASCII последовательностями вида ^^a0, ^^c4 и т. п., читать которые даже посвящённым непросто. Чтобы текст был читаем, в MikTeX следует использовать опцию «-enable-8bit-chars», т. е.
cyrtex -enable-8bit-chars имя_TeX_файла
Примечание. Опция «-enable-8bit-chars» не принадлежит чистому TeX, разработанному Д. Е. Кнутом. Она будет работать на тех версиях TeX, в которых реализовано расширение encTeX.
Как-то у меня была такая проблема: выдавалось сообщение, что не может быть найден компилятор miktex/bin/tex.EXE. Решил я её просто: переименовал файл miktex/bin/tex.exe в miktex/bin/tex.EXE.
В оболочке DN/2 в файле запуска по расширению можно использовать фрагмент
web,chg[ >1 ~r~tangle if exist !.chg С:\tool\rutangle.exe #.web #.chg if not exist !.chg С:\tool\rutangle.exe #.web >1 rt~a~ngle + freePascal if exist !.chg С:\tool\rutangle.exe #.web #.chg if not exist !.chg С:\tool\rutangle.exe #.web if errorlevel 1 goto ex С:\tool\FPC\bin\i386-win32\fp.exe :ex >1 rwea~v~e if exist !.chg С:\tool\ruweave.exe #.web #.chg if not exist !.chg С:\tool\ruweave.exe #.web nul if errorlevel 3 goto :ex if errorlevel 1 pause echo ___________________________________________________ cyrtex -enable-8bit-chars #.tex pause #.dvi :ex >1 r~w~eave + pdf if exist !.chg С:\tool\ruweave.exe #.web #.chg if not exist !.chg С:\tool\ruweave.exe #.web nul if errorlevel 3 goto :ex if errorlevel 1 pause echo ___________________________________________________ cyrtex -enable-8bit-chars #.tex pause dvipdfm #.dvi #.pdf :ex
Здесь предполагается, что rutangle и ruweave находятся в каталоге С:\tool, а freepascal установлен в каталог С:\tool\FPC.
Чтобы сделать работу с tangle и weave приятнее в DN или NDN, можете включить кусочек в файл раскраски редактора (Найти его можно в меню: настройки/файл раскраски редактора, В NDN это будет настройки/Configuration files…/файл раскраски редактора).
FILES *.chg;*.web; CommentString // CommentString @s Comment (* *),{ } GeneralFLAGS 32 StringFLAGS 76 Keywords1 and,asm,array,begin,case,const,constructor Keywords1 destructor,div,do,downto,else,end,file,for Keywords1 function,if,implementation,in,interface,mod,nil Keywords1 not,object,of,or,procedure,program,record,repeat Keywords1 set,shl,shr,string,then,to,type,unit,until,uses Keywords1 var,while,with,xor,inherited,goto,label,inline Keywords1 packed,exports,library Keywords1 @@,@d,@f,@=,@!,@<,@>,@>=,@ ,@*,@;,@p,@^,@t,@# END
Ниже описаны некоторые «подводные камни», часть из которых заставила меня в своё время поломать голову.
Программы tangle и weave работают в два прохода: на первом производится чтение web-файла и упаковка его во внутренних структурах, а на втором — запись итогового pas- или tex-файла. (Вернее, weave делает три прохода, во время первого он читает файл и сохраняет статистику, об используемых идентификаторах, а на последнем записывает указатели, но здесь это не существенно.) При этом, если возникает ошибка во время первого прохода, то в сообщениях об ошибках указывается номер строки входного файла. Если возникают ошибки во время второго прохода после сообщения о начале записи файла, в строке указывается ошибка в выходном файле.
В исходной версии weave, если weave встречает два упоминания одного и того же раздела в другом разделе, то в tex-файле появится два упоминания одного и того же раздела. В ruweave это пока не исправлено.
Обычно, weave при составлении указателя не учитывает однобуквенные идентификаторы, но если они оказываются после ключевых слов function, var и др., то TeX их в указатель вставляет, что при использовании var может быть неуместно.
Если идентификатор начинается со знака подчёркивания (одного или нескольких знаков), то weave, помещая его в указатель, эти знаки удалит. Связано это с тем, что исходная версия tangle вообще удаляла знаки подчёркивания из своего вывода. К сожалению, не все современные библиотеки можно использовать без знаков подчёркивания. В ruweave это пока не исправлено (rutangle все знаки подчёркивания сохраняет).
Пробелы между числами в pas-файл не выводятся ни в режиме паскаля (так устроен tangle), ни в режиме ассемблера. Для программ на чистом Паскале это несущественно, на ассемблере при использовании макросов может иметь значение.
Если будет задано пустое имя модуля (@<@>), то tangle это как ошибку не воспримет. Зато выдаст массу сообщений о несовместимости имён модулей. Ошибка о несовместимости модулей выводится, когда имя одного модуля полностью совпадает с начальной частью имени другого. Например @<xx@> является префиксом для @<xxy@>, что в tangle не допустимо. Соответственно, @<@> будет префиксом для любого другого названия раздела.
Программы системы WEB позволяют обрабатывать некоторые константные выражения, в том числе с восьмеричными и шестнадцатеричными числами. Однако, поддерживаемые TurboPascal и FreePascal способы записи чисел WEB не воспринимает, например, упрощать записи вида $200+1 или 200h+1 rutangle (а тем более tangle) не будет.
Когда в web-файле используется команда @*, начинающая новый раздел, она воспринимает следующее за ней предложение как название раздела, которое идёт в оглавление. Это предложение обязательно должно заканчиваться точкой, иначе будут выдаваться сообщения об ошибках.
Имена макросов web, объявляемые командой @d, должны состоять из двух и более букв. Однобуквенные имена недопустимы. (К сожалению, определение «@d И==and» rutangle не примет.)
В файле изменений (CHG-файле) команды @x, @y и @z должны быть именно первыми знаками в строке. Если перед ними стоит хотя бы один пробел, tangle и weave их воспринимать не будут. Это можно использовать для временного исключения каких-то изменений.
Ещё один подводный камень, который относится к вёрстке, — это знак &. Он используется в командах TeX \halign и \valign для вёрстки таблиц. Когда требуется знак амперсенда сам по себе, в Plain-TeX его можно набрать так \&. (Также он набирается и в LaTeX). Однако, в стилевом файле webmac.tex эта последовательность переопределена для отображения ключевых слов жирным шрифтом, и для ввода знака & вместо последовательности \& нужно использовать команду \AM.
Все недоработки относятся только к попыткам расширить функциональные возможности средств литературного программирования. Сами программы ruweave.exe и rutangle.exe, а также файл макросов rwebmac.tex правильно обрабатывают web-файлы Д. Е. Кнута, и выдают верный итог.
Лично мне всегда казалось, что писать программы на русском языке было бы гораздо приятнее, а главное — понятнее, чем на английском. Ведь, ключевые слова почти любого языка программирования взяты из английского, и для нас они чужие, мысль всегда о них спотыкается. И лучше заменить их на родную речь, привычную нам с детства. Если Вы разделяете мои взгляды, то этот раздел может показаться Вам любопытным.
Чтобы писать программы по-русски, можно переопределить стандартные ключевые слова, вставив в один из первых разделов программы на WEB следующие строки (здесь они набраны в две колонки).
@d программа==@+program @d использует==@+uses @d функция==@+function @d процедура==@+procedure @d переменные==@+var @d переменная==@+var @d константа==@+const @d константы==@+const @d начало==@+begin @d конец==@+end @d если==@+if @d то==@+then @d иначе==@+else @d массив==@+array @d из==@+of @d при==@+case @d равном==@+of @d равной==@+of @d пока==@+while @d повторяй==@+repeat @d пока_не==@+until @d для==@+for @d от==@+for @d до==@+to @d уменьшать_до==@+downto @d вниз_до==downto @d делай==@+do @d метка==@+label @d метки==@+label @d ув==inc @d ум==dec @d иди==goto @d для_записи==@+with @d нет==@+false @d да==@+true @d строка==string @d строки==string @d байт==byte @d слово==word | @f программа==program @f использует==uses @f переменные==var @f переменная==var @f константа==const @f константы==const @f начало==begin @f конец==end @f если==if @f то==then @f иначе==else @f массив==array @f из==of @f при==case @f равном==of @f равной==of @f пока==while @f повторяй==repeat @f пока_не==until @f для==for @f функция==function @f процедура==procedure @f до==to @f уменьшать_до==downto @f делай==do @f нет==false @f да==true @f строка==string @f строки==string @f слово==word @f вниз_до==downto @f от==for @f байт==byte @f ув==inc @f ум==dec @f метка==label @f метки==label @f иди==goto @f для_записи==with |
Для подсветки синтаксиса в редакторе в DOS Navigator'е можно вставить в файл раскраски следующие строки
Keywords2 программа,использует,переменные,переменная Keywords2 начало,конец,функция,процедура Keywords2 если,то,иначе,пока,делай,повторяй,пока_не,для,от,до Keywords2 вниз_до,уменьшать_до Keywords2 массив,из,запись,при,равном,константа,константы,равной Keywords2 метка,метки,да,нет,иди,для_записи Keywords2 строка,строки,слово,байт
Бывают случаи, когда нужно применить несколько файлов изменений к одному web-файлу. Например, вы делаете файлы изменений для нескольких языков, и файлы изменений для воплощения вашей программы на различных операционных системах. Тогда понадобится применять сразу два файла изменений к одной программе (один для данного языка и один для данной операционной системы). Другой пример – применять файлы изменений, сделанные разными программистами к разным частям программы. Для этого используется программа tie, которую разработал Klaus Guntermann. Исходники tie можно взять в CTAN архиве.
Исполняемый файл программы входит в состав MikTeX. Она используется так
tie -m вывод основной_файл файл_изм_1
файл_изм_2 файл_изм_3 …
где -m
– указывает, что нужен изменённый файл;
вывод
– файл, в который будет записан вывод программы;
основной_файл
– файл, к которому надо применить изменения;
файл_изм_1, файл_изм_2, …
– файлы изменений.
Синтаксис файлов изменений тот же, что и программ tangle и weave. Они применяются последовательно к основному_файлу. Сначала первый, затем второй, и т. д. Области между командами @x и @y могут в разных файлах изменений перекрываться, как в приведённом ниже примере.
Исходный файл | Файл изменений 1 | Файл изменений 2 | Итоговый файл | |||
Строка 1 Строка 2 Строка 3 Строка 4 Строка 5 | @x Строка 2 Строка 3 @y Строка 2А Строка 3А @z | @x Строка 3А Строка 4 @y Строка 3Б Строка 4Б @z | Строка 1 Строка 2А Строка 3Б Строка 4Б Строка 5 |
Второй вариант использования программы объединяет несколько файлов изменений в один
tie -c вывод основной_файл файл_изм_1
файл_изм_2 файл_изм_3 …
где -с
– указывает, что нужно объединить файлы изменений;
вывод
– итоговый файл изменений.
К счастью, tie не занимается перекодировкой и не нуждается в изменениях для работы с русскими файлами.
Методология литературного программирования. Опыт русификации инструментальных средств
Исходно данная статья готовилась к Завалишенским чтениям 2015 года, которые проводятся ежегодно в ГУАП (Государственном университете авиаприборостроения), но по каким-то причинам она там так и не вышла, несмотря на то, что доклад на Завалишинских чтениях зачитывался. Здесь слайды презентации к докладу.
Видео по литературному программированию Михаила Глухова.
Видео по грамотному программированию Алексея Пирогова.
© Жуков И. Б.
e-mail: ibzh@yandex.ru
При использовании материалов, пожалуйста,
ставьте индексируемую ссылку на сайт https://ibzh.eko3.ru/
Число посетителей | |||
| Число посетителей |