리터럴 프로그래밍

Literate programming
도널드 크누스의 문학 프로그래밍은 문학 프로그래밍에 관한 중요한 책이다.

리터리트 프로그래밍컴퓨터 프로그램이 매크로와 전통적인 소스 코드의 단편과 함께 영어와 같은 자연 언어로 논리에 대한 설명을 제공받는 프로그래밍 패러다임입니다. 여기서 컴파일 가능한 소스 [1]코드를 생성할 수 있습니다.이 접근방식은 과학 컴퓨팅데이터 과학에서 재현 가능한 연구 [2]개방형 액세스 목적으로 일상적으로 사용됩니다.오늘날 [3]수백만 명의 프로그래머가 읽고 쓸 수 있는 프로그래밍 도구를 사용하고 있습니다.

도널드 크누스가 구상한 리터럴한 프로그래밍 패러다임은 컴퓨터에 의해 강요된 방식과 순서로 컴퓨터 프로그램을 작성하는 것에서 벗어나 프로그래머들에게 그들의 [4]생각의 논리와 흐름에 의해 요구되는 순서대로 프로그램을 개발할 수 있는 매크로를 제공한다.리터러티 프로그램은 에세이의 텍스트와 같은 추상화와 전통적인 소스 코드를 숨기기 위해 매크로가 사용되는 보다 자연스러운 언어로 논리의 설명으로 쓰여진다.

Literate Programming(LP) 도구는 소스 파일에서 두 가지 표현을 얻기 위해 사용됩니다. 하나는 컴파일러 또는 인터프리터가 이해할 수 있는 코드이고 다른 하나는 Literate [5]소스로부터 "woven"이라고 하는 포맷된 문서로 보기 위한 것입니다.제1세대의 리터러티 프로그래밍 툴은 컴퓨터 언어에 특화되어 있었지만, 후세대는 언어에 구애받지 않고 개개의 프로그래밍 언어를 넘어 존재합니다.

역사와 철학

문학 프로그래밍은 1984년 도널드 크누스에 의해 처음 도입되었는데, 그는 인간에게 적합한 문학 프로그램을 만들기 위해 고안되었다.그는 알고리즘과 디지털 타이포그래피 연구의 일환으로 스탠포드 대학에서 이를 구현했습니다.이 구현은 [6]아직 컴퓨팅에 적용되지 않은 몇 안 되는 영어 세 글자 단어 중 하나라고 믿었기 때문에 "WEB"라고 불렸습니다.다만,[1] 심플한 재료로부터 섬세하게 조합한 소프트웨어의 복잡한 성질과는 유사합니다.2010년대 들어 특히 데이터 과학 분야에서 컴퓨터 노트북을 사용하면서 리터러티 프로그래밍의 관행이 크게 부활했습니다.

개념.

리터레이티 프로그래밍은 (원시 마크업으로 구분된) 코드 스니펫과 매크로를 포함한 인간 언어로 프로그램 로직을 쓰는 것입니다.리터럴 소스 파일 내의 매크로는 프로그래밍 문제를 해결하는 동안 생성된 인간의 추상화를 기술하고 코드 또는 하위 수준의 매크로 덩어리를 숨기는 인간의 언어로 된 제목과 같은 또는 설명 문구입니다.이러한 매크로는 일반적으로 컴퓨터 과학 교육에 사용되는 의사 코드의 알고리즘과 유사합니다.이러한 임의의 설명 문구는 프로그래머에 의해 즉시 생성된 정확한 새로운 연산자가 되어 기본 프로그래밍 언어 위에 메타 언어를 형성합니다.

프리프로세서는 임의의 계층, 즉 매크로의 상호접속된 '웹'[7]을 대체하여 하나의 명령어("tangle")와 다른 명령어("weave")로 컴파일 가능한 소스 코드를 생성하기 위해 사용됩니다.또한 프리프로세서는 매크로의 내용을 기술하고 이미 작성된 매크로를 리터레이티드 프로그램 소스 파일의 텍스트 중 어느 위치에나 추가할 수 있는 기능을 제공하므로 기존 프로그래밍 언어에 의해 부과된 제약을 염두에 두거나 생각의 흐름을 방해할 필요가 없습니다.

이점

