~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 189325559A7F2168F241A0685E6E645E__1713625260 ✰
Заголовок документа оригинал.:
✰ Literate programming - Wikipedia ✰
Заголовок документа перевод.:
✰ Грамотное программирование — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Literate_programming ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/18/5e/189325559a7f2168f241a0685e6e645e.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/18/5e/189325559a7f2168f241a0685e6e645e__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 10:34:32 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 20 April 2024, at 18:01 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Грамотное программирование — Википедия Jump to content

Грамотное программирование

Из Википедии, бесплатной энциклопедии
«Грамотное программирование» Дональда Кнута — основополагающая книга по грамотному программированию.

Грамотное программирование парадигма программирования , введенная в 1984 году Дональдом Кнутом, в которой компьютерная программа дается как объяснение того, как она работает, на языке , таком как английский, с вкраплением (встраиванием) фрагментов макросов естественном и традиционного исходного кода , из которого компилируемый исходный код. может быть сгенерирован [1] используется в научных вычислениях и в науке о данных Этот подход обычно для воспроизводимых исследований и открытого доступа . целей [2] Грамотные инструменты программирования сегодня используются миллионами программистов. [3]

Парадигма грамотного программирования, по замыслу Дональда Кнута, представляет собой отход от написания компьютерных программ в том порядке и порядке, который задает компилятор, и вместо этого дает программистам макросы для разработки программ в порядке, требуемом логикой и потоком их мыслей. [4] Грамотные программы пишутся как изложение логики на более естественном языке , в котором макросы используются для сокрытия абстракций и традиционного исходного кода , что больше похоже на текст эссе .

Инструменты грамотного программирования (LP) используются для получения двух представлений из исходного файла: одного, понятного компилятору или интерпретатору, «запутанного» кода, и другого для просмотра в виде форматированной документации , которая, как говорят, «соткана» из грамотного программирования. источник. [5] В то время как первое поколение грамотных инструментов программирования было специфичным для компьютерного языка , более поздние не зависят от языка и существуют за пределами отдельных языков программирования.

История и философия [ править ]

Грамотное программирование было впервые введено в 1984 году Дональдом Кнутом, который намеревался создавать программы, подходящие для человеческой литературы. Он внедрил его в Стэнфордском университете в рамках своего исследования алгоритмов и цифровой типографики . Реализация была названа « WEB », так как он считал, что это одно из немногих трехбуквенных слов английского языка, которые еще не применялись к вычислительной технике. [6] Однако это напоминает сложную природу программного обеспечения, аккуратно собранного из простых материалов. [1] Практика грамотного программирования значительно возродилась в 2010-х годах с использованием вычислительных ноутбуков , особенно в области науки о данных .

Концепция [ править ]

Грамотное программирование — это запись логики программы на человеческом языке с включенными (разделенными примитивной разметкой) фрагментами кода и макросами. Макросы в грамотном исходном файле — это просто похожие на заголовок или пояснительные фразы на человеческом языке, которые описывают человеческие абстракции, созданные при решении задачи программирования, и скрывают фрагменты кода или макросы нижнего уровня. Эти макросы аналогичны алгоритмам псевдокода , которые обычно используются при преподавании информатики . Эти произвольные поясняющие фразы становятся новыми точными операторами, создаваемыми программистом на лету и образующими метаязык поверх основного языка программирования.

Препроцессор используется для замены произвольных иерархий или , скорее, «взаимосвязанных «сетей» макросов». [7] создавать компилируемый исходный код одной командой («клубок»), а документацию — другой («переплетать»). Препроцессор также предоставляет возможность записывать содержимое макросов и добавлять к уже созданным макросам в любое место текста грамотного исходного файла программы, избавляя тем самым от необходимости держать в уме ограничения, налагаемые традиционными языками программирования. или прервать поток мыслей.

Преимущества [ править ]

По словам Кнута, [8] [9] Грамотное программирование обеспечивает более высокое качество программ, поскольку оно заставляет программистов явно излагать мысли, лежащие в основе программы, что делает плохо продуманные проектные решения более очевидными. Кнут также утверждает, что грамотное программирование обеспечивает первоклассную систему документации, которая не является дополнением, а естественным образом вырастает в процессе изложения мыслей во время создания программы. [10] Полученная документация позволяет автору в любой момент возобновить собственный мыслительный процесс, а другим программистам легче понять конструкцию программы. Это отличается от традиционной документации, в которой программисту предоставляется исходный код, следующий порядку, установленному компилятором, и он должен расшифровать мыслительный процесс, лежащий в основе программы, на основе кода и связанных с ним комментариев. Утверждается также, что метаязыковые возможности грамотного программирования облегчают мышление, давая более высокий вид кода «с высоты птичьего полета» и увеличивая количество концепций, которые разум может успешно сохранить и обработать. Применимость этой концепции к программированию в больших масштабах, к программам коммерческого уровня, подтверждается изданием кода TeX как грамотной программы. [8]

