Newsgroup: it.comp.lang.c++
Titolo: Codice Exception-Safe (ES)

Facendo degli esercizi, ho potuto vedere che scrivere codice ES non è 
banale. I linguaggi di IV generazione permettono di scrivere codice ES 
più facilmente? Secondo me il Garbage Collector (GC) risolve solo 
minimamente il problema perché non ci sono solo i memory leak. Il 
difficile è lasciare l'oggetto in uno stato consistente (meglio se 
assolutamente invariato) qualsiasi sia l'eccezione verificatasi. Per 
scrivere codice al 99.9% ES ho dovuto considerare aspetti abbastanza di 
basso livello del C++, quindi mi chiedo come un programmatore di Java 
possa fare. Il fatto cioè che il Java sembri così facile non può 
nascondere molti pericoli? Non ho mai programmato in Java, ma non 
potrebbe essere che con i linguaggi di IV generazione è facile scrivere 
codice di qualità media, ma molto più difficile che in C++ scrivere 
codice assolutamente a prova di bomba?
Kiuhnm


Se non altro il C++ mette a disposizione uno strumento fondamentale,
che e' la distruzione deterministica. Questo ti permette in molti casi
di parcellizzare il problema. In tutti gli altri linguaggi si fa
ricorso alla clausola "finally" dell'istruzione "try", o a meccanismi
equivalenti. Il problema fondamentale del "finally" e' che e'
inerentemente procedurale e quindi rende indispensabile passare a
pensare in modo procedurale quando si ragiona sulle eccezioni. Per un
linguaggio che viene spesso indicato come "piu' object oriented", mi
pare una notevole contradizione...
Ciao,
Nicola

 pare una notevole contradizione...
In realtà anche i costrutti try..catch vengono usati più del necessario. 
Con un po' di attenzione è possibile scrivere (non sempre, ovviamente) 
funzioni di "basso livello" molto eleganti che non ne fanno uso pur 
essendo assolutamente ES.
Per quanto riguarda la proceduralità, mi sento di dire che le funzioni 
stesse sono inerentemente procedurali, infatti quello che ho appena 
scritto è quasi un gioco di parole. Un finally non mi scandalizza più di 
un break in un while ed è per esempio molto utile per supportare la 
programmazione per contratto senza troppa fatica. Il compilatore M$ la 
supporta anche per il C++.
Il problema, secondo me, è che Java la introduce come pezza.
Kiuhnm

 Il problema, secondo me, è che Java la introduce come pezza.
Non sono sicuro di aver capito cosa intendi.
Ciao,
Nicola

 Non sono sicuro di aver capito cosa intendi.
Intendevo dire che l'apparato OO di Java non è completo se ha bisogno 
d'introdurre la finally per permettere ai suoi utilizzatori di gestire 
alcune situazioni.
Ho trovato anche un simpatico articolo. Leggi leggi :)
http://churchillobjects.com/c/11012d.html
In particolare dice:
"
Admittedly, the finally clause is not as useful in Java as it is in 
other languages, particularly those that require the developer to 
deallocate memory such as C++. Since Java does not require the 
deallocation of memory, finally is rarely necessary. Even when it can be 
useful, it is often just as easy to clean up your references after the 
last catch, especially since the exception-throwing objects must be 
declared outside the try block.
"
Kiuhnm

 >>>>>>>>>>>>>>>>>>>>>>
[...]
Non ricordavo che il compilatore non segnala gli errori nei template se 
non viene creata alcuna istanza. C'è qualche errore di sintassi qua e 
là, ma niente di grave...
Kiuhnm

 "
Ma se il "finally" e' cosi' utile in C++, com'e' che non c'e'? Che se
lo siano dimenticato ? ;-)
Ciao,
Nicola