Literate programming: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
ortografia |
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti. Etichette: Modifica visuale Modifica da mobile Modifica da web per mobile Attività per i nuovi utenti Suggerito: aggiungi collegamenti |
||
Riga 3:
Il paradigma del literate programming, come concepito da Knuth, rappresenta un allontanamento dalla scrittura di programmi per computer nel modo e nell'ordine imposti dal computer, e consente invece ai [[Programmatore informatico|programmatori]] di sviluppare programmi nell'ordine richiesto dalla logica e dal flusso dei loro pensieri.<ref>{{Cita|Knuth}}{{Citazione|I had the feeling that top-down and bottom-up were opposing methodologies: one more suitable for program exposition and the other more suitable for program creation. But after gaining experience with WEB, I have come to realize that there is no need to choose once and for all between top-down and bottom-up, because a program is best thought of as a web instead of a tree. A hierarchical structure is present, but the most important thing about a program is its structural relationships. A complex piece of software consists of simple parts and simple relations between those parts; the programmer's task is to state those parts and those relationships, in whatever order is best for human comprehension not in some rigidly determined order like top-down or bottom-up}}</ref> I literate programs sono scritti come un'esposizione ininterrotta della logica in un linguaggio umano ordinario, proprio come il testo di un [[saggio]], in cui sono incluse le macro per nascondere le astrazioni e il [[codice sorgente]] tradizionale.
Gli strumenti per il literate programming (LP) vengono utilizzati per ottenere due rappresentazioni da un [[file sorgente]] literate: uno adatto per ulteriori compilazioni o [[File eseguibile|esecuzioni]] da un computer, il codice "aggrovigliato" o "tangled" e un altro per la visualizzazione come documentazione formattata, che si dice sia "intessuta" o "woven".<ref name="ObliqueScottReference">Se si ricorda ch la prima versione dello strumento era chiamata WEB, l'interessante riferimento letterario nascosto da Knuth in questi nomi diventa ovvio:{{Citazione|Oh, what a tangled web we weave when first we practise to deceive|autore=[[Sir Walter Scott]], in Canto VI, Stanza 17 di ''[[Marmion (poema)|Marmion]]'' (1808), un poema epico sulla [[battaglia di Flodden Field]] del 1513.}} La citazione reale apparve come un'epigrafe all'interno di un articolo pubblicato nel maggio del 1986 da Jon Bentley e Donald Knuth in una colonna di ''Programming Pearls'', presente in ''Communications of the ACM'', vol. 29, n. 5, p.365.</ref> Mentre la prima generazione di strumenti di literate programming era specifica per un certo linguaggio di programmazione, i successivi sono indipendenti ed esistono al di sopra di questi.
== Storia e filosofia ==
Riga 11:
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 algoritmi in [[pseudocodice]] tipicamente utilizzati nell'insegnamento dell'[[informatica]]. Queste frasi esplicative arbitrarie diventano precisi nuovi operatori, creati al volo dal programmatore, formando un ''metalinguaggio'' in cima al linguaggio di programmazione sottostante.
Un [[preprocessore]] viene utilizzato per sostituire gerarchie arbitrarie, o piuttosto "reti" di macro "interconnesse,<ref>{{Cita|Knuth}}{{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...}}</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 [[Linguaggio di programmazione|linguaggi di programmazione]] tradizionali o di interrompere il flusso del pensiero.
=== Vantaggi ===
Riga 118:
* [[Axiom]], che si è evoluto da scratchpad, un sistema di calcolo algebrico per computer sviluppato da IBM. Ora è sviluppato da Tim Daly, uno degli sviluppatori di scratchpad, Axiom è totalmente scritto come literate program.
* noweb è indipendente dal linguaggio di programmazione del codice sorgente. È noto per la sua semplicità, data la necessità di utilizzare solo due convenzioni di markup del testo e due invocazioni di strumenti e consente la [[formattazione del testo]] in HTML anziché passare attraverso il sistema TeX.
* ''Literate'' è un "moderno sistema di literate programming". Come noweb, funziona con qualsiasi linguaggio di programmazione, ma produce HTML con evidenziazione della sintassi e cerca di conservare tutti i vantaggi di CWEB, incluso l'output formattato come CWEB. Altri notevoli vantaggi rispetto agli strumenti precedenti includono l'essere basato su Markdown e la generazione di codice "aggrovigliato" ben formattato.<ref>{{Cita web|autore=Zachary Yedidia|data=24 luglio 2019|titolo=A literate programming tool for any language|lingua=en|accesso=30 luglio 2019|sito=GitHub|url=https://github.com/zyedidia/Literate}}</ref>
* FunnelWeb è un altro strumento LP in grado di produrre output HTML. Ha un markup più complicato (con "@" che sfugge a qualsiasi comando FunnelWeb), ma ha molte opzioni flessibili. Come noweb, è indipendente dal linguaggio di programmazione del codice sorgente.<ref>{{Cita web|url=http://www.ross.net/funnelweb/|urlmorto=sì|urlarchivio=https://web.archive.org/web/20190604103010/http://www.ross.net/funnelweb/|sito=FunnelWeb|titolo=The FunnelWeb Literate Programming Tool|lingua=en}}</ref>
| |||