Кнут также утверждает, что грамотное программирование может привести к легкому портированию программного обеспечения в несколько сред, и даже приводит в качестве примера реализацию TeX. [11]

с созданием Контраст документации

Грамотное программирование очень часто понимают неправильно. [12] ссылаться только на форматированную документацию, созданную из общего файла, содержащего как исходный код, так и комментарии (что правильно называется генерацией документации ), или на объемные комментарии, включенные в код. Это обратная сторона грамотного программирования: хорошо документированный код или документация, извлеченная из кода, соответствует структуре кода, а документация встроена в код; в то время как при грамотном программировании код встроен в документацию, причем код соответствует структуре документации.

Это заблуждение привело к утверждениям, что инструменты извлечения комментариев, такие как Perl Plain Old Documentation или системы Java Javadoc , являются «грамотными инструментами программирования». Однако, поскольку эти инструменты не реализуют «сеть абстрактных концепций», скрывающуюся за системой макросов естественного языка, и не предоставляют возможность изменять порядок исходного кода с навязанной машиной последовательности на последовательность, удобную для человеческого разума. , их нельзя назвать грамотными инструментами программирования в том смысле, в каком их имел в виду Кнут. [12] [13]

Обзор [ править ]

В 1986 году Джон Бентли попросил Кнута продемонстрировать концепцию грамотного программирования для его колонки Programming Pearls в журнале Communications of the ACM , написав программу в WEB. Кнут прислал ему программу для решения проблемы, ранее обсуждавшейся в колонке (выборка M случайных чисел в диапазоне 1.. N ), а также попросил «задание». Бентли дал ему задачу найти K наиболее распространенных слов в текстовом файле, для чего Кнут написал WEB-программу, которая была опубликована вместе с обзором Дугласа Макилроя из Bell Labs. Макилрой похвалил сложность решения Кнута, его выбор структуры данных (вариант хеш-три Фрэнка М. Ляна ) и презентацию. Он раскритиковал некоторые вопросы стиля, такие как тот факт, что центральная идея была описана в конце статьи, использование магических констант и отсутствие диаграммы, сопровождающей объяснение структуры данных. Макилрой также использовал обзор для критики самой задачи программирования, указав, что в Unix (разработанной в Bell Labs) существуют утилиты для обработки текста ( tr , sort , uniq и sed ) были написаны ранее и были «основными», и решение, которое было легко реализовать, отлаживать и повторно использовать, можно было получить, объединив эти утилиты в шестистрочном сценарии оболочки . В ответ Бентли написал следующее: [14]

[Макилрой] восхищается исполнением решения, но считает проблему инженерной. (Это, конечно, моя ответственность как постановщика задач; Кнут решил задачу, которую ему поставили, на основании того, что важно для большинства инженеров — зарплаты, предоставляемой постановщиками задач.)

Позже Макилрой признал, что его критика была несправедливой, поскольку он критиковал программу Кнута по инженерным соображениям, в то время как целью Кнута было только продемонстрировать грамотную технику программирования. [15] В 1987 году журнал Communications of the ACM опубликовал следующую статью, в которой иллюстрировало грамотное программирование с помощью программы на C, сочетающей художественный подход Кнута с инженерным подходом Макилроя, с критикой Джона Гилберта. [16]

Рабочий процесс [ править ]

Внедрение грамотного программирования состоит из двух этапов:

  1. Ткачество: создание подробного документа о программе и ее обслуживании.
  2. Запутывание: генерация машинного исполняемого кода

Плетение и запутывание выполняются на одном и том же источнике, чтобы они соответствовали друг другу.

Пример [ править ]

Классическим примером грамотного программирования является грамотная реализация стандарта Unix. wcпрограмма для подсчета слов. Кнут представил CWEB- версию этого примера в главе 12 своей книги «Грамотное программирование» . Тот же пример позже был переписан для Noweb . инструмента грамотного программирования [17] Этот пример дает хорошую иллюстрацию основных элементов грамотного программирования.

