...или CodepediaАвтор: Зверёк Харьковский
Дата: 29.09.05
, не ты ли это?
Вики литерального программирования: каждая статья является одновременно и программой. Вики-движок википедии дополнен синтаксисом средства литерального программирования
noweb.
Здравствуйте, Mamut, Вы писали:
зато ты выложил на 9 часов раньше
silent RSDN@Home 1.2.0 alpha [618] Windows XP 5.1.2600.65536
Здравствуйте, Mamut, Вы писали:
M>http://rsdn.ru/Forum/Message.aspx?mid=1713647&only=1Автор: Mamut
Дата: 04.03.06
M>
Pardon moi. Я сейчас рсдн читаю в режиме "только 4 форума раз в сутки". "Прочее" в эти 4 не входит.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Вики литерального программирования: каждая статья является одновременно и программой.
Я вот статью начинал писать на эту тему, так и не собрался. А вот оригинальные TANGLE и WEAVE на Delphi перевел, кому надо --- могу поделиться
Вообще, я называю его литературное программирование (от слова литература). Кто-то еще называет содержательное программирование. В одном месте я встречал перевод как документированное программирование. Вещь интересная, но... (1) Программисты сейчас в дефиците. Одна из современный тенденций развития IT --- уменьшить квалификацию среднестатистического программиста в проекте. А в данном случае нужны не просто хорошие программисты, но и хорошие публицисты. (2) Чтобы пользоваться TANGLE + WEAVE желательно знать TeX. (3) Инструменты TANGLE и WEAVE выполнены на уровне 1980-x годов. Среды, которая бы реализовала идеи литературного программирования (в идеале отладка по форматированному тексту, и т. д.) нету
.
Но до чего все-таки приятно программировать в таком стиле и набирать программы вот так последовательно:
@* Введение.
Приступим писать шахматную программу... Пойдем на все тяжкие...
Даже, скорее, на сегодня не программу, а шаблон программы для
работы по протоколу WinBoard, через каналы (pipes). Это даст
нам довольно-таки хороший интерфейс, и противники есть, будет
с чем сравнивать и куда стремиться!
@ Перечислим наиболее общие моменты, которые могут нам пригодиться.
Во-первых, это реализация директив компилятора. Создадим соответствующий
макрос для того, чтобы не писать всякий раз последовательность,
состоящую из знаков коммерческого <@@>, фигурных скобочек и амперсандов,
которая выглядит как абракадабра и затрудняет внешний вид исходника.
@d preprocessor(#) == @{@&$#@}
@f preprocessor == nil
@f string == nil
@ Надо как-то помечать отладочный код. Сделаем это более современными
чем в \.{TANGLE} и \.{WEAVE} средствами, а именно через препроцессор.
@d debug == preprocessor(IFDEF DEBUG)
@d gubed == preprocessor(ENDIF)
@f debug == begin
@f gubed == end
@ Как жаль, что в Delphi нет сишного оператора return! При обычном
программировании я довольно часто набирал последовательность
|begin Result := Something; Exit end;|. Но в нашем распоряжении
есть механизм макросов системы WEB, который позволит нам устранить
этот недостаток!
@d return(#) == begin Result := #; Exit; end
@ Мы подошли к общей структуре нашей программы, которая до боли
знакома прогараммистам Delphi.
@p @<Директивы компилятора@>
program mu;
uses Windows, SysUtils;
type
@<Типы@>
var
@<Глобальные переменные@>
@<Процедуры, функции@>
begin
Randomize;
try
@<Инициализация протокола@>
@<Цикл приема и ответа на команды@>
except
on E: Exception do
@<Обработка исключения@>
end;
preprocessor(WARNINGS OFF) {Убиваем предупреждение о тексте после end.}
end.
@......................................
Только вот кроме Кнута никто этим, похоже, не пользуется. Я, помню,
долго рылся в исходниках эмулятора MMIX
(
http://www-cs-faculty.stanford.edu/~knuth/mmix.html) и чувствовал
скорее неудобство.
Кстати, почему "литеральное"? "Literate" ведь означает просто "грамотный".
Posted via RSDN NNTP Server 2.0