Newsgroup: it.comp.lang.c++
Titolo: Template (discorso generale, niente codice)

Da quando ho iniziato a studiare i template ho visto molte cose che non 
avrei voluto vedere. Per un uso avanzato dei template è sicuramente 
necessario servirsi delle librerie boost (mpl, lambda, ecc...) che 
alleviano in gran parte la sofferenza derivante dall'uso intensivo dei 
template.
Sia i template che le librerie boost hanno i loro problemi e le loro 
incosistenze.
Si è visto che i template sono utili ma soffrono principalmente di tre 
problemi:
- dilatano i tempi della compilazione,
- sono difficili da padroneggiare perché spesso "artificiosi" e
- ostacolano il debugging.
Penso che a questo punto bisognerebbe reintrodurre i template in C++ 
come si deve, fornendo un supporto nativo come viene fatto in linguaggi 
come Scheme (che, tra l'altro, sto studiando con molto interesse, dopo 
aver studiato e scartato Haskell).
Kiuhnm

 aver studiato e scartato Haskell).
Molti programmatori non usano mai la parola "template" nel proprio 
codice. E non e' codice scadente.
I template vengono "istanziati", ma non ne vengono "definiti.
In effetti, nel codice applicativo raramente c'e' bisogno della 
genericita'. E' solo il codice di libreria che ne ha bisogno.
Secondo me sarebbe opportuno dividere il linguaggio C++ in due linguaggi 
distinti:
* il linguaggio base, usato nel codice applicativo.
* il linguaggio avanzato, usato nel codice di libreria.
Nel linguaggio base non si possono definire template, namespace, classi 
di eccezioni, operatori e funzioni sovraccaricati.
Nel linguaggio avanzato si puo' fare tutto.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 Nel linguaggio avanzato si puo' fare tutto.
Secondo me stai pensando ai template usati in modo "ufficiale". I 
template non vengono usati solo per creare librerie, ma anche per 
rendere il codice più leggibile, breve, facile da scrivere e soprattutto 
sicuro. In C si usavano le macro, molto più limitate.
Per es. puoi (indirettamente) istruire il compilatore in modo che ti 
corregga eventuali errori di distrazione compiuti durante la scrittura 
del codice (potresti aver scritto che m = f/a^2, anziché m = f/a).
La programmazione "generativa" è un paradigma che non deve essere 
limitato all'implementazione di librerie.
Sono proprio le difficoltà legate all'uso dei template che rendono 
questo approccio spesso sottovalutato.
Kiuhnm

 
http://loki-lib.sourceforge.net/
Questo mi riporta al libro "Modern C++" che mi sono già ripromesso di 
studiare alla fine.
Kiuhnm

 questo approccio spesso sottovalutato.
Piu' che "sottovalutato" direi "sottoutilizzato". Conosci per caso 
qualche grande applicazione che lo usi? In qualunque linguaggio?


 qualche grande applicazione che lo usi? In qualunque linguaggio?
Ce ne sono di sicuro, ma probabilmente vengono usati altri approcci.
Per es. dai un'occhiata qui:
conoschttp://
www.codegeneration.net/tiki-read_article.php?articleId=64
Kiuhnm

 
http://www.codegeneration.net/tiki-read_article.php?articleId=64
Qui si parla di generatori di codice in genere, con un'enfasi sui 
linguaggi ad altissimo livello, come SQL. Non l'ho letto tutto, ma non 
mi sembra che si dica che la metaprogrammazione di template sia una 
tecnica di sviluppo ampiamente praticata nelle aziende.


 tecnica di sviluppo ampiamente praticata nelle aziende.
Ok, mi arrendo. Non ho trovato niente di più con google :)
Comunque ho visto che non sono pochi gli utenti delle librerie Boost. 
Non so però quanti usino l'MPL.
Kiuhnm

 tecnica di sviluppo ampiamente praticata nelle aziende.
In Italia sospetto che non ce ne siano, pero' la ricerca che sta dietro
alla "bibbia" dell'argomento
(
http://accu.org/index.php/book_reviews?url=view.xqy?review=g002246
) e'
stata finanziata dalla Mercedes.
Ciao,
Nicola

 aver studiato e scartato Haskell).
Nello studio dell'MPL ho incontrato questa nota:
"This need for repetition, at least at the metaprogramming library 
level, seems to be a peculiarity of C++. Most other languages that 
support metaprogramming don't suffer from the same limitation, probably 
because their metaprogramming capabilities are more than just a lucky 
accident."
Meno male che lo riconoscono anche gli autori della libreria MPL. 
Aggiungere una nuova sequenza (custom-made, insomma) all'MPL è un lavoro 
da pazzi...
Kiuhnm