Создание макросов [ править ]

Следующий фрагмент wc грамотная программа [17] показывает, как произвольные описательные фразы на естественном языке используются в грамотной программе для создания макросов, которые действуют как новые «операторы» в грамотном языке программирования и скрывают фрагменты кода или другие макросы. Обозначение разметки состоит из двойных угловых скобок (" <<...>>"), обозначающие макросы, " @" Символ, обозначающий конец раздела кода в файле NowEB. " <<*>>Символ " обозначает "корневой", самый верхний узел, с которого грамотный программист начнет расширять сеть макросов. Фактически, запись расширенного исходного кода может быть выполнена из любого раздела или подраздела (т.е. фрагмента кода, обозначенного как " <<name of the chunk>>=", со знаком равенства), поэтому один грамотный программный файл может содержать несколько файлов с машинным исходным кодом.

Целью    wc    является   подсчет    строк  ,   слов  и   /  или   символов   в   списке    файлов   .    Число 
  строк    в   файле    равно   .....  /  дополнительные   пояснения  / 

 Вот  обзор   wc      файла     .   c   который   определяется    программой   noweb    ,   wc  .   nw  : 
     = 
     <<  заголовочные   файлы   Включаемые   >>  >> 
     <<  Определения  >> 
     <<  Глобальные   переменные  >> 
     <<  Функции  >> 
     <<  Основная   программа   ,  @ 
     Мы 

 должны   включить   <<   стандартные   определения   ввода  -  вывода   >>  *   поскольку   мы   хотим   отправить    форматированный   вывод 
 на   stdout   и   stderr  . 
      <<  заголовочные   файлы   Включаемые   #include  >>= 
     >   <stdio.h 
     @ 

Распутывание кусков может производиться в любом месте грамотного текстового файла программы, не обязательно в том порядке, в котором они расположены во вмещающем куске, а так, как того требует логика, отраженная в поясняющем тексте, охватывающем всю программу.

Программа как сеть [ править ]

Макросы — это не то же самое, что «имена разделов» в стандартной документации. Макросы грамотного программирования скрывают за собой реальный код и могут использоваться внутри любых операторов машинного языка низкого уровня, часто внутри логических операторов, таких как " if", " while" или " case". Это можно увидеть в следующем wc грамотная программа. [17]

Нынешний   блок   который  ,   выполняет   подсчет   в   ,  был   на   деле   одним   из 
 самых   простых   написании   .  самом    Мы   смотрим   на   каждый   символ   и   меняем   состояние   если   он   начинает   или   заканчивает 
 слово   ,  . 

      <<  Сканировать   файл  >>= 
     while   (  1  )   { 
       <<  Заполнить   буфер   если   он   ,   пуст  ;    разрыв   в   конце   файла   >> 
       c   =   *  ptr  ++  ; 
        if   (  c   >   ' '   &&   c   <   0177  )   { 
         /* видимые коды ASCII */ 
         if   (  !  in_word  )   { 
           word_count  ++  ; 
            в_слове   =   1  ; 
          } 
         продолжать  ; 
        } 
       if   (  c   ==   '\n'  )   line_count  ++  ; 
        else   if   (  c   !=   ''   &&   c   !=   '\t'  )   продолжить  ; 
        in_word   =   0  ; 
          /* c — это новая строка, пробел или табуляция */ 
     } 
     @ 

Макросы обозначают любой фрагмент кода или другие макросы и являются более общими, чем «разбиение на части» сверху вниз или снизу вверх или подразделение на подразделы. Дональд Кнут сказал, что когда он осознал это, он начал думать о программе как о сети различных частей. [1]

Порядок человеческой логики, а не логики компилятора [ править ]

В современной грамотной программе, помимо свободного порядка их представления, фрагменты макросов, однажды введенные с помощью " <<...>>=", можно вырастить позже в любом месте файла, просто написав " <<name of the chunk>>=" и добавление к нему дополнительного содержимого, как показано в следующем фрагменте ("плюс" добавляется форматировщиком документа для удобства чтения и отсутствует в коде). [17]

