Newsgroup: it.comp.java
Titolo: perchè mettersi a studiare anche C++

se con java ci puoi fare di tutto?
vedo che nelle proposte di lavoro spesso richiedono entrambi.
a parte il fatto che si potrebbe avere a che fare con del codice già 
scritto in entrambi i linguaggi e capisco potrebbe capitare di 
doverci mettere le mani, ma se uno vuole imparare e fare dei progetti 
per conto suo è necessario che impari entrambi per sopperire a 
mancanze incrociate?
grazie in anticipo per la risposta!
-- 
minollo
"un minollo? ... e che animale sarebbe questo minollo?"
"... ciò un minoll èèèèè ... un minoll èèè un minoll èèè ... èèè ... 
soooono un minooollooo ..." - Lello Arena & Massimo Troisi
mitici
guarda il video:
http://www.youtube.com/watch?v=jb9Wq2sNgVA

 se con java ci puoi fare di tutto?
Perché studiare Analisi Matematica quando abbiamo le calcolatrici?
La risposta è che sono cose diverse ed è bene saperle entrambe.(IMHO)
-- 
Emanuele Torrenti
Registered Linux User #409659
"I fought the law, and the law won."

 se con java ci puoi fare di tutto?
Beh, guardati un po' intorno: ti sembra davvero che tutto il software 
sia fatto in java?

emmeesse wrote :

il c++ è nato prima, non mi meraviglia.
vorrei piuttosto sapere se programmando in java riesco veramente a 
fare di tutto e di più di quello che si può fare in c++, o se ci sono 
cose che non puoi fare, isnomma se si completano vicendevolmente e in 
cosa


 
Io, per dimenticare tutto cio' che so di C/C++, aspetto che vengano prodotti 
processori in grado di eseguire bytecode Java nativamente! Purtroppo, il divario 
prestazionale, anche se in continua diminuzione, si fa sentire, o cmq io ancora 
lo avverto (non parlo di applicazioncine). Per il resto, come sintassi, 
flessibilita', quantita' di software e documentazione, ecc ecc e ancora ecc, per 
me Java e' l'UNICO linguaggio... anche se, appunto, spesso ma non volentieri 
sono costretto a preferire altro.

 non volentieri sono costretto a preferire altro.
ok, questo è un esempio di risposta che chiedevo, grazie OO!


 che non puoi fare, isnomma se si completano vicendevolmente e in cosa
Le API dei sistemi operativi a me conosciuti non sono accessibili a Java 
mentre lo sono al C/C++. In altre parole in java non si scrivono 
programmi nativi. Insomma un dominio diverso.

>>>>> "m" == minollo  <torei...@katamail.comCANCELLALETTEREMAIUSCOLE> writes:
m> se con java ci puoi fare di tutto? 
Ni. Premetto che trovo il C++  una pessima realizzazione (a bag on the
side of C). 
Paul Graham vede nei linguaggi  di programmazione due vette: Il C (non
il C++) ed il LISP.
Il LISP a torto non lo considera quasi nessuno (te lo refilano a volte
all'università  senza  fartelo  capire   bene),  ma  è  un  linguaggio
veramente grande in  un senso, per quello che offre  e per la facilità
di scrivere codice. Che peraltro "controlli poco"
Il  C  è un  linguaggio  veramente  grande  nell'altro senso,  per  la
possibilità di  controllare il  codice (e NON  servono tipi  stringa o
boolean). Peraltro sei costretto a controllarlo e non è facile.
In mezzo  ci sono  tutti gli  altri, chi più  vicino all'uno,  chi più
vicino all'altro.
Java è più o meno in mezzo, anche per opinione di Guy Steele (coautore
della JVM e _del_ libro sul Common Lisp).
Non ha alcune  cose del C -i.e. prova ad andare  a basso livello-, non
ha alcune cose del LISP -i.e. l'immediatezza-.
m> vedo che nelle proposte di
m> lavoro spesso richiedono entrambi.  a parte il fatto che si
m> potrebbe avere a che fare con del codice già scritto in entrambi i
m> linguaggi e capisco potrebbe capitare di doverci mettere le mani,
E' il principale motivo. Inoltre  in alcuni campi le prestazioni del C
sono necessarie, in  altre il C++ è talmente  appesantito da non avere
prestazioni migliori di Java.
Ad esempio, è  ancora in uso dell'hardware per il  quale una cosa come
il  Duff's Device  (vedi  
http://en.wikipedia.org/wiki/Duff's_device
 e
poi  
http://www.lysator.liu.se/c/duffs-device.html
) è molto  utile. Il
Duff's  Device  in Java  NON  si compila,  per  dirne  una. Per  dirne
un'altra non è così drammaticamente efficente con tutte le CPU.
m> ma se uno vuole imparare e fare dei progetti per conto suo è
m> necessario che impari entrambi per sopperire a mancanze incrociate?
m> grazie in anticipo per la risposta!
Potrebbe (ma io lascerei perdere il ++, mi imparerei il C e basta).
Poi dipende da quello che devi fare. A livello hobbistico Java ti
basta, avanza e non è mica così facile come sembra!!!!
-- 
 /\           ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
  //--\| | \|  |   Integralista GNUslamico