Knuth에 [8][9]따르면, 리터럴한 프로그래밍은 프로그래머가 프로그램 뒤에 있는 생각을 명확하게 진술하도록 강요하고, 부적절한 설계 결정을 더 명확하게 하기 때문에 더 높은 품질의 프로그램을 제공합니다.Knuth는 또한 리터러티 프로그래밍은 애드온이 아니라 프로그램을 [10]만드는 동안 자신의 생각을 설명하는 과정에서 자연스럽게 성장한 최고의 문서 시스템을 제공한다고 주장한다.그 결과 문서화를 통해 저자는 언제든지 자신의 사고 과정을 재개할 수 있으며, 다른 프로그래머가 프로그램의 구성을 보다 쉽게 이해할 수 있습니다.이것은 프로그래머가 컴파일러가 부여한 순서를 따르는 소스 코드를 제공받는 전통적인 문서와 다르며, 코드와 관련된 코멘트로부터 프로그램 뒤에 있는 사고 과정을 해독해야 한다.문맹 프로그래밍의 메타 언어 능력 또한 사고를 촉진하고, 코드에 대한 더 높은 "조감도"를 제공하며, 정신이 성공적으로 유지하고 처리할 수 있는 개념의 수를 증가시킨다고 주장됩니다.대규모 프로그래밍, 즉 상업용 프로그램의 개념 적용은 리터레이티 [8]프로그램으로서 TeX 코드 에디션에 의해 증명되었습니다.

Knuth는 또한 리터럴한 프로그래밍을 통해 소프트웨어를 여러 환경에 쉽게 이식할 수 있다고 주장하면서 TeX의 구현도 [11]예로 들고 있습니다.

문서 생성과 대조

리터럴한 프로그래밍은 소스 코드와 코멘트를 모두 포함한 공통 파일에서 작성된 포맷된 문서(문서 생성이라고 적절히 불린다) 또는 코드에 포함된 방대한 코멘트를 가리키는 것으로 오해되는 경우가[12] 많습니다.이것은 리터레이티 프로그래밍의 반대입니다.잘 문서화된 코드 또는 코드에서 추출된 문서는 코드의 구조를 따르고, 문서화된 프로그래밍에서는 코드가 문서 구조에 따라 문서에 삽입됩니다.

이러한 오해로 인해 Perl Plain Old Documentation이나 Java Javadoc 시스템과 같은 코멘트 추출 도구가 "리터레이트 프로그래밍 도구"라는 주장이 제기되었습니다.그러나 이러한 도구 또는 능력machine-imposed 순서부터 한명을 인간의 심리에 편리한 소스 코드의 순서를 변경을 제공하는"추상적인 개념의 웹"natural-language는 매크로의 시스템 뒤에 숨어서 실행하지 않고, 그들은 제대로 감각 크누스하려는 뜻을 잘 알고 프로그래밍 툴이라고 할 수 없다.[12][13]

비평

1986년, Jon Bentley는 Knuth에게 ACM의 Communications of the ACM의 Programming Pearls 칼럼에 WEB로 프로그램을 작성하여 리터리트 프로그래밍 개념을 시연해 달라고 요청했습니다.Knuth는 이전에 열에서 설명한 문제에 대한 프로그램(범위 1의 M 난수 표본 추출)을 보냈습니다.N)과 함께 "할당"을 요청했다.Bentley는 그에게 텍스트 파일에서 가장 흔한 K 단어를 찾는 문제를 주었고, Knuth는 이를 위해 Bell Labs의 Douglas McIlroy의 리뷰와 함께 출판된 WEB 프로그램을 작성했다.McIlroy는 Knuth의 솔루션의 복잡성, 데이터 구조(Frank M. Liang의 해시 트리의 변형)의 선택 및 프레젠테이션에 찬사를 보냈습니다.그는 중심 아이디어가 논문 후반부에 기술된 사실, 마법 상수 사용, 데이터 구조에 대한 설명에 부수되는 다이어그램의 부재와 같은 스타일의 문제를 비판했습니다.McIlroy는 또한 프로그래밍 태스크 자체를 비판하기 위해 리뷰를 사용했으며, Unix (Bell Labs에서 개발)에서는 텍스트 처리용 유틸리티(tr, sort, uniq 및 sed)가 이전에 "스태플"로 작성되었으며, 구현, 디버깅 및 재사용이 용이한 솔루션을 6줄로 결합함으로써 얻을 수 있었다고 지적했다.ell 스크립트이에 대해 Bentley는 다음과 같이 썼다.[14]

[Mcilroy]는 솔루션의 실행을 칭찬하지만 엔지니어링상의 이유로 문제를 해결하지 못하고 있습니다.(물론 이것은 문제 할당자로서의 제 책임입니다.Knuth는 대부분의 엔지니어에게 중요한 이유로 주어진 문제, 즉 문제 할당자가 제공하는 급여를 해결했습니다.)