Общие итоги должны быть инициализированы нулем в начале программы.
 Если бы мы сделали эти переменные локальными по отношению к основной, нам пришлось бы выполнить такую ​​инициализацию.
 явно;  однако глобальные переменные C автоматически обнуляются.  (Или, скорее, ``статически
 обнулено.'⁠' (Понял?)

     <<Глобальные переменные>>+=
     long tot_word_count, tot_line_count,
         тот_char_count;
       /* total number of words, lines, chars */
    @ 

Запись хода мыслей [ править ]

Документация к грамотной программе создается в рамках написания программы. Вместо комментариев, предоставляемых в качестве примечаний к исходному коду, грамотная программа содержит объяснение концепций на каждом уровне, при этом концепции более низкого уровня откладываются на соответствующие места, что позволяет лучше передавать мысли. Отрывки грамотного wcвыше показано, как переплетаются объяснение программы и ее исходный код. Такое изложение идей создает поток мысли, подобный литературному произведению. Кнут написал «роман», в котором объясняет код интерактивной фантастической игры Colossal Cave Adventure . [18]

Замечательные примеры [ править ]

  • Axiom , созданная на основе Scratchpad — системы компьютерной алгебры, разработанной IBM. Сейчас его разрабатывает Тим ​​Дейли, один из разработчиков блокнота. Axiom полностью написана как грамотная программа.

Грамотные практики программирования [ править ]

Первой опубликованной средой грамотного программирования была WEB , представленная Кнутом в 1981 году для его TeX системы набора текста ; он использует Pascal в качестве основного языка программирования и TeX для набора документации. Полный прокомментированный исходный код TeX был опубликован в книге Кнута TeX: The program , том B его 5-томного издания «Компьютеры и набор текста» . Кнут в частном порядке использовал грамотную систему программирования под названием DOC еще в 1979 году. Его вдохновили идеи Пьера-Арнуля де Марнеффа . [19] Бесплатный CWEB , написанный Кнутом и Сильвио Леви, адаптирован для WEB C и C++ , работает в большинстве операционных систем и может создавать в формате TeX и PDF документацию .

Существуют различные другие реализации концепции грамотного программирования, представленные ниже. Многие из новейших из них не имеют макросов и, следовательно, нарушают принцип человеческой логики , что делает их скорее полуграмотными инструментами. Однако они позволяют выполнять код на клеточном уровне, что делает их более похожими на инструменты исследовательского программирования .

Имя Поддерживаемые языки Написано в Язык разметки Макросы и индивидуальный заказ Сотовое исполнение Комментарии
ВЕБ Паскаль Паскаль ТеХ Да Нет Первая опубликованная грамотная среда программирования.
ВЕБ-САЙТ С++ и С С ТеХ Да Нет Адаптирован ли WEB для C и C++ ?
NoWEB Любой C , AWK и значок LaTeX , TeX , HTML и Трофф Да Нет Он хорошо известен своей простотой и позволяет форматировать текст в HTML вместо использования системы TeX.
Грамотный Любой Д Уценка Да Нет Поддерживает уравнения TeX. Совместимость с Vim ( literate.vim )
ВоронкаВеб Любой С HTML и ТеХ Да? Имеет более сложную разметку, но имеет множество более гибких опций.
НуВЕБ Любой С++ Латекс Он может преобразовать один источник LP в любое количество файлов кода. Он делает это за один вызов; у него нет отдельных команд плетения и спутывания. У него нет расширяемости, как у Noweb.
pyWeb Любой Питон Реструктурированныйтекст Да Соблюдает отступы, что делает их пригодными для использования в таких языках, как Python , хотя вы можете использовать их для любого языка программирования.
Молли Любой Перл HTML Нацелен на его модернизацию и масштабирование с помощью «складывания HTML» и «виртуальных представлений» кода. Он использует разметку «noweb» для грамотных исходных файлов.
Коднар Рубин Это инструмент обратного программирования, доступный в виде Ruby Gem. Вместо того, чтобы машиночитаемый исходный код извлекался из грамотных источников документации, грамотная документация извлекается из обычных машиночитаемых файлов исходного кода.
Emacs организационный режим Любой Эмакс Лисп Простой текст Требуется Бабель, [20] который позволяет встраивать блоки исходного кода с нескольких языков программирования [21] в одном текстовом документе. Блоки кода могут обмениваться данными друг с другом, отображать встроенные изображения или анализироваться в чистый исходный код с использованием ссылочного синтаксиса Noweb . [22]
Кофескрипт Кофескрипт Кофескрипт , JavaScript Уценка CoffeeScript поддерживает «грамотный» режим, который позволяет компилировать программы из исходного документа, написанного в Markdown, с отступами блоков кода. [23]
Кленовые листы Клен (программное обеспечение) XML Рабочие листы Maple — это независимая от платформы среда программирования, которая сочетает в себе текст и графику с живым кодом для символьных вычислений. «Кленовые листы» . www.maplesoft.com . Проверено 30 мая 2020 г.
Ноутбуки Вольфрам Вольфрам Язык Вольфрам Язык Блокноты Wolfram — это метод грамотного программирования, не зависящий от платформы, который сочетает текст и графику с живым кодом. [24] [25]
Детские площадки Swift (язык программирования) Предоставляет интерактивную среду программирования, которая оценивает каждый оператор и отображает результаты в реальном времени по мере редактирования кода. Playgrounds также позволяет пользователю добавлять язык разметки вместе с кодом, обеспечивающим заголовки, встроенное форматирование и изображения. [26]
Блокнот Jupyter , ранее Блокнот IPython Python и любой другой с ядром Jupyter JSON Спецификация формата для ipynb Нет Да Работает в формате блокнотов, объединяющих заголовки, текст (в том числе LaTeX), графики и т.п. с написанным кодом.
Плагин Jupytext для Jupyter Много языков Питон Уценка в комментариях Нет Да
нбдев Блокнот Python и Jupyter nbdev — это библиотека, которая позволяет вам разрабатывать библиотеку Python в Jupyter Notebooks, помещая весь ваш код, тесты и документацию в одно место.
Юлия (язык программирования) Pluto.jl — это реактивная среда для ноутбуков, допускающая индивидуальный заказ. Но веб-макросы не поддерживаются. Да Поддерживает режим разработки iJulia, вдохновленный iPython.
Агда (язык программирования) Поддерживает ограниченную форму грамотного программирования «из коробки». [27]
язык программирования Ева Программы преимущественно прозаические. [28] Eve сочетает варианты Datalog и Markdown с живой графической средой разработки.
Блокноты R Markdown (или Блокноты R) R , Python , Джулия и SQL PDF , Microsoft Word , LibreOffice и форматы презентаций или слайд-шоу , а также интерактивные форматы, такие как HTML-виджеты. Нет Да [29]
Комната R , Python , Julia и Observable PDF , Microsoft Word , LibreOffice и форматы презентаций или слайд-шоу , а также интерактивные форматы, такие как HTML-виджеты. Нет Да [29]
Сплетение р PDF [30] [31]
Книтр р LaTeX , PDF , LyX , HTML , Markdown , AsciiDoc и reStructuredText. [32] [33]
кодовая коса Пандок , Руст , Джулия , Питон , R , Баш Питон Уценка Нет Да
Пплетение Питон PDF Нет
Живой редактор MATLAB МАТЛАБ Уценка Нет Да
Интернет C , C++ , Информировать 6 , Информировать 7 С , CWEB ТеХ , HTML Да? Используется для написания языка программирования Inform с 2004 года. [34]
Меркурий Питон Питон , TypeScript JSON Спецификация формата для ipynb Mercury превращает Jupyter Notebook в интерактивные вычислительные документы. Их можно публиковать в виде веб-приложений , информационных панелей, отчетов, REST API или слайдов. Выполненный документ можно экспортировать как отдельный файл HTML или PDF . Документы могут быть запланированы для автоматического исполнения. Наличие документа и виджетов контролируется с помощью YAML-заголовка в первой ячейке блокнота.
наблюдаемый JavaScript JavaScript , TypeScript TeX ( КаТекс ), HTML Хранится в облаке с веб-интерфейсом. Содержимое можно публиковать на веб-сайтах. Версия контролируется; платформа определяет свои собственные операции контроля версий. Ячейки кода могут быть организованы вне порядка ; наблюдаемые блокноты автоматически создают граф выполнения ( DAG ). Богатая стандартная библиотека , реализованная с использованием современных функций JavaScript . Ячейки из разных наблюдаемых блокнотов могут ссылаться друг на друга. Библиотеки Npm можно импортировать на лету.
Ганеша JavaScript , TypeScript JavaScript Уценка Позволяет Node.js загружать грамотные модули, представленные файлами Markdown, содержащими код JavaScript или TypeScript, перемежающийся богато отформатированной прозой. Поддерживает объединение грамотных модулей для браузеров при использовании сборщиков модулей внешнего интерфейса Rollup или Vite.
JWEB C , C++ , JavaScript , TypeScript JavaScript Уценка Да Нет

Другие полезные инструменты включают в себя:

  • Текстовый редактор Leo — это структурный редактор, который поддерживает дополнительную разметку Noweb и CWEB. Автор Leo сочетает в себе два разных подхода: во-первых, Leo — редактор-схема, помогающий управлять большими текстами; во-вторых, Лео включает в себя некоторые идеи грамотного программирования, которое в чистом виде (т. е. в том виде, в котором оно используется веб-инструментом Кнута или такими инструментами, как «noweb») возможно только при некоторой степени изобретательности и использовании редактора. способом, не совсем предусмотренным его автором (в модифицированных узлах @root). Однако это и другие расширения (@file nodes) делают структурное программирование и управление текстом успешным и простым и в некотором смысле похожим на грамотное программирование. [35]
  • Язык программирования Haskell имеет встроенную поддержку полуграмотного программирования. Компилятор/интерпретатор поддерживает два расширения имен файлов: .hs и .lhs; последний означает грамотный Haskell.
Грамотные скрипты могут представлять собой полный исходный текст LaTeX, при этом он может быть скомпилирован без каких-либо изменений, поскольку интерпретатор компилирует текст только в среде кода, например:
% здесь текст, описывающий функцию: 
 \begin  {  code  } 
 fact   0   =   1 
 fact   (  n  +  1  )   =   (  n  +  1  )   *   fact   n 
 \ end  {  code  } 
  здесь еще текст 
 
Код также можно разметить в стиле Ричарда Берда, начиная каждую строку с символа «больше» и пробела, а перед и заканчивая фрагмент кода пустыми строками.
Латекс listings пакет обеспечивает lstlistingсреду, которую можно использовать для украшения исходного кода. Его можно использовать для определения code среду для использования в Haskell для печати символов следующим образом:
\newenvironment  {  code  }{  \lstlistings  [language=Haskell]  }{  \endlstlistings  } 

 \begin  {  code  } 
 comp   ::   (  бета   ->   гамма  )   ->   (  альфа   ->   бета  )   ->   (  альфа   ->   гамма  ) 
 (  g   `  comp  `   f  )   x   знак равно   г  (  f   x  ) 
 \ end  {  code  } 
который можно настроить для получения:
Хотя пакет не предоставляет средств для организации фрагментов кода, исходный код LaTeX можно разделить на разные файлы. см . в руководстве по листингам . Обзор
  • Система грамотного программирования Web 68 использовала Algol 68 в качестве основного языка программирования, хотя в препроцессоре не было ничего, что могло бы заставить использовать этот язык. [36]
  • Механизм настройки Text Encoding Initiative , который позволяет ограничивать, изменять или расширять схему TEI , позволяет пользователям смешивать текстовую документацию с фрагментами спецификации схемы в своем универсальном «Один документ делает все» формате . На основе этой прозаической документации можно создавать схемы и конвейеры моделей обработки, а парадигма грамотного программирования Кнута считается источником вдохновения для такого способа работы. [37]

См. также [ править ]

  • Генератор документации - противоположность грамотному программированию, где документация встроена в исходный код и генерируется из него.
  • Интерфейс ноутбука - среда виртуального ноутбука, используемая для грамотного программирования.
  • Sweave и Knitr - примеры использования инструмента грамотного программирования, подобного noweb, на языке R для создания динамических статистических отчетов.
  • Самодокументируемый код — исходный код, который можно легко понять без документации.

Ссылки [ править ]

  1. ^ Перейти обратно: а б с v В Икс и С Кнут, Дональд Э. (1984). «Грамотное программирование» (PDF) . Компьютерный журнал . 27 (2). Британское компьютерное общество : 97–111. дои : 10.1093/comjnl/27.2.97 . Проверено 4 января 2009 г.
  2. ^ Шульте, Эрик (2012). «Многоязычная вычислительная среда для грамотного программирования и воспроизводимых исследований» (PDF) . Журнал статистического программного обеспечения . 46 (3). дои : 10.18637/jss.v046.i03 . Архивировано (PDF) из оригинала 9 ноября 2014 года . Проверено 30 мая 2020 г.
  3. ^ Кери, Мэри Бет (апрель 2018 г.). «История в блокноте: исследовательская наука о данных с использованием грамотного инструмента программирования». CHI '18: Материалы конференции CHI 2018 года по человеческому фактору в вычислительных системах . АКМ. стр. 1–11. дои : 10.1145/3173574.3173748 .
  4. ^ "У меня было ощущение, что нисходящая и восходящая - это противоположные методологии: одна больше подходит для представления программ, а другая - для создания программ. Но после приобретения опыта работы с WEB я пришел к выводу, что в этом нет необходимости. выбрать раз и навсегда между нисходящим и восходящим, поскольку программу лучше всего рассматривать как сеть, а не как дерево. Иерархическая структура присутствует, но самое важное в программе — ее структурные связи. сложная часть программного обеспечения состоит из простых частей и простых отношений между этими частями; задача программиста состоит в том, чтобы сформулировать эти части и эти отношения в том порядке, который лучше всего подходит для человеческого понимания, а не в каком-то жестко определенном порядке, таком как сверху вниз или снизу вверх. " — Дональд Э. Кнут , Грамотное программирование [1]
  5. ^ Если вспомнить, что первая версия инструмента называлась WEB, то становится очевидной забавная литературная отсылка, скрытая Кнутом в этих названиях: «О, какую запутанную паутину мы плетём, когда впервые практикуемся обманывать» – сэр Вальтер Скотт , в Песнь VI, Станца 17 Мармиона (1808 г.), эпической поэмы о битве при Флоддене в 1513 году. Сама цитата появилась в качестве эпиграфа в статье Джона Бентли и Дональда Кнута в мае 1986 года в одной из классических колонок Programming Pearls в журнале Communications. АКМ, том 29 номер 5 на стр.365
  6. ^ «Грамотное программирование» (PDF) . archive.computerhistory.org . Проверено 3 июня 2019 г.
  7. ^

    «Макросам WEB разрешено иметь не более одного параметра. Опять же, я сделал это в интересах простоты, потому что заметил, что большинство приложений с несколькими параметрами фактически могут быть сведены к случаю с одним параметром. Например, предположим, что вы хочу определить что-то вроде... Другими словами, имя одного макроса может быть параметром другого макроса. Этот конкретный трюк позволяет..."

    Дональд Э. Кнут , Грамотное программирование [1]
  8. ^ Перейти обратно: а б Кнут, Дональд Э .; Бинсток, Эндрю (25 апреля 2008 г.). «Интервью с Дональдом Кнутом» . Проверено 4 января 2009 г. Однако для меня грамотное программирование — это, безусловно, самое важное, что получилось в результате проекта TeX . Это не только позволило мне писать и поддерживать программы быстрее и надежнее, чем когда-либо прежде, и было одним из моих величайших источников радости с 1980-х годов, но иногда оно было просто незаменимо. Некоторые из моих основных программ, такие как мета-симулятор MMIX, невозможно было бы написать с использованием какой-либо другой методологии, о которой я когда-либо слышал. Эта сложность была слишком сложной для моего ограниченного мозга; без грамотного программирования все предприятие потерпело бы неудачу. ... Грамотное программирование — это то, что вам нужно, чтобы подняться над обычным уровнем достижений.
  9. ^

    «Еще одна удивительная вещь, которую я узнал при использовании WEB, заключалась в том, что традиционные языки программирования заставляли меня писать худшие программы, хотя я не осознавал, что делаю. Моя первоначальная идея заключалась в том, что WEB будет просто инструментом для документирования, но Я действительно обнаружил, что мои WEB-программы лучше, чем программы, которые я писал на других языках».

    Дональд Э. Кнут , Грамотное программирование [1]
  10. ^

    «Таким образом, язык WEB позволяет человеку выражать программы в порядке «потока сознания» . TANGLE способен смешать все в структуру, которую требует компилятор PASCAL. Эта особенность WEB, возможно, является его самым большим преимуществом; она делает WEB -написанная программа гораздо более читабельна, чем та же программа, написанная чисто на PASCAL, даже если последняя программа хорошо прокомментирована. И то, что не надо зацикливаться на вопросе сверху вниз или снизу вверх, так как программист. теперь я могу рассматривать большую программу как сеть, которую нужно исследовать в психологически правильном порядке, — это, пожалуй, величайший урок, который я извлек из своего недавнего опыта».

    — Donald E. Knuth, Literate Programming[1]
  11. ^ ""Oral History of Donald Knuth"- an Interview with Ed Feigenbaum" (PDF). archive.computerhistory.org. Retrieved 2018-12-07.
  12. ^ Jump up to: a b Dominus, Mark-Jason (March 20, 2000). "POD is not Literate Programming". Perl.com. Archived from the original on January 2, 2009.
  13. ^

    "I chose the name WEB partly because it was one of the few three-letter words of English that hadn't already been applied to computers. But as time went on, I've become extremely pleased with the name, because I think that a complex piece of software is, indeed, best regarded as a web that has been delicately pieced together from simple materials. We understand a complicated system by understanding its simple parts, and by understanding the simple relations between those parts and their immediate neighbors. If we express a program as a web of ideas, we can emphasize its structural properties in a natural and satisfying way."

    — Donald E. Knuth, Literate Programming[1]
  14. ^ Bentley, Jon; D. E. Knuth; M. D. McIlroy (1986). "Programming pearls" (PDF). Communications of the ACM. 29 (6): 471–483. doi:10.1145/5948.315654. S2CID 10128137.
  15. ^ Mahoney, Michael S. (18 August 1989). "Interview with M. D. McIlroy".
  16. ^ Van Wyk, Christopher J.; Hanson, David R.; Gilbert, John (July 1987). "Literate programming" (PDF). Communications of the ACM. 30 (7): 593–599. doi:10.1145/28569.315738. S2CID 5328652.
  17. ^ Jump up to: a b c d Ramsey, Norman (May 13, 2008). "An Example of noweb". Retrieved January 4, 2009.
  18. ^ The game, also known as ADVENT, was originally written by Crowther in about 700 lines of FORTRAN code; Knuth recast it into the WEB idiom. It is available at literateprogramming.com or on Knuth's website Archived 2008-08-20 at the Wayback Machine.
  19. ^ de Marneffe, Pierre Arnoul (December 1973). Holon Programming – A Survey (Report). University de Liège, Service d'Informatique. p. 135.
  20. ^ "Babel: Introduction".
  21. ^ "Babel Languages: redirect". orgmode.org.
  22. ^ "Babel: Introduction".
  23. ^ Ashkenas, Jeremy. "Literate CoffeeScript". Retrieved 13 November 2014.
  24. ^ Milestones in Computer Science and Information Technology by Edwin D. Reilly, p. 157.
  25. ^ "Wolfram Notebooks". www.wolfram.com. Retrieved 2018-11-28.
  26. ^ "Markup Formatting Reference: Markup Overview". developer.apple.com. Retrieved 2015-11-15.
  27. ^ "Literate Agda". Agda Wiki. Retrieved 2017-03-26.
  28. ^ "Eve and Literate Progamming". Eve Handbook. Archived from the original on 2017-05-24. Retrieved 2017-05-25.
  29. ^ Jump up to: a b Yihui Xie; Joseph J. Allaire; Garrett Grolemund (30 December 2023), R Markdown: The Definitive Guide, Chapman & Hall, Wikidata Q76441281
  30. ^ Leisch, Friedrich (2002). "Sweave, Part I: Mixing R and LaTeX: A short introduction to the Sweave file format and corresponding R functions" (PDF). R News. pp. 28–31. Retrieved 22 January 2012.
  31. ^ Pineda-Krch, Mario (17 January 2011). "The Joy of Sweave – A Beginner's Guide to Reproducible Research with Sweave" (PDF). Retrieved 22 Jan 2012.
  32. ^ Xie, Yihui (2015). Dynamic Documents with R and knitr, 2nd Edition. Chapman & Hall/CRC. ISBN 9781498716963.
  33. ^ Xie, Yihui. "knitr: A General-Purpose Tool for Dynamic Report Generation in R" (PDF). GitHub.
  34. ^ "ganelson/inweb: A modern system for literate programming". GitHub. 17 June 2022.
  35. ^ Ream, Edward K. (September 2, 2008). "Leo's Home Page". Retrieved April 3, 2015.
  36. ^ Mountbatten, Sian. "Web 68: Literate programming with Algol 68". Archived from the original on 20 January 2013. Retrieved 1 January 2013.
  37. ^ "TEI Guidelines". TEI Consortium. Archived from the original on 2018-08-22. Retrieved 2018-08-23.

Further reading[edit]

External links[edit]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 189325559A7F2168F241A0685E6E645E__1713625260
URL1:https://en.wikipedia.org/wiki/Literate_programming
Заголовок, (Title) документа по адресу, URL1:
Literate programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)