Newsgroup: it.comp.lang.c++
Titolo: c++ vs java: la solita domanda

Salve ragazzi, ho da proporvi la solita domanda in termini un po' piu'
personali. Se vi rompete non leggete sto messaggio. Capisco quanti milioni
di volte si faccia la stessa domanda.
E' da ormai 3 anni che lavoro con java a livelli amatoriali (con
l'università a livello professionale, poi per i fatti miei). Sono arrivato a
fare lavori abbastanza simpatici e lunghi (decine di classi) e posso
definirmi abbastanza addentro al linguaggio. Adesso pero', sempre a livello
amatoriale, sento la necessità di rispolverare il buon vecchio c++ che ho
fatto l'anno scorso e non più toccato. Prima programmavo "a basso livello"
in QBasic (10 anni fa) e il c++ è sicuramente + a basso livello di java...
La domanda è: mi conviene avvicinarmi al c++ a livello amatoriale come ho
fatto cn java? per scrivere una finestra ci devo stare anni!!! oppure resto
ad approfondire la tazza a livello indeterminato?
Voi avete scelto il c++? oppure programmate in entrambi i linguaggi?
--
~\__________________________________/~
Heard melodies are sweet, but those unheard
Are sweeter; therefore, ye soft pipes, play on,
- Not to the sensual ear, but, more endear'd,
Pipe to the spirit ditties of no tone."
                 (J. Keats, "Ode on a Grecian Urn").
______________________________________

 Voi avete scelto il c++? oppure programmate in entrambi i linguaggi?
Il C++ non è un linguaggio scritto per fare finestre, tant'è che nello 
standard non esiste alcuna libreria grafica (a differenza di J2SE o J2EE). 
Ogni volta che si scrive un programma servirebbe prima capire cosa deve fare 
e quali sono le caratteristiche che deve avere. Ad esempio sceglierei C++ se 
dovessi sviluppare programmi che richiedono maggiore efficienza, velocità e 
"vicinanza" al sistema operativo, userei java per sviluppare programmi che 
richiedono maggiore portabilità e riuso. Ad ogni modo i tempi di 
apprendimento di C++ sono molto più lunghi di quelli richiesti per java.
Bye
Andrea

 ad approfondire la tazza a livello indeterminato?
Ripassati un po di linguaggio (c++) ma soptrattutto usa la libreria
standard. Prenditi "The C++ Standard Library - A Tutorial and Reference"
di Josuttis. Attento a come funzionano le eccezioni tra Java e C++. Per
le finestre usa quello che ti pare, magari una cross-plattform tipo
QT o wxWidgets. Quando stai avanti con std::, vediti pure 
boost.org
. I
thread in C++ non ci sono devi usare una libreria. Anche se hanno
sintasse simile, dissociali completamente e non fare paragoni: c++ e
java hanno runtime troppo differenti.
Saluti
-- 
int

 apprendimento di C++ sono molto più lunghi di quelli richiesti per java.
Quoto. 
Non lo vedo come "linguaggio per tutti". Richiede sforzo e
determinazione. E (forse sara` colpa mia) ha una tendenza a lasciarsi
dimenticare facilmente (nel senso che se lo si abbandona per un poco, e`
facile scordarsi certe cosette), a differenza per esempio del C. 
Insomma... il C++ e` un'ottimo investimento. Bisogna pero` chiedersi se
va nella direzione incui si vuole andare.
-- 
Adesso quando i medici di turno rifiuteranno di esserti d'aiuto / perchè
venne un polacco ad insegnargli che è più cristiano imporsi col rifiuto
pretenderanno che tu torni indietro/e ti costringeranno a partorire per
poi chiamarlo figlio della colpa / e tu una Maddalena da pentire

 del codice con il livello :o)
