Literate programming: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
FrescoBot (discussione | contributi)
m Bot: sintassi delle note e modifiche minori
mNessun oggetto della modifica
Riga 6:
 
== Storia e filosofia ==
LaIl programmazioneliterate letterariaprogramming fu introdottaintrodotto per la prima volta da Knuth nel 1984. L'intenzione principale dietro questo approccio era di trattare un programma come letteratura comprensibile agli esseri umani. Questo approccio è stato implementato presso la [[Università di Stanford|Stanford University]] come parte della ricerca sugli [[Algoritmo|algoritmi]] e sulla [[tipografia]] digitale. Questa implementazione fu chiamata " [[WEB (linguaggio)|WEB]] " da Knuth poiché credeva che fosse una delle poche parole inglesi di tre lettere che non erano già state applicate al computer.<ref>{{Cita web|url=http://www.literateprogramming.com/knuthweb.pdf|titolo=Literate Programming|cognome=|nome=|sito=archive.computerhistory.org|data=|accesso=2019-06-03|urlarchivio=|dataarchivio=|urlmorto=}}</ref> Tuttavia, assomigliaricorda correttamenteeffettivamente allala natura complicata del software delicatamente assemblato da materiali semplici.<ref name="TCJ_LP" />
 
== Concetto ==
Il literate programming consiste nello scrivere la logica del programma in un linguaggio umano con frammenti di codice e macro inclusi (separati da un markup primitivo). Le macro in un file sorgente literate sono semplicemente frasi simili a titoli o esplicative in un linguaggio umano, che descrivono le astrazioni umane create risolvendo il problema di programmazione, e nascondendo blocchi di codice o macro di livello inferiore. Queste macro sono simili agli [[Algoritmo|algoritmi]] in [[pseudocodice]] tipicamente utilizzati nell'insegnamento [[Informatica|dell'informatica]] . Queste frasi esplicative arbitrarie diventano precisi nuovi operatori, creati al volo dal programmatore, formando un ''meta-linguaggio'' in cima al linguaggio di programmazione sottostante.
 
Un [[preprocessore]] viene utilizzato per sostituire gerarchie arbitrarie, o piuttosto "reti" di macro "interconnesse,<ref>{{Citazione|"WEB's macros are allowed to have at most one parameter. Again, I did this in the interests of simplicity, because I noticed that most applications of multiple parameters could in fact be reduced to the one-parameter case. For example, suppose that you want to define something like... In other words, the name of one macro can usefully be a parameter to another macro. This particular trick makes it possible to..."|[[Donald Knuth|Donald E. Knuth]]|Literate Programming{{ref label|TCJ_LP|1|w}}}}</ref> per produrre il codice sorgente compilabile con un comando ("tangle" o "groviglio") e la documentazione con un altro ("weave" o "trama"). Il preprocessore offre anche la possibilità di generare il contenuto delle macro e di aggiungere le macro già create in qualsiasi posizione nel testo del file sorgente del programma, eliminando così la necessità di tenere presente le restrizioni imposte dai linguaggi di programmazione tradizionali o di interrompere il flusso del pensiero.
Riga 19:
 
=== Contrasto con il classico processo di generazione della documentazione ===
Molto spesso si fraintendechiama ilerroneamente literate programming<ref name="MJD2000" /> peril processo riferirsidi soloestrazione alladella documentazione formattata prodotta da un file comune con codice sorgente e commenti - che è propriamente chiamata generazione di documentazione - o ai commenti copiosamente inclusi nel codice. Questo è il contrario del literate programming: il codice ben documentato o la documentazione estratta dal codice segue la struttura del codice, con la documentazione incorporata nel codice; mentre nel literate programming, il codice è incorporato nella documentazione, con il codice che segue la struttura della documentazione.
 
Questo malinteso ha portato alcuni a sostenere che gli strumenti di estrazione dei commenti, che i sistemi [[Perl]] Plain Old Documentation o [[Java (linguaggio di programmazione)|Java]] [[Javadoc]], siano "strumenti per il literate programming". Tuttavia, poiché questi strumenti non implementano la "rete di concetti astratti" che si nasconde dietro il sistema di macro in linguaggio naturale, o forniscono la capacità di cambiare l'ordine del codice sorgente da una sequenza imposta dalla macchina in una comoda per la mente umana, non possono essere correttamente chiamati strumenti di literate programming nel senso inteso da Knuth.<ref name="MJD2000">{{Cita web|url=https://www.perl.com/pub/tchrist/litprog.html/|titolo=POD is not Literate Programming|cognome=Dominus|nome=Mark-Jason|wkautore=Mark Jason Dominus|sito=Perl.com|data=March 20, 2000|urlarchivio=https://web.archive.org/web/20090102151452/http://www.perl.com/pub/a/tchrist/litprog.html|dataarchivio=January 2, 2009|urlmorto=no}}</ref><ref>{{Citazione|"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 Knuth|Donald E. Knuth]]|Literate Programming{{ref label|TCJ_LP|1|z}}}}</ref>
 
=== Critica ===
Nel 1986, [[Jon Bentley]] chiese a Knuth di dimostrare il concetto di literate programming scrivendo un programma in WEB. Knuth tirò fuoriprodusse un lungo elencolistato monolitico di 8 pagine che fu pubblicato insieme a una critica di Douglas McIlroy di Bell Labs. McIlroy ha elogiato la complessità della soluzione Knuth, e la sua scelta di una struttura di dati ( hash trie di Frank M. Liang), ma ha notato che una più pratica, molto più veloce da implementare, debuggare e modificare soluzione del problema richiederichiedeva solo sei righe di script shell riutilizzando standard utilities [[Unix]] . McIlroy ha concluso:<ref>{{Cita pubblicazione|autore=Jon Bentley|linkautore=Jon Bentley (computer scientist)|anno=1986|titolo=Programming pearls|volume=29|pp=471-483|url=https://www.cs.tufts.edu/~nr/cs257/archive/don-knuth/pearls-2.pdf|autore2=D. E. Knuth|autore3=M. D. McIlroy|wkautore3=Douglas McIlroy}}</ref>
 
''Knuth ci ha mostrato come programmare intellegibilmente, ma non saggiamente. Apprezzo la disciplina. Non apprezzo il risultato. Ha creato una sorta di intricato uovo Faberge di qualità industriale, magnificamente lavorato, rifinito oltre ogni ordinario desiderio, un autentico pezzo da museo.''
 
McIlroy ha successivamente ammesso che la sua critica era ingiusta, dal momento che ha criticato il programma di Knuth su basi ingegneristiche, mentre lo scopo di Knuth era solo quello di dimostrare la tecnica del literate programming.<ref>{{Cita web|url=https://www.princeton.edu/~hos/mike/transcripts/mcilroy.htm|titolo=Interview with M.&nbsp;D. McIlroy|cognome=Michael S. Mahoney|wkautore=Michael Sean Mahoney|data=18 August 1989}}</ref> Nel 1987, ''[[Communications of the ACM]]'' ha pubblicato un articolo di follow-up che illustrava il literate programming con un programma C che combinava l'approccio artistico di Knuth con l'approccio ingegneristico di McIlroy, con una critica di John Gilbert.<ref>{{Cita pubblicazione|autore=Christopher J. Van Wyk|data=July 1987|titolo=Literate programming|volume=30|numero=7|pp=593-599|url=https://www.cs.upc.edu/~eipec/pdf/p583-van_wyk.pdf|autore2=David R. Hanson|autore3=John Gilbert|wkautore2=David Hanson (computer scientist)}}</ref>