\/                 e coltivatore diretto di Software

 vedo che nelle proposte di lavoro spesso richiedono entrambi.
Body rental ?

 basta, avanza e non è mica così facile come sembra!!!!
vorrei lavorarci, magari iniziando con piccoli progettini, poi si 
vedrà se avrò abbastanza clienti :/


 Body rental ?
boh! leggendo qua e si trova questo tipo di richieste, non ho fatto 
caso alla tipologia


Scusate la domanda, ma se convertissi il bytecode compilato in codice
binario ad es. un exe, le prestazioni si pareggiano ad un programma C
giusto?

 
E' un po come dire, se mi teletrasportassi, ci metterei meno che a cavallo giusto?

Corrado Alesso ha scritto:


Potresti provare a FAXARTI dall'altra parte della città e confrontare il 
tempo che ci avresti messo in MeTRO! :D
jRed

 ecco un motivo per tenere conto entrambi
Per fare operazioni a basso livello non ti serve il C++, ti potrebbe 
bastare dell'ottimo C!
E se proprio vogliamo parlare di basso livello, tramite JNI puoi anche 
chiamare codice Assembly!
http://today.java.net/pub/a/today/2006/10/19/invoking-assembly-language-from-java.html
Aka "con Java fai proprio tutto" ---> sopratutto il caffè! :)
jRed

 ecco un motivo per tenere conto entrambi
Si, puoi fare chiamate esterne, ma considera che le chiamate a basso
livello, generalmente, vengono utilizzate per migliorare le performance.

> basta, avanza e non è mica così facile come sembra!!!!
m> vorrei lavorarci, magari iniziando con piccoli progettini, poi si
m> vedrà se avrò abbastanza clienti :/
A questo punto imparati PHP, Python,  C e comincia a vedere cosa offre
il mondo libero. Ai tuoi clienti darai programmi liberi ed il tuo know
how.


>>>>> "m" == minollo  <torei...@katamail.comCANCELLALETTEREMAIUSCOLE> writes:
m> ecco l'anello che mi mancava, il basso livello, ma in quel caso
m> penso si potrà fare una chiamata esterna a qualche routine in c++,
m> no?  ecco un motivo per tenere conto entrambi
Usa il C e non farti male col mangling dei nomi.


 writes:
M> Scusate la domanda, ma se convertissi il bytecode compilato in
M> codice binario ad es. un exe, le prestazioni si pareggiano ad un
M> programma C giusto?
Ni. Checché ci siano state risposte spiritoso-wannabe, è quello che 
fa su alcune parti del codice il JIT Compiler.
Perché non si guadagnerebbe comunque moltissimo ?
Perché il  tempo di  riconoscimento delle istruzioni  "macchina" della
JVM non è questa cosa terribile. Conta molto di più l'esecuzione delle
stesse (che è  in codice nativo), e istruzioni  come la invokevirtual,
usata  per  la  chiamata  a  metodi  non  final,  sono  pesantine.  La
invokevirtual, che ricordi, implica 4 salti di cui due fatti dopo aver
cercato un dato in una tabella...


 
Ok, ma qui si presuppone ancora una VM. 'Convertire bytecode in binario exe' mi 
fa pensare ad una conversione il cui risultato e' codice che viene seguito 
indipendentemente da una VM, anzi senza, completamente nativo. Senza contare che 
ovviamente perdi portabilita', al momento come cosa mi sembra confinata nel 
mondo ipotetico. So che era nato un progetto 'Jolt' rivolto proprio verso questo 
tipo di problematica, ma non so come sia andato a finire...

 writes:
CM> Ok, ma qui si presuppone ancora una VM. 'Convertire bytecode in
CA> binario exe' mi fa pensare ad una conversione il cui risultato e'
CA> codice che viene seguito indipendentemente da una VM, anzi senza,
CA> completamente nativo.
Una "VM" esiste sempre. A volte si chiama semplicemente "runtime" o
"librerie".
Come converti un bytecode in linguaggio nativo ? Sostituisci inline il
codice  corrispondente (se corto)  o chiami  una funzione  di libreria
che, interfaccia a parte, sara`  con ogni probabilita` la medesima che
viene richiamata nella JVM che e` compilata in un linguaggio nativo.
Mi pare  che il GCC  (gcj) non si  limiti al solo bytecode,  ma generi
anche eseguibili in questo modo.


 si potrà fare una chiamata esterna a qualche routine in c++, no?
No, in java non si può fare. Non direttamente.
Le chiamate native fanno riferimento ad una interfaccia che devi
comunque implementare in un linguaggio nativo. Per dirla breve, tu puoi
dichiarare un metodo nativo astratto a cui dovrai fornire
l'implementazione in una libreria dinamica.
Insomma un meccanismo che non è proprio quello che si dice una
semplice "chiamata esterna".

 jRed
_Solo_ con java però non ci fai tutto ;)
Con java+jni+quelchevuoitubidibibodibibù ci fai tutto.