Non sono d'accordo sul fatto che C++ e Java abbiano lo stesso language 
level e neanche che sul fatto che C e C++ abbiano livelli diversi.
Il rapporto citato presentava solo due livelli, definiti "Non-script 
group" e "Script group". Al primo gruppo erano assegnati i linguaggi C, 
C++, e Java, mentre al secondo gruppo erano assegnati i linguaggi Perl, 
Python, Rexx, e Tcl.
A parte il fatto che tale suddivisione considera C e C++ dello stesso 
livello, osservo alcune cose:
- L'autore non rappresenta tutta la comunita' informatica. Alcuni 
considerano Java piu' simile a Python che a C.
- I livelli possono essere estesi. Per esempio, il linguaggio Assembly 
e' indubbiamente di livello piu' basso di tutti i lingaggi citati, e il 
linguaggio SQL e' indubbiamente di livello piu' alto di tutti i lingaggi 
citati.
- I livelli possono essere raffinati. Per esempio, si puo' considerare 
C, C++, e Java appartenenti a tre sottolivelli del proprio livello.
La mia opinione e' che C e C++ condividono i due seguenti aspetti 
importanti che li rendono di livello simile e piu' basso di Java.
- La semantica di C e C++ non e' completamente specificata, cioe' ci 
sono (molti) costrutti sintatticamente validi ma dalla semantica non 
definita. In Java mi pare invece che tutti i programmi sintaticamente 
validi hanno una semantica completamente definita. Consideriamo per 
esempio le seguenti istruzioni, presenti in tutti e tre i linguaggi:
a[3] = 10;
f(g(), h());
Se l'array "a" ha solo due posizioni, la prima istruzione in C o C++ ha 
un comportamento indefinito, mentre in Java sollevera' certamente 
un'eccezione.
La seconda istruzione in C e C++ portebbe chiamare prima la funzione g e 
poi la funzione h oppure il contrario, mentre in Java chiamera' 
certamente prima una funzione e poi l'altra (non mi ricordo il criterio).
- In C ad ogni tipo si puo' aggiungere (anche piu' volte) il 
modificatore "*" che rende il tipo puntatore corrispondente.
In C++, oltre a tale possibilita', e' stato aggiunto il modificatore "&" 
che rende il tipo riferimento corrispondente.
In Java non ci sono modificatori analoghi.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 In Java non ci sono modificatori analoghi.
E quindi? Non capisco questo come si lega con il livello di linguaggio.
:)


 una semantica completamente definita. Consideriamo per
[snip]
Java e C++ sono due linguaggi sostanzialmente diversi. probabilmente insieme 
alla poratbilità e al riuso dovevo aggiungere come punto di forza di Java 
anche la sicurezza (built-in security, garbage collection) . Ma di fatto 
questo non basta per dire che Java è un linguaggio più espressivo o più di 
alto livello del C++, come non basterebbe al C++ se gli si porta dalla sua 
parte il fatto di possedere overloading degli operatori, aritmetica dei 
puntatori e classi generiche.
Bye
Andrea

 validi hanno una semantica completamente definita.
Java è un progetto della SUN, con il suo linguaggio e la sua pattaforma
virtuale. Il grosso del lavoro sta tutto nella virtual machine, che
esegue il compilato e non gli fa notare le differenze tra le
piattaforme reali. Inoltre, la libreria standard di Java implementa una
marea di funzionalità proprio perché il programmatore abbia una visione
unica delle differenze, delegando sempre alla virtual machine il compito
di sbrigarsela.
Forse per questo la virtual machine SUN di Java è scritta principalmente
in C++ :-)
Magari perchè il C++ è molto più astratto dalla piattaforma, il suo
runtime è molto più virtuale. Il grosso del lavoro sta nel compilatore,
che produce compilato da fare eseguire ad una determinata piattaforma.
Inoltre, la libreria standard del C++ non implementa la marea di
funzionalità del Java perché lascia al programmatore la possibilità (la
responsabilità è del progetto :-) di scegliere tra quelle già esistenti
in C.
Saluti
-- 
int

 di molto).
C'e' un fraintendimento linguistico sul significato di livello del 
linguaggio.
Ogni linguaggio ha alcune caratteristiche di basso livello e altre di 
alto livello.
A quanto pare per Capers Jones il livello di un linguaggio e' definito 
dalle sue caratteristiche di livello piu' alto. In tale senso, 
aggiungendo ad un dato linguaggio caratteristiche di basso livello, come 
l'aritmetica dei puntatori, non se ne cambia il livello, mentre 
aggiungendo caratteristiche di alto livello, come la programmazione 
generica, se ne alza il livello. In tal senso, convengo che sia corretto 
asserire che C++ ha lo stesso livello di Java, ed entrambi sono a 
livello piu' alto di C.
Per me, invece, il livello di un linguaggio era definito dalle sue 
caratteristiche di livello piu' basso. In tale senso, aggiungendo ad un 
dato linguaggio caratteristiche di basso livello, come l'aritmetica dei 
puntatori, se ne abbassa il livello, mentre aggiungendo caratteristiche 
di alto livello, come la programmazione generica, non se ne cambia il 
livello. In tal senso, mi pareva corretto asserire che C++ ha lo stesso 
livello del C, ed entrambi sono a livello piu' basso di Java.


 livello del C, ed entrambi sono a livello piu' basso di Java.
