Newsgroup: it.comp.programmare
Titolo: Linguaggi con piu' paradigmi

Salve,
qual e' il linguaggi di programmazione che supporta piu paradigmi di
programmazione? Ne esiste qualcuno che li supporta tutti? I paradigmi
esistenti sono i seguenti: ?
1. Funzionale
2. Procedurale
3. A oggetti
4. Per contratto
5. A eventi
Altri?
Grazie


6. Generico (per esempio le collezioni della libreria standard del C++).
7. Di metaprogrammazione (o metaprogrammato ?) (per esempio i template 
ricorsivi del C++).
8. Logico (per esempio il Prolog).
9. Aspect oriented programming (non ne so granche').
Non credo che esistano linguaggi che supportino tutti i suddetti paradigmi.
In alcuni casi, e' l'uso di un framework che abilita un paradigma 
all'interno di un linguaggio che non supporta nativamente tale paradigma.
Per esempio, il C++ non supporta nativamente il paradigma ad eventi e il 
prolog non supporta nativamente il paradigma ad oggetti. Tuttavia sono 
stati creati framework (come MFC) per aggingere il paradigma ad eventi 
al C++, e sono stati creati framework per aggiungere il paradigma ad 
oggetti al prolog.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 oggetti al prolog.
Ok grazie

 Quali sono quelli ricorsivi?
In C++ i template sono proprio i costrutti che permettono la 
programmazione generica. In altri linguaggi, la programmazione generica 
e' supportata tramite costrutti che in generale non si chiamano "template".
In C++, i template supportano pero' anche il paradigma di 
metaprogrammazione, che sarebbe l'elaborazione in fase di compilazione. 
Per esempio, il seguente programma, se compilato da un compilatore 
recente (diciamo, degli ultimi tre anni), stampa 720, che e' il 
fattoriale di 6, senza effettuare nessuna moltiplicazione a run-time.
Per raggiungere questo scopo, ho dovuto definire un template ricorsivo. 
Infatti, nel corpo della struttura Fact<N> si utilizza la struttura 
Fact<N - 1>.
template <int N>
struct Fact {
	enum { value = Fact<N - 1>::value * N };
};
template <>
struct Fact<0> {
	enum { value = 1 };
};
#include <iostream>
int main() {
	std::cout << Fact<6>::value;
	return 0;


Noixe ha scritto:

direi che alcune di queste cose sono imprecise, i modelli funzionale ed 
imperativo hanno effettivamente una differenza sostanziale teorica 
sotto, gli approcci DbC e ad eventi sono ad un livello differente.
Cmq, ad occhio & croce direi molto probabilmente Oz e AliceML, entrambi 
linguaggi per la piattaforma Mozart.
Siccome gli autori hanno anche scritto il libro  "Concepts, Techniques, 
and Models of Computer Programming", posso farti l'elenco dei differenti 
"modelli" (che è il termine che usano loro in modo simile a paradigma):
- dichiarativo (funzionale et al)
- concorrente dichiarativo
- concorrente con message passing
- con stato (imperativo)
- OO
- concorrente con stato condiviso
- relazionale (logico et al)
- modelli specializzati (GUI,distribuito, constraint based)
Poi sicuramente CommonLISP e Scheme sono ottimi esempi di come sia 
possibile aggiungere concetti ad un linguaggio che inizialmente non li 
prevede (ad esempio, l'AOP in common lisp è una libreria di mille righe :)

 linguaggi per la piattaforma Mozart.
Sono linguaggi di programmazione? Che piattaforma e' Mozart? In quali campi
si usa?
Grazie

 Grazie
prego, ma la prossima volta usa google :P

 prego, ma la prossima volta usa google :P
Si, e' che speravo in un riassunto del tutto, in italiano :)
Ciao