Literate programming: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: sintassi delle note e modifiche minori |
mNessun oggetto della modifica |
||
Riga 6:
== Storia e filosofia ==
== 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
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
''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. 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>
| |||