Quindi per te non conta quanto ti permette di astrarre un linguaggio
(offrendoti cose di alto livello), ma e` importante che ti *impedisca*
di fare cose di basso livello?
Poi basta intendersi su cosa si intende e va tutto bene :))
-- 
Adesso quando i medici di turno rifiuteranno di esserti d'aiuto / perchč
venne un polacco ad insegnargli che č piů cristiano imporsi col rifiuto


 livello del C, ed entrambi sono a livello piu' basso di Java.
Io credo che se io ho un linguaggio di livello L perche ti permette di fare 
cose di livello L, anche se gli si aggiunge caratteristiche che ti 
permettono di fare cose di livello (L-1), il linguaggio rimane comunque di 
livello L.
Comunque è solo un punto di vista, ossia anche questa è un opinione, non un 
fatto oggettivo.
Bye
Andrea 

 di fare cose di basso livello?
Beh, ritengo che nel classificare un linguaggio hanno importanza 
entrambi gli aspetti.
Per esempio, sebbene sia possibile scrivere in C++ programmi simili a 
programmi scritti in Java, il fatto che il linguaggio permetta anche 
costrutti di basso livello, unito al fatto che molti programmatori C++ 
erano in passato programmatori C e al fatto che molte librerie o 
applicazioni C++ erano state scritte originariamente come librerie o 
applicazioni C, genera il fatto che gran parte del codice C++ esistente 
nell'industria abbia un livello di astrazione ben inferiore alla media 
dei programmi scritti in Java.
Inoltre, il fatto che il linguaggio non contenga caratteristiche di 
basso livello rende piu' semplice l'apprendimento, soprattutto a chi non 
ha una formazione tecnico/industriale (per es. i ragionieri), rende piu' 
chiari i messaggi d'errore del compilatore, rende piu' testabile e 
debuggabile il software.
 > Poi basta intendersi su cosa si intende e va tutto bene :))
Ovviamente!


concordo...in java questa mancanza di puntatori mi sta facendo impazzire


perfetto.... anke io penso, facendo magari qualche assunzione abbastanza
approssimativa, che se java sfrutta delle classi (ops..non fulminatemi)
ovvero delle funzioni native per dei compiti molto specifici mi viene da
pensare che il c++ è piùa basso livello e più potente da questo punto di
vista...
"int i=0 0" <'@.'> ha scritto nel messaggio
news:h5nde.267462$ms1.1...@tornado.fastwebnet.it...


Grazie mille dei tips... io avevo cominciato la lunga strada verso la
programmazione in c++.....sapete qual'č la cosa che mi fa impazzire di piů?
L'uso di puntatori e la ridefinizione degli operatori. Una cosa alquanto
potente!!!!
"int i=0 0" <'@.'> ha scritto nel messaggio
news:C4qce.16676$ms1...@tornado.fastwebnet.it...


 debuggabile il software.
Magari sono troppo limitato io, ma non ce lo vedo un ragioniere a
programmare in c++ (beh, veramente neanche in java, c, o chi per lui...)
Senza offesa per nessun ragioniere, beninteso!
-- 
28/2/2005 | -1 all' alba!

Mancanza di puntatori? Ma se non ha altro... Il vero problema e' la
mancanza di tipi definiti dall'utente allocati in modo statico o
automatico.
Ciao,
Nicola


Era proprio quello che sostenevo io!
Ci sono molti ragionieri che sanno programmare in Cobol o in Basic, ma 
pochissimi che sanno programmare in C o C++. E, soprattutto, ci sono 
molti ragionieri che non sanno programmare, ma possono in tempi 
ragionevolmente brevi imparare la programmazione in Cobol o in Basic, ma 
che richiederebbero tempi eccessivi per imparare la programmazione in  C 
o in C++.
Questi sono buoni motivi, per i dirigenti, per non adottare ne' C ne' 
C++ ma bensi' Cobol o Basic.


 C++ ma bensi' Cobol o Basic.
veramente, a parte casi limite (manutenzione di sistemi vecchi e grossi e
privi di ingegnerizzazione) io consiglierei linguaggi a livello piu' alto
e, IMHO, decisamente meno MORTI del cobol o del basic...
perl, python e ruby sono decisamente piu' adatti al "ragioniere", da
questo (e da altri) punto di vista
