PDA

View Full Version : Metaprogrammazione


alesnoce
26-05-2005, 15:33
L'idea di aprire questa discussione mi è venuta da partecipanti al thread "Iniziare a programmare in c++".

Poiché ancora nessuno di loro l'ha aperta, lo faccio io :) .

Con metaprogrammazione, nome che probabilmente, anzi sicuramente secondo una legge di Murphy, è già stato coniato da qualcun altro, con questa accezione o con una similare, intendo l'insieme di metodologie, idee, strumenti e quant'altro riguarda la programmazione, ma non è programmazione in senso stretto, come per esempio le tecniche di design che la precedono, i test che l'accompagnano, la manutenzione e le aggiunte che la seguono.

Tutto quello che insomma concerne il ciclo di vita del software.

Probabilmente è troppo ampio come orizzonte, ma vedrò di indirizzarlo verso quello che mi interessa per la mia tesi :D .

Ripropongo in parte una domanda fatta nella discussione summenzionata, alla quale dei grandi mi hanno già risposto, ma che di là era off topic e che qui sfrutto per partire:
che metodologia di design adottare per affrontare un progetto ampio (almeno per le mie capacità) che preveda l'adozione della programmazione OO?

cionci
26-05-2005, 16:29
L'anno già aperto ;)

mjordan
26-05-2005, 17:19
Comunque, seguendo la legge di Murphy, si, il termine Metaprogrammazione e' gia' stato coniato e intende tutt'altro.
In genere si riferisce alla programmazione logica (Prolog, Lisp, Scheme) proprio perche' non segue i canoni della programmazione classica bensi' quelli della logica matematica (proposizioni, sentenze, asserzioni, ecc)

:D

fek
26-05-2005, 17:57
Comunque, seguendo la legge di Murphy, si, il termine Metaprogrammazione e' gia' stato coniato e intende tutt'altro.
In genere si riferisce alla programmazione logica (Prolog, Lisp, Scheme) proprio perche' non segue i canoni della programmazione classica bensi' quelli della logica matematica (proposizioni, sentenze, asserzioni, ecc)

:D

Quando ho letto Metaprogrammazione ho pensato subito al Template Metaprogramming e mi si e' incriccato il cervello... *track* *track* *tatrack*.

Blackat
26-05-2005, 18:56
Io interpreto il concetto di metaprogrammazione come astrazione assoluta
della programmazione, cioè quella programmazione che non è legata a nessun
linguaggio di programmazione.

La metaprogrammazione si esprime attraverso un unico linguaggio che è il
metalinguaggio. Il metalinguaggio è il linguaggio con cui si può esprimere
un ragionamento logico. Il metalinguaggio può essere anche inventato
da chi fa metaprogrammazione, l'importante è che sia dato un senso ai
simboli utilizzati o che sia un linguaggio facilmente comprensibile, lontano
da quello tecnico.
Ad esempio se devo programmare l'algoritmo che somma il valori di un array
di interi posso scrivere

For I = 0 To dim(A)
Somma = Somma + A(i)
i = i + 1
roF

Questo può essere un metaprogramma dove dim(A) ritorna la dimensione
dell'array e A(i) l'elemento i-esimo dell'array.
Questo algoritmo può essere poi trasformato da questo metalinguaggio
in qualsiasi linguaggio di programmazione esistente.

mjordan
26-05-2005, 21:13
Io interpreto il concetto di metaprogrammazione come astrazione assoluta
della programmazione, cioè quella programmazione che non è legata a nessun
linguaggio di programmazione.


