Newsgroup: it.scienza.informatica
Titolo: Il c++ fa schifo

Chi la pensa come me?


io non del tutto, però sarei curioso di sapere cosa proponi come
sotituto.
 ciauz
-=|EgoZ|=-
remove NOSPAM from mail reply

Iniziamo:
1. La sintassi. Quanti significati hanno "<<" e ">>"
2. Come si dimostra la correttezza di un programma scritto in C++?
Per il momento penso siano piu' che sufficienti questi due temi
Ciao.

2. Come si dimostra la correttezza di un programma scritto in C++?
esattamente come faresti per un qualsiasi altro linguaggio :-)
Marco Abis su IRCnet #C++Warriors
http://www.geocities.com/SiliconValley/Foothills/6336
 interamente dedicato
al C++
ca...@technologist.com

...


Concordo pienamente con quanto dice Marco:
"la potenza e' nulla senza il controllo"
Inoltre, aggiungo che per fare una cosa ci sono molte strade,
cosi' come nei linguaggi o nei S.O., quindi non capisco la seguente
discussione attorno agli operatori di ridirezione.
Il C++ e' un ottimo linguaggio, quello che a me piace e' la sua natura
ibrida
di programmazione object oriented e di programmazione imperativa.


1. Gli operatori << e >> sono polimorifici in maniera simile a come il + tra
interi e' diverso dal + tra numeri complessi nella matematica.
2. Per quello che mi ricordo di Teoria della Computabilita' non mi risulta
si possa dimostrare il funzionamento di un programma. Se non sbaglio c'e' un
teorema che dimostra l'impossibilita'. Potrei anche sbagliarmi, pero'.
A me il C++ piace molto. Lo trovo assolutamente formale e ottimo per
scrivere applicazioni. Evito le cose del linguaggio che non mi piacciono e
cerco di non rendere illeggibile il programma.
Ciao.
Antonio Donatiello

 Chi la pensa come me?
Un po' come la penso l'ho già detto, ma riassumo:
1) Il C è nato per usare efficientemente l'architettura corrente; potrà non
piacere ma è così.
Fintanto che lavoriamo su di essa, lo trovo il miglior compromesso nello
sviluppo dei livelli bassi.
Se devi programmare un DSP e ti dicono "c'è già il compilatore C ed è
efficiente, usalo pure", tu baci i tuoi carissimi committenti.
2) Il C++ vorrebbe venire incontro all'utente in termini di migliorata
modularità e comprensibilità, ma IMHO ha un malinteso di fondo: NON è un
linguaggio ad oggetti, ma un linguaggio di basso livello a cui si è aggiunta una
infarinata degli stessi.
E la differenza è sostanziale.
Io non sono di certo un gran programmatore, né sono un gran conoscitore del
paradigma ad oggetti, ma trovo snervante che tutto quello che vorrei realizzare
con quest'ultimo si scontri inevitabilmente con "l'interpretazione" degli stessi
del C++
3) Tenendo presente il punto (2), e tenendo conto che usando quel po' di
versatilità fornita (i membri virtual) le prestazioni calano (un puntatore a
virtual in VisualC++ tiene fino a 16 byte!), si possono fare cose buone.
Mi resta comunque un dubbio: per chi è il C++?
Se si deve realizzare a basso livello, preferisco il C liscio (ho più controllo
di cosa fa).
Se invece è qualcosa di livello più alto, non sarebbe meglio usare anche un
linguaggio un po' più evoluto?!?
La conclusione è che trovo il c++ come un decente compromesso evolutivo del C,
ma non sono convinto che servisse...
bye,
	Denis

 teorema che dimostra l'impossibilita'. Potrei anche sbagliarmi, pero'.
Alting Problem. (se un programma J termina ) 
-Gabriele

Scusate per quello che ho imparato, la programmazione a oggetti e' un
metodo di programmazione come e' il top-down...cioe' si puo'
programmare a oggeti anche in assembler.
Un linguaggio OO e' solo un linguaggio in cui le problematiche di
binding degli oggetti sono integrati nel linguaggio.
Il C++ permette di programmare a oggetti ma non e' un linguaggio 
"puro" come eifell.
bye

