Newsgroup: it.comp.ia
Titolo: Linguaggi 4 Generazione

Nello sviluppo dei linguaggi di quarta generazione si cerca di utilizzare la
forma più "dichiarativa" nel linguaggio per la rappresentazione del
programma.
Ho il sospetto che questo termine non sia il più appropriato poichè mi
sembra che il programma scritto indichi implicitamente sempre un programma
ad alta complessità per la soluzione del problema .
Per spiegare meglio volgio portare un esempio del problema dell '
ordinamento.
In un linguaggio di quarta generazione la scrittura di un programma di
ordinamento sarebbe qualcosa del tipo (piu' o meno implicita) : dati n
numeri in input cerca fra tutte le configurazioni possibili quella che
soddisfa il vincolo di ordine fra gli elementi.
Eseguendo alla lettera passo passo questo programma abbiamo una complessità
di N! e da un linguaggio di quarta generazione ci si aspetta che questo dia
la soluzione in un tempo nlogn. Cioè ci si aspetta che data una descrizione
del problema ad alta complessità il linguaggio trovi la soluzione eseguendo
un programma a bassa complessità.
Fino a qui sembra solo una sostituzione di termini , però il termine ad alta
complessità mette in luce alcune questioni interessanti.
La prima osservazione che si può fare riguarda il punto di forza dei
linguaggi di quarta generazione cioè dato un problema è spesso molto più
facile scrivere la soluzione del problema ad alta complessità che non quella
a minima , è molto più semplice esprimere l' ordinamento così come fatto
sopra rispetto alla scrittura di un quicksort o un radix.
Non a caso ho utilizzato il termine spesso ; perchè non è sempre vero .
In termini più generali direi che è spesso più facile esprimere un problema
ad alta complessità temporale oppure ad alta complessità spaziale ma anche
in questo caso non è sempre vero.
Partendo da questo presupposto si potrebbe pensare ad un compilatore di
quarta generazione che lavori in tutte le direzioni cioè che converta un
problema scritto ad una certa complessità spazio-temporale in un programma
che vada ad esaurire le risorse spazio-temporali messe a disposizione per
dare la soluzione migliore.
Inoltre da questa prospettiva i SAT solver sembrerebbero dei riduttori
naturali di complessità temporale, funzionano a tutte le complessità?
Esiste un corrispondente nel lato opposto cioè un metodo automatico per
convertire un programma nel suo corrispondente ad alta complessità?
Potrei andare ancora avanti in questo senso ma per il momento sarei
interessato a dei commenti a questa parte di analisi.
Ciao, Denis.

 soddisfa il vincolo di ordine fra gli elementi.
non sono d'accordo.
Per come la vedo io l'idea di un 4GL è di esprimere dichiarativamente il 
problema, ma non implica la risoluzione in un certo modo.
L'esempio del sort è a mio avviso fuorviante perché i 4GL mirano a 
rendere dichiarativi problemi di livello molto superiore.
E' difficile pensare che ci sia qualcosa di non dichiarativo in una 
espressione come:
  sort(sequenza)
che pure è comune in molti linguaggi di alto livello.
L'idea di scrivere un sort in un linguaggio di alto livello è quindi un 
non problema. A nessuno verrebbe in mente di scrivere una sort in SQL, 
ed il concetto si estende al fatto che un 4GL ha implicitamente un 
ambito di applicazione limitato e non dovrebbe essere usato per fare 
cose per cui non è stato progettato (IMHO).
Snippo il resto avendo negato l'assunto ;)

 convertire un programma nel suo corrispondente ad alta complessità?
Anche qui non capisco che cosa intendi: certamente dato un programma se 
ne puo` ottenere uno equivalente che e` piu` costoso (basta aggiungere 
delle istruzioni che non fanno niente ...)
Ciao,
Marco
--
http://www.ing.unife.it/docenti/MarcoGavanelli/

Scusa la mia ignoranza in materia, ma esistono gia' dei prototipi di 
compilatori di linguaggi di 4° livello?
Cioe', esiste gia' una cosa tipo il computer di star trek che gli dico "fammi 
questo" e lui capisce cosa intendo e mi tira fuori un programma che fa 
esattamente quello che dico io ?
Oppure stiamo parlando di una ipotetica quarta generazione di linguaggi ?

Giallanon ha scritto:

non è che sia ipotetica... i linguaggi di quarta generazione sono tutti 
queli linguaggi inventati per uno scopo specifico, e non general 
purpose: SQL, xBase, Progress, ABAP...
non è fantascienza, ma una semplice
  SELECT LastName, FirstName FROM employees WHERE DeptID=3
fa una quantità mostruosa di cose..

 significato.
Dire se è esatto oppure no il termine "dichiarativo" richiederebbe una
definizione dello stesso ma non è mio interesse entrare nel merito di
questo.
La mia intenzione è quella di proporre una visione alternativa della cosa e
capire se è lecito oppure no sostituire un "dichiarativo" con "alta
complessità" .
Cosa accade se chiamiamo questi linguaggi non come dichiarativi ma come
risolutori di problemi espressi come programmi  ad alta complessità
eseguendo programmi a bassa complessità che diano le medesime soluzioni?
Ciao, Denis.

 delle istruzioni che non fanno niente ...)
In effetti sono stato un po' vago . Intendo un programma costruttore di
approssimazioni di complessità di Kolmogorov.
Ciao, Denis.

 fa una quantità mostruosa di cose..
Bhe... mica tanto mostruosa:
1) cerca la tabella employees
2) posizionati sulla prima riga
3) se il campo DeptId!=3 => vai a 5
4) aggiungi LastName, FirstName all'output
5) prossima riga... se non sono finite => vai a 3
Certo... con una manciata di Join, order by e having... le cose possono 
diventare veramente mostruose... ;)))
Stefano