Non e' 100% corretto. Cos'e' un metalinguaggio/metaprogramma e' ben definito e non soggetto a "interpretazione", nonche' uno dei fattori chiave dell'Intelligenza Artificiale. Un metaprogramma e' un programma che usa un altro programma (che in genere viene riferito come programma oggetto). Un metalinguaggio e' un linguaggio che si basa su un altro linguaggio, dove il linguaggio ausiliario e' detto linguaggio oggetto e il linguaggio base e' detto metalinguaggio. Un RSS (un Reasoning and Representation System) e' un metalinguaggio, costituito da un linguaggio formale, una semantica e una "reasoning theory", cioe' un altro linguaggio che definisce il modo con cui si possono derivare le risposte corrette. Nota che con la parola "linguaggio" non ci si deve necessariamente riferire ad un linguaggio di programmazione. Al massimo della definizione, un metaprogramma e' un programma che opera su altri programmi, come ad esempio un compilatore. Ma e' una definizione rara.
Anche una sintassi di un linguaggio di programmazione e' a tutti gli effetti, un metalinguaggio. Viene utilizzata per costruire, tramite le categorie sintattiche, appunto, un linguaggio di programmazione.
Un metalinguaggio, ha le sue regole e consente sempre si stabilire il vero e il falso mediante regole ben definite o da assunzioni considerate vere (semantica di Tarsky).


La metaprogrammazione si esprime attraverso un unico linguaggio che è il
metalinguaggio. Il metalinguaggio è il linguaggio con cui si può esprimere
un ragionamento logico. Il metalinguaggio può essere anche inventato
da chi fa metaprogrammazione, l'importante è che sia dato un senso ai
simboli utilizzati o che sia un linguaggio facilmente comprensibile, lontano
da quello tecnico.


Il linguaggio oggetto non dev'essere unico. Anzi, nel mondo reale, molto spesso e' piu' di uno. Inoltre non e' affatto vero che un metalinguaggio debba essere lontano da quello tecnico.


Ad esempio se devo programmare l'algoritmo che somma il valori di un array
di interi posso scrivere

For I = 0 To dim(A)
Somma = Somma + A(i)
i = i + 1
roF

Questo può essere un metaprogramma dove dim(A) ritorna la dimensione
dell'array e A(i) l'elemento i-esimo dell'array.
Questo algoritmo può essere poi trasformato da questo metalinguaggio
in qualsiasi linguaggio di programmazione esistente.

Quindi al momento che uno implementa un compilatore per questo linguaggio dato da te, smette di essere un metalinguaggio e diventa "linguaggio di programmazione"? No, la definizione di metalinguaggio e' parecchio piu' semplice. :) Quello e' esclusivamente uno pseudo-codice. Non da nessun mezzo per asserire verita' da proposizioni. :) Se stessimo in Filosofia, potrebbe anche essere vero. Ma in Informatica un metalinguaggio e' semplicemente un linguaggio che consente di stabilire il vero dal falso mediante altri linguaggi che definiscono proposizioni, asserzioni, negazioni.

alesnoce
27-05-2005, 09:46
L'anno già aperto ;)
Un Murphy per alesnoce! :hic:

Solo ora l'ho visto :)

Comunque, seguendo la legge di Murphy, si, il termine Metaprogrammazione e' gia' stato coniato e intende tutt'altro.
Un doppio Murphy per alesnoce!! :hic: :hic:
Ho la sbornia :D

Ritengo ancora che il termine metaprogrammazione si adatti a esprimere concettualmente l'insieme di elementi che ho elencato nel post iniziale, ma non voglio certo imporre l'accezione che gli ho dato come unica e vera :)

A ripensarci, anche ingegneria del software/software engineering va bene, solo che ormai il titolo del thread è tratto :)

VegetaSSJ5
27-05-2005, 09:50
L'anno già aperto ;)
:eek:
cionci da te questo non me lo sarei mai aspettato... :mc:

cionci
27-05-2005, 11:07
Ho abbreviato :ciapet:

mjordan
27-05-2005, 14:25
:eek:
cionci da te questo non me lo sarei mai aspettato... :mc:

Meglio un'abbreviazione senza un'h dovuta alla tastiera che un'abbreviazione nordica voluta del tipo "l'han gia' aperto" :sofico:

RaouL_BennetH
27-05-2005, 14:28
Ho abbreviato :ciapet:

Ma non dar retta a cueste cose, si sa, ogni tanto si incastrano i diti nella pastiera :D