"puro" come eifell.
Nessuno dice che il C++ sia un linguaggio ad oggetti "puro" ( e chi lo dice
si sbaglia).
mentre Eiffel, che conosco abbastanza bene anche grazie ai libri del suo
ideatore Meyer, e' OO puro.
E ALLORA?!?!?!?!?!
dire che il C++ "fa schifo" solo perche' non e' OO puro non ha alcun senso.
Allora Java e' veramente una m...a visto che e' ancora meno OO del C++
(evitiamo di far partire un'altra polemica: Java non ha ereditarieta'
multipla ed altre cose NECESSARIE alla OOP).
Il fatto che un linguaggio non sia puro non significa che non sia potente.
Il C++ permette anche la programmazione generica (STL). La potenza e' qui:
si puo' scegliere quale paradigma di programmazione scegliere. Ma non si e'
obbligati ad usarli tutti!!!!


Mi resta comunque un dubbio: per chi è il C++?
Per chiunque, anche per applicazioni a basso livello, preferisca la
strutturazione ad oggetti con i vantaggi che porta.
Ciao.
Antonio Donatiello.

...


Francesco ha scritto:
F> Chi la pensa come me?
io no! :-)
il c++ è un linguaggio molto potente.
Tutto dipende da come lo usi.
Java viene continuamente magnificato per l'assenza dei puntatori: mica l'ha
detto il dottore di usarli in c++. Si può farne a meno, quasi sempre. Ovvio
che occorre sacrificare l'efficienza a scapito di altre qualità: dipende dalle
necessità e dagli obbiettivi.
Ciao
Marco
-- 
Se non ti importa dove sei, non ti sei perso. (Regola di Rune)

...


 di programmazione object oriented e di programmazione imperativa.
A me questo fa veramente schifo. La prog. OO e' un estensione del
paradigma funzionale. come direbbe Di Pietro: Che "c''azzecca" col C?????

 cerco di non rendere illeggibile il programma.
Le ultime 2 cose te le deve dare il linguaggio. Secondo me tu chiedi troppo poco
al tuo linguaggio di programmazione. Molte cose deve essere lui a fornirtele,
non devi essere tu ad evitare feature scomode.
Caio

 l'inghippo?
Cos'e' una dimostrazione? Se io ti dico "ogni numero naturale e' divisibile per
due" e tu mi dici:
provo con 2 => ok
provo con 4 => ok
provo con 6=> ok
allora la tesi e' vera ho dimostrato un teorema. Da quando in qua' il tracing
dimostra la correttezza di un programma?
Il solo leggere cio' mi ha fatto venire i brividi.
Ciao

 obbligati ad usarli tutti!!!!
Ho sentito questa cosa anche da Stroustroup. E' penso sia una grandissima c.
Dimmi come usi il paradigma logico con il C++. O quello funzionale. Vero, Con
tipi.
Ciao



Perche' una persona sana di mente dovrebbe voler usare il paradigma logico
o quello funzionale con il C o C++ ?
Mi sembra che in queste, abbastanza sterili, discussioni su quale linguaggio
sia meglio o peggio a volte si perde di vista il fatto che un linguaggio
deve essere uno strumento, e per molti e' uno strumento di lavoro.
Ci sono delle cose per le quali e' meglio un cacciavite e altre per le
quali e' meglio una chiave inglese. E in ogni caso e' meglio padroneggiare
uno strumento limitato che  balbettare con uno potente. 
A me serve un linguaggio con il quale io possa scrivere in poco tempo
programmmi molto efficienti e molto portabili
che facciano number-crunching. Allora scelgo il C. 
O addirittura il Fortran, che ha smisurate librerie per il calcolo scientifico
gia' pronte e testate da anni e anni di intenso uso.
Se mi interessa la maledetta interazione con l'utente e le stramaledette 
finestre e mouse posso scegliere il C++ (in alcuni casi devo).
Se poi voglio fare un progetto di calcolo distribuito a basso costo
magari mi tocca pure provare a vedere se Java mi serve a qualcosa.
In generale della "prova automatica" della correttezza non potrebbe 
importarmente di meno.
Non posso rinunciare all'efficienza, alla portabilita', alla semplicita',
del C per imparare un linguaggio astruso che mi consenta di stabilire la
correttezza di a=b+c a costo di scrivere un codice lungo 10 volte tanto.
Puo' andare (forse) bene per programmare il codice per un reattore nucleare,
ma per me, e la maggior parte della gente, non ne vale la pena.
Ciao.
Giovanni.

 dire che il C++ "fa schifo" solo perche' non e' OO puro non ha alcun senso.
