Newsgroup: it.comp.programmare
Titolo: Sviluppo, librerie e standard

Mi è sempre piaciuto programmare. Ora che sono all'università ho 
cominciato ad approfondire un po' la questione e ho scoperto l'abisso che 
c'è fra "programmare" e "programmare bene". Vorrei esercitarmi sulla 
seconda cosa. E come primo obiettivo da apprendere mi sono posto il 
riutilizzo del software.
Dovendo scrivere un software per un determinato scopo, può succedere 
(indipendentemente dal linguaggio) che la libreria standard non sia 
sufficiente. Mentre prima dicevo "mi faccio da solo ciò che mi serve" ora 
ho capito che non ha senso, sopratutto se qualcuno l'ha già fatto.
Si usano quindi delle librerie, ma quali? Penso che affinchè il software 
possa essere compilato e mantenuto facilmente sia meglio che queste 
librerie siano molto diffuse. Allora ho pensato agli "standard" GNU che 
sono diffusi e liberi, ma poi ho visto che anche questi hanno le loro 
limitazioni.
La domanda è: che scopo mi devo prefiggere nella ricerca di una libreria? 
Qualcosa di quanto più vicino ad uno standard (es: Boost) o qualcosa di 
semplicemente molto diffuso? Meglio software libero o con altre licenze? 
Se probabilmente dovrò usare la grafica, meglio usare le librerie 
accessorie (come quelle fornite da Qt o GTK)??

 accessorie (come quelle fornite da Qt o GTK)??
Molti sistemi di programmazione vengono forniti dotati di librerie 
grafiche standard. Non e' il caso del C++, che sembra essere il 
linguaggio che interessa a te.
I criteri di scelta sono gli stessi citati prima.
In particolare, ho sentito parlare molto bene di QT.
-- 
Carlo Milanesi
http://digilander.libero.it/carlmila

 sentito parlare molto bene di QT.
Partendo da questi "punti fermi", nel momento della scelta, quali sono i 
criteri guida? Ad esempio, dovendo utilizzare i thread, cercando un po', 
trovo che ci sono: Boost Threads, Qt Threads, OpenThreads.
Tutti sembrano abbastanza diffusi e presumibilmente di buona qualità, ma 
perchè preferire uno ad un altro? La scelta è puramente 
"estetica" (scelgo quelli che mi ispirano di più) o ad esempio sono 
meglio i Qt Threads perchè se dovessi espandere la mia applicazione ho 
già una libreria molto ampia ed integrabile? O i Boost Threads perchè 
forse un domani diventeranno standard? O gli altri perchè sono leggeri?
La mia paura è scrivere un programma e poi vedere che per qualche motivo 
devo "convertirlo" usando qualche altra libreria, che sarebbe un vero 
incubo!!
Grazie

 incubo!!
Non e' affatto semplice scegliere una tecnologia e spesso ci sono 
controversie.
Comunque ecco alcuni altri criteri che io uso.
La scelta non dovrebbe mai essere estetica ( a parte ovviamente per 
l'interfaccia utente), bensi' ingegneristica.
Non e' opportuno scegliere una libreria solo perche' serve una piccola 
parte di essa. Nell'esempio, Boost e QT sono librerie enormi, che hanno 
anche funzioni per gestire i thread. Non mi sembra opportuno usare i 
thread di QT se non usi nient'altro di QT o i thread di Boost se non usi 
nient'altro di Boost.
Infine tieni conto che l'imminente nuovo standard del linguaggio C++ sta 
per introdurre alcune funzioni per gestire la programmazione 
multithread: 
http://en.wikipedia.org/wiki/C%2B%2B0x#Threading_facilities
Ma questo e' un argomento per un altro newsgroup.


 nient'altro di Boost.
Non sono completamente d'accordo. Per esempio Boost e' una libreria
immensamente eterogenea e composta (diciamo che e' piu' che altro un
cappello sotto cui stanno tantissime librerie di altissima qualita').
E' assolutamente probabile usarne pochissimi pezzi in ciascun progetto.
Tipicamente si inizia ad usarne *un componente*. Oltrettutto boost e'
per la maggior parte a header files, ergo ne "paghi" proprio solo quello
che usi.
Io sono biased, nel senso che per me C++ e' std+boost a meno che non sia
specificato altrimenti. Fra le estensioni tr1 che boost mi da gia' e
tanti altri vari componenti che fanno comodo di volta in volta e' gran
comodo usarla.
Oltretutto il punto e' che e' piuttosto frequente inizare ad usare (per
dire) i threads e poi cominciare ad usare un altro pezzo di qualche
libreria (filesystem?). A questo punto si e' scelta la libreria che fa
solo threads e ci si trova davanti alla scelta se passare anche quello
con Boost oppure cercare un'altra libreria per il filesystem che non sia
boost o ancora usare il filesystem di boost e i threads di open threads.
Certo, una buona analisi eviterebbe tutto questo per cose "vistose".
Tuttavia e' difficile prevedere a livello di analisi le strutture dati
che si vorranno usare, gli algoritmi, bind, lambda e compagnia. Questa
roba salta fuori mentre si implementa, averla intuita a livello di
analisi indicherebbe un'eccessiva particolarizzazione dell'analisi.
In questo senso *io* suggerisco di considerare boost come "usabile
liberamente" e vado a pescare per prima cosa da boost, a meno che il
componente specifico non sia fatto veramente in modo cervellotico.
Riguardo a Qt che dire... e' nato come toolkit grafico, ma e' un
framework di altissima qualita'. A me "pesa" il fatto che ci sia una GUI
e concettualmente mi da fastidio usare Qt senza usare una GUI. Ma
sbaglio io: di fatto Qt offre ottime strutture dati che spesso per
comodita' d'uso superano anche quelle dalla STL, networking, IPC,
threads e tutto. Corredato da ottima documentazione.
-- 
-riko

 boost o ancora usare il filesystem di boost e i threads di open threads.
Era questo il motivo per cui mi riferivo all'ipotesi di usare "librerie 
giganti": cominci a usare quello che serve e poi se e quando devi 
espandere sei già nel quadro giusto per far tutto, senza riscrivere 
niente (si spera).
Grazie per i consigli, ora mi darò da fare!