매킬로이는 나중에 크누스의 프로그램을 공학적 이유로 비판한 반면 크누스의 목적은 단지 문맹스러운 프로그래밍 [15]기술을 보여주는 것이었기 때문에 그의 비평이 부당하다고 인정했다.1987년, ACM커뮤니케이션스는 Knuth의 예술적 접근과 McIlroy의 공학적인 접근 방식을 결합한 C 프로그램과 함께 문학적인 프로그래밍을 설명하는 후속 기사를 John [16]Gilbert의 비평과 함께 발행했다.

워크플로우

리터레이트 프로그래밍의 실장은, 다음의 2개의 스텝으로 구성됩니다.

  1. 직조:프로그램 및 유지보수에 관한 포괄적인 문서 생성.
  2. 엉킴: 컴퓨터 실행 가능 코드 생성 중

짜는 것과 얽히는 것은 같은 근원에서 이루어지기 때문에 서로 일치합니다.

리터레이티 프로그래밍의 전형적인 예는 표준 Unix의 리터레이티 구현입니다. wc단어 계산 프로그램.Knuth는 그의 Literate Programming 책 12장에 이 예의 CWEB 버전을 제시했습니다.같은 예는 나중에 noweb literate 프로그래밍 [17]툴에서도 다시 작성되었습니다.이 예에서는 리터레이트 프로그래밍의 기본 요소를 잘 보여 줍니다.

매크로 생성

다음 토막은wc리터레이트[17] 프로그램은 리터레이트 프로그램에서 어떻게 자연 언어의 임의의 설명 문구를 사용하여 리터레이트 프로그래밍 언어의 새로운 "메크로"로 기능하는 매크로를 만들고 코드 또는 다른 매크로의 덩어리를 숨기는지 보여줍니다.마크업 표기법은 쌍각 괄호("")로 구성됩니다.<<...>>") 매크로를 나타내는@noweb 파일의 코드 섹션의 끝을 나타내는 기호."<<*>>" 기호는 "root"를 나타냅니다.이 노드는 리터레이티드프로그래밍 툴이 매크로의 웹 확장을 시작하는 최상위 노드입니다.실제로 확장된 소스 코드는 모든 섹션 또는 하위 섹션(즉, "로 지정된 코드")에서 작성할 수 있습니다.<<name of the chunk>>=(등호 포함), 따라서 하나의 리터 프로그램 파일에 기계 소스 코드가 있는 여러 개의 파일을 포함할 수 있습니다.

 목적  wc  로. 세어보세요 줄들, 단어, 그리고./또는 성격.  a 목록.  파일.  번호  줄들  a 파일  ......../ 설명/  여기서, 그리고나서,  한 사람 개요   파일 wc.c 그거  정의되어 있다 타고  나우 프로그램. wc.nw:     <<*>=     << >헤더 파일 로. 포함하다>>     << >정의들>>     << >세계적인 변수>>     << >기능들>>     << > 주된 프로그램.>>     @  우리가 해야한다 포함하다  표준. I/O 정의들, 부터 우리가 원하다 로. 보내세요 포맷했다 산출량 로. 설치하다 그리고. 하드.     << >헤더 파일 로. 포함하다>>=     #실패하다 <stdio.h>     @ 

청크는 리터레이팅 프로그램텍스트 파일의 어느 장소에서나 풀 수 있으며, 반드시 동봉된 청크에서 시퀀싱되는 순서가 아니라 프로그램 전체를 포함하는 설명 텍스트에 반영되는 논리에 의해 요구됩니다.

웹으로서의 프로그램

매크로는 표준 문서의 "섹션 이름"과 다릅니다.리터럴한 프로그래밍 매크로는 실제 코드를 뒤에 숨깁니다.이 매크로는 보통 "와 같은 논리 연산자 내부에서 하위 수준의 기계 언어 연산자 내에서 사용됩니다.if", "while" 또는case". 이는 다음에서 볼 수 있습니다.wc문학 [17]프로그램

 현재의. 청크, 어떤. 한다  계산, 이었다 정말로. 하나.   심플 로. 쓰다. 우리가 보라  각각 성격 그리고. 바꾸다  한다면 그것 시작합니다. 또는  a 단어.      << >스캔 파일>>=     하는 동안에 (1) {       << >채우다 완충 장치 한다면 그것  ; 브레이크.  끝.  파일>>       c = *ptr++;       한다면 (c > ' ' & & c < > 0177) {         /* ASCII 코드 표시 */         한다면 (!입력_word) {           word_count(워드 카운트)++;           입력_word = 1;         }         계속하다.;       }       한다면 (c == '\n') line_count++;       또 다른 한다면 (c != ' ' & & c != '\t') 계속하다.;       입력_word = 0;         /* c는 줄 바꿈, 공백 또는 탭 */     }     @ 