scusa mi sono spiegato male...
Volevo dire solo che mettersi a discutere sul fatto che il C++ e'
un lingaggio a oggetti e' abbastanza assurdo visto che programmare a
oggetti e' un modo di programmare...posso farlo anche (limitamente)
in assembler.
bye

...


 obbligati ad usarli tutti!!!!
Che il C++ sia potente č poco ma sicuro.
Si puň spaziare da programmazione quasi a livello macchina (ed inserire pure
tranquillamente routine assembler nella maggior parte delle implementazioni)
fino alla suddetta programmazione generica o ad oggetti.
Inoltre, a scanso di equivoci, preciso che io programmo sempre in C++ e mi sono
sempre trovato abbastanza bene.
(vabbč, dopo aver fatto il progettino in Prolog per IA ho avuto rigetto del C++
per qualche mese).
Perň resta un problema, che č sintetizzabile con uno slogan pubblicitario:
"la potenza č nulla senza controllo"
Ovvero in C++ si rischia troppo di fare porcherie semplicemente perchč lui te lo
permette.
Io preferirei che, a questo punto, dal C++ si estraesse "una costola" per far
nascere un linguaggio piů evoluto per realizzazioni ad alto livello, inserendo
il controllo delle asserzioni e decidendo definitivamente se debba o no essere
ad oggetti.
Un po' quello che Java poteva essere ma non č stato.
bye,
	Denis

 strutturazione ad oggetti con i vantaggi che porta.
Il problema č proprio quello: č *potenzialmente* per tutti.
Il che rischia di non farlo essere per nessuno.
Il fatto che esista un "C++: manuale di stile" indica chiaramente che il
linguaggio ti permette di fare anche cose veramente oscene (ma funzionanti).
bye,
	Denis

Salve a tutti,
    evidentemente non sono stato capito quando ho detto che la correttezza
di un programma C++ si dimostra come in qualsiasi altro programma. In breve:
innanzi tutto dobbiamo distinguere, esistono tante aree da controllare:
correttezza sintattica, correttezza semantica ma in questo caso credo che
l'oggetto di discussione sia piu' che altro la correttezza del programma in
generale (visto che le altre due sono controllate dal compilatore) e quindi,
essendo ogni programma nient'altro che un algoritmo, la correttezza
dell'algoritmo.
A questo punto non importa piu' se il programma e' scritto in C++,Java,
Basic,Pascal,Cobol,Eiffel,etc perche' un algoritmo per definizione non si
riferisce ad una particolare implementazione ma e' generale.
Ed esistono metodi matematici per dimostrare la correttezza di un algoritmo
(algoritmo parziale, totale, etc),
soprattutto in relazione alla specifica da cui si e' partiti per formulare
l'algoritmo in questione.
La tendenza nei centri di ricerca oggi e' di dimostrare la correttezza della
specifica ed usare tale dimostrazione come algoritmo.
A presto :-)
Marco Abis su IRCnet #C++Warriors
http://www.geocities.com/SiliconValley/Foothills/6336
 interamente dedicato
al C++
ca...@technologist.com


 fare questo faccio mentalmente il TRACING.
Il problema e' che prevedere tutti i "casi strani" non e' facile.

>Il problema e' che prevedere tutti i "casi strani" non e' facile.
Hai ragione. L'osservazione è intelligente. Tutto dipende da che programma
si vuole scrivere.
Ma la domanda "Come fai a vedere se un prog. C funziona?" mi sembra un po'
troppo tesa a polemizzare su teorie astruse piuttosto che a far notare punti
dolenti del linguaggio di programmazione in oggetto.
Ciao


paradigma funzionale. come direbbe Di Pietro: Che "c''azzecca" col C?????
Come che c'azzecca?
Ciao,
Fabio Alemagna