매크로는 코드 또는 기타 매크로의 청크를 나타내며 하향식 또는 상향식 청킹 또는 하위 섹션보다 일반적입니다.도날드 크누스는 그가 이것을 깨달았을 때, 프로그램을 여러 [1]부분으로 이루어진 거미줄로 생각하기 시작했다고 말했다.

컴파일러가 아닌 인간의 논리 순서

노웹 리터레이티 프로그램에서는 설명의 자유 순서 외에 매크로 뒤에 있는 요소들이 한때 "와 함께 소개되었습니다.<<...>>=파일내의 어느 장소에서도, 간단하게 「」라고 쓰는 것만으로 나중에 확장할 수 있습니다.<<name of the chunk>>=다음 스니펫에 나타나 있듯이 (plus는 가독성을 위해 문서포맷터에 의해 추가되며 [17]코드에는 없습니다).

 총합계는 프로그램 시작 시 0으로 초기화해야 합니다.이러한 변수를 main에 로컬로 했을 경우, 이 초기화를 명시적으로 실시할 필요가 있습니다.단, C글로벌은 자동적으로 제로가 됩니다.(또는 「정적으로 제로가 됩니다」(알았습니까?)<<글로벌 변수>>+= long tot_word_count, tot_line_count, tot_char_count; /* 단어, 행, 문자 총수 */@

사상열 기록

리터레이티 프로그램용 문서는 프로그램 작성의 일부로 제작됩니다.소스코드에 대한 코멘트 대신 리터레이트 프로그램에는 각 레벨의 개념에 대한 설명이 포함되어 있으며, 하위 레벨의 개념은 적절한 위치에 이연되어 생각의 전달이 용이합니다.문학의 단편들wc위는 프로그램에 대한 설명과 소스 코드가 어떻게 조합되어 있는지를 보여줍니다.이러한 사상의 해설은 문학 작품과 같은 사상의 흐름을 만들어낸다.Knuth는 인터랙티브 픽션 게임인 Collarge Cave [18]Adventure의 코드를 설명하는 "소설"을 썼다.

주목할 만한 예

  • Axiom은 IBM이 개발한 컴퓨터 대수 시스템인 스크래치패드에서 발전한 것입니다.그것은 현재 스크래치패드의 개발자 중 한 명인 Tim Daly에 의해 개발되고 있으며, Axiom은 완전히 읽고 쓸 수 있는 프로그램으로 쓰여져 있다.

리터럴한 프로그래밍 프랙티스

최초의 출판된 프로그래밍 환경은 Knuth가 TeX 조판 시스템을 위해 1981년에 도입한 WEB입니다.WEB는 문서 조판용으로 Pascal을 사용합니다.코멘트가 달린 TeX 소스 코드는 Knuth의 TeX에 게재되어 있습니다.5권짜리 컴퓨터와 식자책 B권 프로그램입니다Knuth는 1979년 초에 DOC라고 불리는 문맹 프로그래밍 시스템을 개인적으로 사용했다.그는 피에르 아르눌마르네프[19]아이디어에서 영감을 받았다.Knuth와 Silvio Levy가 작성한 무료 CWEB는 C 및 C++으로 WEB에 적합하며 대부분의 운영 체제에서 실행되며 TeX 및 PDF 문서를 만들 수 있습니다.

리터레이티 프로그래밍 개념에는 다양한 구현이 있습니다(이들 중 상당수는 매크로가 없기 때문에 인간 논리 원리에 위배되므로 반 리터레이티시 도구에 가깝습니다).

이름. 지원되는 언어 기입처 마크업 언어 평.
파스칼 파스칼 TeX 최초의 출판된 프로그래밍 환경.
CWEB C++C C TeX WEB는 C와 C++에 적합합니까?
웹 없음 조금도 C, AWK아이콘 LaTeX, TeX, HTMLtroff TeX 시스템을 거치지 않고 HTML로 텍스트 형식을 지정할 수 있습니다.
글을 읽고 쓸 줄 아는 조금도 D 마크다운 TeX 방정식을 지원합니다.Vim (literate.vim)과의 호환성
깔때기 웹 조금도 C HTMLTeX 보다 복잡한 마크업이 있지만, 보다 유연한 옵션이 많이 있습니다.
NuWEB 조금도 C++ LaTeX 단일 LP 소스를 임의의 수의 코드 파일로 변환할 수 있습니다.이 명령어는 단일 호출로 수행되며 별도의 위브 명령어와 엉킴 명령어는 없습니다.noweb의 확장성이 없습니다.
pyWeb 조금도 파이썬 구조 변경본문 Python과 같은 언어에서 사용할 수 있는 들여쓰기를 고려하지만, 모든 프로그래밍 언어에 사용할 수 있습니다.
몰리 조금도 HTML 코드의 「HTML 접기」와 「가상 뷰」를 사용해, 그것을 현대화 및 확장하는 것을 목표로 하고 있습니다.리터럴 소스 파일에 "noweb" 마크업을 사용합니다.
코드나 루비 Ruby Gem으로 사용할 수 있는 역문자 프로그래밍 도구입니다.기계 판독 가능한 소스 코드를 리터레이트 문서 소스로부터 추출하는 대신에, 리터레이트 문서는 통상적인 기계 판독 가능한 소스 코드 파일로부터 추출한다.
에맥스 조직 모드 조금도 Emacs 리스프 일반 텍스트 단일 텍스트 [20]문서 내에 여러 프로그래밍 언어의[21] 소스 코드 블록을 포함할 수 있는 Babel이 필요합니다.코드 블록은 서로 데이터를 공유하거나 이미지를 인라인으로 표시하거나 noweb 참조 [22]구문을 사용하여 순수 소스 코드로 구문 분석할 수 있습니다.
커피 스크립트 커피 스크립트 CoffeeScript, JavaScript 마크다운 CoffeeScriptMarkdown으로 작성된 소스 문서에서 들여쓰기된 [23]코드 블록을 사용하여 프로그램을 컴파일할 수 있는 "Literate" 모드를 지원합니다.
메이플 워크시트 메이플 (소프트웨어) XML 메이플 워크시트는 플랫폼에 구애받지 않는 리터럴 프로그래밍 환경으로서 텍스트와 그래픽을 라이브 코드와 조합하여 심볼 연산을 실현합니다."Maple Worksheets". www.maplesoft.com. Retrieved 2020-05-30.
울프램 노트북 울프람어 울프람어 Wolfram 노트북은 플랫폼에 구애받지 않는 리터레이트 프로그래밍 방식으로 텍스트와 그래픽을 라이브 [24][25]코드에 결합합니다.
놀이터 Swift(프로그래밍 언어) 각 문을 평가하고 코드 편집 시 실시간 결과를 표시하는 대화형 프로그래밍 환경을 제공합니다.또한 플레이그라운드를 통해 사용자는 헤더, 인라인 포맷 [26]및 이미지를 제공하는 코드와 함께 마크업 언어를 추가할 수 있습니다.
Jupyter 노트북(구 IPython 노트북) Python 및 Jupyter 커널을 사용하는 모든 것 ipynb의 JSON 형식 사양 제목, 텍스트(LaTeX 포함), 플롯 등을 기술된 코드와 조합한 노트북 형식으로 작동합니다.
nbdev 파이톤과 Jupyter 수첩 nbdev, 한 곳에 당신의 모든 코드, 시험과 문서를 넣고 Jupyter Notebooks에서 비단뱀 도서관을 개발하여 도서관 있나.
줄리아(프로그래밍 언어) 개발의 iPython에서 영감을 얻은 것은 iJulia 모드를 지원합니다.
Agda(프로그래밍 언어) 상자의 글을 프로그램의 제한된 형태를 지원합니다.[27]
이브 프로그래밍 언어 프로그램은 주로 산문이 있다.[28]이브가 살아 있는 그래픽 개발 환경과 Datalog과 마크 다운의 변형을 결합한 것이다.
R마크 다운 Notebooks(또는 RNotebooks). R, 파이썬, 줄리아와 SQL. PDF, MicrosoftWord, 리브레 오피스, HTML위젯처럼 발표하거나 슬라이드 쇼 형식+쌍방향 형식. [29]
콰르토 R, 파이썬, 줄리아와 Observable. PDF, MicrosoftWord, 리브레 오피스, HTML위젯처럼 발표하거나 슬라이드 쇼 형식+쌍방향 형식. [30]
스위브 R PDF [31][32]
니트 R LaTeX, PDF, LyX, HTML, Markdown, AsciiDocreStructured텍스트 [33][34]
코드브레이드 Pandoc, Rust, Julia, Python, R, Bash 파이썬 마크다운
삐에베 파이썬 PDF
MATLAB 라이브 에디터 매트랩 마크다운
인웹 C, C++, Inform 6, Inform 7 C, CWEB TeX, HTML 2004년부터 [35]정보 프로그래밍 언어를 작성하기 위해 사용되었습니다.
수성. 파이썬 Python, TypeScript ipynbJSON 형식 사양 Mercury는 Jupyter Notebook을 인터랙티브한 컴퓨터 문서로 만듭니다.애플리케이션, 대시보드, 보고서, REST API 또는 슬라이드로 게시할 수 있습니다.실행된 문서는 독립 실행형 HTML 또는 PDF 파일로 내보낼 수 있습니다.문서는 자동 실행을 예약할 수 있습니다.문서 존재 및 위젯은 노트북의 첫 번째 셀에 YAML 헤더를 사용하여 제어됩니다.
관찰 가능 자바스크립트 JavaScript, TypeScript TeX(KaTeX), HTML 웹 인터페이스를 통해 클라우드에 저장됩니다.컨텐츠는 웹 사이트로 게시할 수 있습니다.버전 제어. 플랫폼은 자체 버전 제어 작업을 정의합니다.코드 셀을 순서대로 구성할 수 있습니다. 관찰 가능한 노트북은 실행 그래프(DAG)를 자동으로 구성합니다.JavaScript의 최신 기능으로 구현된 풍부한 표준 라이브러리입니다.서로 다른 관찰 가능한 노트북의 셀이 서로 참조할 수 있습니다.Npm 라이브러리는 즉시 Import할 수 있습니다.
가네샤 JavaScript, TypeScript 자바스크립트 마크다운 Node.js에서 풍부한 형식의 산문이 포함된 JavaScript 또는 TypeScript 코드가 포함된 Markdown 파일로 표시되는 리터레이트 모듈을 로드할 수 있도록 합니다.롤업 또는 Vite 프론트 엔드 모듈번들러를 사용하는 경우 브라우저용 리터레이트 모듈의 번들을 지원합니다.

기타 유용한 도구는 다음과 같습니다.

  • Leo 텍스트 에디터는 옵션인 noweb 및 CWEB 마크업을 지원하는 개요 에디터입니다.Leo의 저자는 두 가지 다른 접근방식을 혼합합니다: 첫째, Leo는 큰 텍스트의 관리를 돕는 개요 편집자이고, 둘째, Leo는 문학 프로그래밍의 아이디어 중 일부를 통합합니다. 이것은 순수한 형태로 Knuth 웹 도구 또는 "noweb"과 같은 도구에 의해 사용되는 방식에서 어느 정도의 창의성과 사용만이 가능합니다.(수정된 @root 노드에서) 작성자가 정확히 예상하지 못한 방식으로 에디터의 정보를 제공합니다.그러나 이것과 기타 확장자(@file 노드)를 통해 개요 프로그래밍 및 텍스트 관리가 성공적이고 쉽고, 어떤 면에서는 읽고 쓰는 프로그래밍과 [36]유사합니다.
  • Haskell 프로그래밍 언어는 반문자 프로그래밍을 기본적으로 지원합니다.컴파일러/인터프리터는 다음 두 가지 파일 이름 확장자를 지원합니다..hs그리고..lhs; 후자는 문학가 하스켈의 약자이다.
LaTeX 소스 텍스트는 완전한 LaTeX 소스 텍스트일 수 있습니다.인터프리터는 다음과 같이 코드 환경에서 텍스트만 컴파일하기 때문에 변경 없이 컴파일할 수 있습니다.
함수를 설명하는 텍스트(% here text): \time {code} fact 0 = 1 fact (n+1) = (n+1) * fact n \end {code}여기에 더 많은 텍스트가 있습니다.
또한 코드는 Richard Bird 스타일로 표시할 수 있습니다.각 행은 보다 큰 기호와 공백으로 시작하고 코드 조각은 공백 행으로 끝납니다.
LaTeXlistings패키지가 제공하는lstlisting소스코드를 장식하는 데 사용할 수 있는 환경.이 명령어를 사용하여code다음과 같은 방법으로 기호를 인쇄하기 위해 Haskell 내에서 사용하는 환경:
\newenvironment {code}{\lstlistings [ language =Haskell]}{\endlstlistings} \endlstlings} comp :: (파형 -> 감마) -> (알파 -> 베타) -> (알파 -> 감마) (g 'comp' f) x = g (f x) \end {code}
다음과 같이 설정할 수 있습니다.
패키지는 코드 청크를 정리하는 수단을 제공하지 않지만 LaTeX 소스 코드를 다른 파일로 분할할 수 있습니다.개요는 목록 매뉴얼을 참조하십시오.
  • Web 68 Literate Programming 시스템은 Algol 68을 기본 프로그래밍 언어로 사용했지만, 프리프로세서 'tang'에는 해당 [37]언어를 사용하도록 강제하는 것이 없었습니다.
  • TEI 스킴의 제약, 변경 또는 확장을 가능하게 하는 Text Encoding Initiative의 커스터마이제이션메커니즘을 통해 사용자는 산문 문서를 One Document Do-it-all 형식으로 스키마 사양의 fragment와 혼재시킬 수 있습니다.이 산문 문서에서 스키마 및 처리 모델 파이프라인을 생성할 수 있으며 Knuth의 리터레이트 프로그래밍 패러다임이 이러한 [38]작업 방식에 영감을 준 것으로 인용됩니다.

「 」를 참조해 주세요.

  • 문서 생성기 – 문서가 소스 코드에 포함되어 소스 코드에서 생성되는 리터레이티 프로그래밍의 역순서
  • 노트북 인터페이스– 리터럴한 프로그래밍에 사용되는 가상 노트북 환경
  • Swave and Nitr – 동적 통계 보고서를 작성하기 위해 R 언어 내에서 "noweb"과 유사한 Literate Programming 도구를 사용한 예
  • 자기 문서화 코드– 문서 없이도 쉽게 이해할 수 있는 소스 코드

레퍼런스

  1. ^ a b c v w x y z Knuth, Donald E. (1984). "Literate Programming" (PDF). The Computer Journal. British Computer Society. 27 (2): 97–111. doi:10.1093/comjnl/27.2.97. Retrieved January 4, 2009.
  2. ^ Schulte, Eric (2012). "A Multi-Language Computing Environment for Literate Programming and Reproducible Research" (PDF). Journal of Statistical Software. 46 (3). doi:10.18637/jss.v046.i03. Archived (PDF) from the original on 9 November 2014. Retrieved 30 May 2020.
  3. ^ Kery, Mary Beth (April 2018). "The Story in the Notebook: Exploratory Data Science using a Literate Programming Tool". CHI '18: Proceedings of the 2018 CHI Conference on Human Factors in Computing Systems. ACM. pp. 1–11. doi:10.1145/3173574.3173748.
  4. ^ "하향식 방식과 상향식 방식이 서로 반대되는 것 같았습니다. 하나는 프로그램 설명에 적합하고 다른 하나는 프로그램 작성에 적합했습니다.그러나 WEB에 대한 경험을 쌓은 후, 프로그램이 트리가 아닌 웹으로 생각되기 때문에 하향식, 상향식 중 하나를 선택할 필요가 없다는 것을 알게 되었습니다.계층 구조는 존재하지만 프로그램에서 가장 중요한 것은 구조적 관계입니다.복잡한 소프트웨어 조각은 단순한 부품과 이들 부품 간의 단순한 관계로 구성됩니다.프로그래머의 임무는 이러한 부품과 그 관계를 인간 이해에 최적인 순서로 기술하는 것입니다.톱다운이나 보텀업과 같이 엄격하게 정해진 순서가 아닙니다." - Donald E. Knuth, Literate Programming[1]
  5. ^ 만약 이 도구의 첫 번째 버전이 WEB라고 불린 것을 기억한다면, 이 이름들에 숨겨진 재미있는 문학적인 언급은 명백해진다: "오, 우리가 처음 속이는 연습을 할 때 우리는 얼마나 엉킨 거미줄을 짜는가" – 1513년 플로든 전투에 대한 서사시 칸토 6에서 월터 스콧 경(1808)은 "마미온"의 17절이다.– 실제 인용은 1986년 5월 존 벤틀리와 도널드 커누스가 ACM 커뮤니케이션의 고전적인 프로그래밍 펄 컬럼 중 하나에 기고한 비문(vol 29 num 5 on p.365)으로 나타났다.
  6. ^ "Literate Programming" (PDF). archive.computerhistory.org. Retrieved 2019-06-03.
  7. ^

    WEB 매크로에는 최대 1개의 파라미터를 설정할 수 있습니다.단순성을 위해 이 작업을 수행했습니다. 왜냐하면 대부분의 다중 매개 변수 애플리케이션이 실제로는 단일 매개 변수 사례로 축소될 수 있기 때문입니다.예를 들어 다음과 같은 것을 정의하려고 합니다.즉, 한 매크로의 이름은 다른 매크로의 파라미터가 될 수 있습니다.이 특별한 속임수에 의해...."

    --
  8. ^ a b Knuth, Donald E.; Binstock, Andrew (April 25, 2008). "Interview with Donald Knuth". Retrieved January 4, 2009. Yet to me, literate programming is certainly the most important thing that came out of the TeX project. Not only has it enabled me to write and maintain programs faster and more reliably than ever before, and been one of my greatest sources of joy since the 1980s-it has actually been indispensable at times. Some of my major programs, such as the MMIX meta-simulator, could not have been written with any other methodology that I've ever heard of. The complexity was simply too daunting for my limited brain to handle; without literate programming, the whole enterprise would have flopped miserably. ... Literate programming is what you need to rise above the ordinary level of achievement.
  9. ^

    "WEB를 사용하면서 알게 된 또 다른 놀라운 점은 전통적인 프로그래밍 언어가 제가 무엇을 하고 있는지 깨닫지 못했지만 열등한 프로그램을 작성하게 했다는 것입니다.당초의 생각은 WEB가 문서화를 위한 도구에 불과하다는 것이었습니다만, 실제로 제 WEB 프로그램이 다른 언어로 작성된 프로그램보다 더 좋다는 것을 알게 되었습니다.

    --
  10. ^

    따라서 WEB 언어를 사용하면 프로그램을 '의식의 흐름' 순서로 표현할 수 있습니다.TANGLE은 모든 것을 PASCAL 컴파일러가 요구하는 배열로 스크램블 할 수 있습니다.WEB의 이 기능은 아마도 그것의 가장 큰 자산일 것이다; 이것은 후자의 프로그램이 좋은 코멘트를 받고 있더라도 PASCAL로 작성된 동일한 프로그램보다 훨씬 더 읽기 쉽게 만든다.그리고 프로그래머는 이제 프로그램을 웹으로 보고 심리적으로 올바른 순서로 탐색할 수 있게 되었기 때문에 하향식 대 상향식 문제에 매달릴 필요가 없다는 사실이 최근 경험에서 얻은 가장 큰 교훈일 입니다.

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

    "WEB라는 이름을 선택한 것은 WEB가 아직 컴퓨터에 적용되지 않은 몇 안 되는 영어 단어 중 하나였기 때문입니다.하지만 시간이 지날수록 저는 그 이름이 매우 마음에 들었습니다. 왜냐하면 복잡한 소프트웨어는 사실 단순한 재료를 섬세하게 조합한 웹으로 가장 잘 알려져 있기 때문입니다.복잡한 시스템은 단순한 부분을 이해하고, 그 부분과 그 이웃 간의 단순한 관계를 이해함으로써 이해할 수 있습니다.프로그램을 아이디어의 거미줄로 표현하면 그 구조적 특성을 자연스럽고 만족스럽게 강조할 수 있습니다.

    --
  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. ^ a b c d Ramsey, Norman (May 13, 2008). "An Example of noweb". Retrieved January 4, 2009.
  18. ^ ADVENT라고도 알려진 이 게임은 원래 크로더에 의해 약 700줄의 FORTRAN 코드로 작성되었다; Knuth는 그것을 WEB 관용어로 다시 표현한다.이는 literateprogramming.com 또는 Knuth의 사이트 Archived 2008-08-20 Wayback Machine에서 구할 수 있습니다.
  19. ^ de Marneffe, Pierre Arnoul (December 1973). "Holon Programming – Report PMAR 73-23". University de Liège, Service d'Informatique. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  20. ^ "Babel: Introduction".
  21. ^ "Babel Languages: Redirect".
  22. ^ "Babel: Introduction".
  23. ^ Ashkenas, Jeremy. "Literate CoffeeScript". Retrieved 13 November 2014.
  24. ^ Edwin D에 의한 컴퓨터 과학과 정보기술의 이정표.라일리, 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. ^ Yihui Xie; Joseph J. Allaire; Garrett Grolemund (2019), R Markdown: The Definitive Guide, Chapman & Hall, Wikidata Q76441281
  30. ^ Yihui Xie; Joseph J. Allaire; Garrett Grolemund (2019), R Markdown: The Definitive Guide, Chapman & Hall, Wikidata Q76441281
  31. ^ 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. 2 (3): 28–31. Retrieved 22 January 2012.
  32. ^ Pineda-Krch, Mario (17 January 2011). "The Joy of Sweave – A Beginner's Guide to Reproducible Research with Sweave" (PDF). Retrieved 22 Jan 2012.
  33. ^ Xie, Yihui (2015). Dynamic Documents with R and knitr, 2nd Edition. Chapman & Hall/CRC. ISBN 9781498716963.
  34. ^ Xie, Yihui. "knitr: A General-Purpose Tool for Dynamic Report Generation in R" (PDF). GitHub.
  35. ^ "ganelson/inweb: A modern system for literate programming". GitHub. 17 June 2022.
  36. ^ Ream, Edward K. (September 2, 2008). "Leo's Home Page". Retrieved April 3, 2015.
  37. ^ Mountbatten, Sian. "Web 68: Literate programming with Algol 68". Archived from the original on 20 January 2013. Retrieved 1 January 2013.
  38. ^ "TEI Guidelines". TEI Consortium. Archived from the original on 2018-08-22. Retrieved 2018-08-23.

추가 정보

외부 링크