Pagina 1 di 2
Java vs C++ per algoritmi
Inviato: ven 27 feb 2009, 18:29
da Szat
Ciao a tutti
inutile dire che non avrebbe senso far scontrare java con C++ senza inquadrare il campo di utilizzo...
Ma se uno ha bisogno di scrivere algoritmi numerici cosa potrebbe usare tra Java e C++?
In ultimo le prestazioni: alla luce delle nuove virtual machine e dei nuovi hardware Java è ancora così lenta come poteva essere in passato?
Grazie in anticipo
Re: Java vs C++ per algoritmi
Inviato: ven 27 feb 2009, 18:35
da raffaele181188
Algoritmi numerici del tipo? Ho letto recentemente che, in molti benchmark che utilizzano _SOLO_ calcoli Java è addirittura più veloce del C++. Appena posso linko
Va anche detto che per il puro scopo computazionale Java non è preso in considerazione di solito
Se vuoi conoscere empiricamente come va Java sul tuo computer (così da poter fare un paragone) scaricati NetBeans e giocaci un po'. E' tutto in Java, ed è l'unico programma di un certo livello (tra quelli che conosco) ad usare swing per l'interfaccia. Quindi
pure java code
edit: Ecco due link. Ma secondo me lasciano il tempo che trovano...
http://kano.net/javabench/
http://www.idiom.com/~zilla/Computer/ja ... hmark.html
Re: Java vs C++ per algoritmi
Inviato: ven 27 feb 2009, 18:50
da Szat
raffaele181188 ha scritto:Algoritmi numerici del tipo? Ho letto recentemente che, in molti benchmark che utilizzano _SOLO_ calcoli Java è addirittura più veloce del C++. Appena posso linko
Va anche detto che per il puro scopo computazionale Java non è preso in considerazione di solito
Wow!
Direi cose del tipo integrali numerici, equazioni differenziali, sistemi lineari (piusttosto grandi), sistemi di equazioni differenziali e cose simili.
raffaele181188 ha scritto:
Se vuoi conoscere empiricamente come va Java sul tuo computer (così da poter fare un paragone) scaricati NetBeans e giocaci un po'. E' tutto in Java, ed è l'unico programma di un certo livello (tra quelli che conosco) ad usare swing per l'interfaccia. Quindi
pure java code
edit: Ecco due link. Ma secondo me lasciano il tempo che trovano...
http://kano.net/javabench/
http://www.idiom.com/~zilla/Computer/ja ... hmark.html
Si netbeans lo conosco, ma preferisco eclipse. Comunque va abbastanza bene, non ho grandi rallentamenti. Ma anche eclipse è in java giusto? Solo che non usa swing
Re: Java vs C++ per algoritmi
Inviato: ven 27 feb 2009, 19:31
da shark1500
Io mi butterei sul C/C++, non penso siano paragonabili in termini di prestazioni (non ho letto gli articoli per mancanza di tempo, parlo per esperienza personale)
Re: Java vs C++ per algoritmi
Inviato: ven 27 feb 2009, 19:36
da absinthe
se hai bisogno di lavorare il real-time usa il c niente roba object oriented nè c++ nè java. se non vai in real time python o matlab/scilab/octave vanno benissimo e ti risparmi un sacco di righe di codice
M
Re: Java vs C++ per algoritmi
Inviato: ven 27 feb 2009, 23:04
da Szat
shark1500 ha scritto:Io mi butterei sul C/C++, non penso siano paragonabili in termini di prestazioni
Anche ai tempi odierni?
Re: Java vs C++ per algoritmi
Inviato: ven 27 feb 2009, 23:06
da Szat
absinthe ha scritto:se hai bisogno di lavorare il real-time usa il c niente roba object oriented nè c++ nè java.
Troppo lenti?
absinthe ha scritto:
se non vai in real time python o matlab/scilab/octave vanno benissimo e ti risparmi un sacco di righe di codice
M
Non so usare ne matlab ne octave anche se li conosco. Ho usato per un sacco di tempo Mathematica e un po' Root del Cern.
Python? La sua libreria standar è paragonabile a quella di java?
Re: Java vs C++ per algoritmi
Inviato: sab 28 feb 2009, 10:25
da ulisse89
Io sto studiando adesso il java all'università e ci stanno facendo una testa così che ormai con i nuovi processori, la differenza in quanto a velocità tra una programma in C e uno in java, non è così tanta. Però d'altra parte io penso che se è un programma per solo calcolo matematico, va ancora bene il C.
Re: Java vs C++ per algoritmi
Inviato: sab 28 feb 2009, 10:33
da 414N
Szat ha scritto:
Non so usare ne matlab ne octave anche se li conosco. Ho usato per un sacco di tempo Mathematica e un po' Root del Cern.
Scilab permette di specificare proprie routine in C o Fortran.
Ma la tua è una domanda generica o stai scegliendo verso quale linguaggio orientarti per implementare degli algoritmi numerici "esotici"?
Re: Java vs C++ per algoritmi
Inviato: sab 28 feb 2009, 10:34
da raffaele181188
Credo anch'io il C
Anch'io preferisco Eclipse, però ti ho scritto di provare NetBeans perchè usa le swing quindi è proprio tutto java e quindi puoi farti un'idea molto precisa di come vada un programma bello pesantuccio scritto per intero in quel linguaggio. Eclipse usa lo swt che è sensibilmente più veloce
Re: Java vs C++ per algoritmi
Inviato: sab 28 feb 2009, 11:18
da puzuma
dalla java vm 1.4 in poi le prestazioni di java sul calcolo puro sono paragonabili a quelle del C se non migliori (anche se fortran e altri linguaggi dedicati sono ancora la scelta più performante), da un occhiata a questo articolo che mette a confronto java con il codice prodotto da molti compilatori:
http://www.idiom.com/~zilla/Computer/ja ... hmark.html
per il discorso swing/swt non è vero che le swing sono più lente, l'unico vantaggio delle swt è quello di avere un look & feel integrato con il sistema e migliori font (anche questa argomentazione è in parte superata), in certe circostanze le swing sono adirrittura più veloci (sotto linu ad esempio ...), guarda quà:
http://cosylib.cosylab.com/pub/CSS/DOC- ... arison.pdf
infine per il discorso real-time, java non è nato per questo ambito in quanto il garbage collector introduce delle latenze non prevedibili, del resto questo non mi sembra il tuo caso (e comunque dovresti usare anche un sistema operativo real time).
l'unica vera differenza tra C e Java è il consumo della memoria, però attenzione a programmare bene in C altrimenti questo vantaggio te lo giochi subito.
IMHO usa il linguaggio che ti fornisce il maggior numero di librerie già pronte e testate per lo scopo che ti sei prefisso, alla fine tra C e Java credo sia ormai solo una questione di gusti.
Re: Java vs C++ per algoritmi
Inviato: sab 28 feb 2009, 11:44
da raffaele181188
Offtopic: @puzuma
La maggior parte di quei test non sono significativi, in quanto disegnano rettangoli e altre cose base che non mettono in evidenza la cosa
Swing è un layer scritto in Java sopra la libreria di interfacciamento AWT
SWT, invece, è la "bella copia" by IBM delle AWT, e per le operazioni di painting mappa i componenti su quelli nativi (come fa AWT). Il LAF varia da piattaforma a piattaforma.
In Swing le cose sono diverse, in quanto tutti i LAF sono implementati in Java e viene fatto affidamento al codice nativo (AWT tramite JNI) solo per le funzioni base (come i rettangoli di prima). Infatti, usando swing, si può riprodurre qualsiasi LAF supportato su qualunque OS perchè fa tutto parte delle swing (quindi i LAF, pure se molto somiglianti, sono delle imitazioni) a parte quello di Windows (come al solito). Swing deve essere per forza più lento di SWT, perchè prevede un layer in più. Del resto, io noto che sui miei computer Eclipse è molto più reattivo di NetBeans
Re: Java vs C++ per algoritmi
Inviato: sab 28 feb 2009, 12:37
da Szat
414N ha scritto:
Scilab permette di specificare proprie routine in C o Fortran.
Ma la tua è una domanda generica o stai scegliendo verso quale linguaggio orientarti per implementare degli algoritmi numerici "esotici"?
Ho capito (tenendo presente che non so il Fortran). Non ho in mente niente di particolare, solo sto cercando un linguaggio o un framework per risolvere eventuali problemi che potrei incontrare, torna sempre utile.
E dopo aver studiato un po' di java, C++ e un po' di teoria degli algoritmi non ho la più pallida idea di cosa utilizzare.
Re: Java vs C++ per algoritmi
Inviato: sab 28 feb 2009, 13:17
da 414N
Szat ha scritto:
Ho capito (tenendo presente che non so il Fortran). Non ho in mente niente di particolare, solo sto cercando un linguaggio o un framework per risolvere eventuali problemi che potrei incontrare, torna sempre utile.
E dopo aver studiato un po' di java, C++ e un po' di teoria degli algoritmi non ho la più pallida idea di cosa utilizzare.
Allora, secondo me, ti conviene orientarti verso una piattaforma come Matlab/Scilab e il loro linguaggio di scripting (non molto dissimile).
In questo modo puoi concentrarti solo sul tuo problema e non sui meccanismi intrinseci del linguaggio (leggi puntatori, gestione del heap o altre amenità) che rischiano di deviare la tua attenzione dal problema in sé verso le problematiche di implementazione.
Se poi vuoi comunque provare la via della programmazione, esistono già alcuni framework per alcuni linguaggi.
Per esempio:
SciPy, per Python;
qwt, che si appoggia a qt per il plotting di dati tecnici/scientifici etc.
Re: Java vs C++ per algoritmi
Inviato: dom 1 mar 2009, 15:16
da absinthe
Szat ha scritto:absinthe ha scritto:se hai bisogno di lavorare il real-time usa il c niente roba object oriented nè c++ nè java.
Troppo lenti?
sì. te lo dico per esperienza personale: stiamo sviluppando un applicativo realtime per un macchinario di misura basato su visione artificale. abbiamo margini stretti di manovra: 600 millisecondi per scattare 8 foto 1024x768 elaborarle estrarre i dati sensibili , triangolare tali dati, eseguire le operazioni trigonometriche/algebra vettoriale necessarie e dare un output a schermo. solo il c ce la fa! è riesce a faròlo anche su un catorcio come win xp pro con _tutti_ i servizi settati in avvio a _default_. qundi niente OS real-time o settaggi particolari che l'utente medio/basso non conoscerebbe (il target è un operaio di officina meccanica _non_ tenuto ad avere competenze di informatica su alcun livello!)
absinthe ha scritto:
se non vai in real time python o matlab/scilab/octave vanno benissimo e ti risparmi un sacco di righe di codice
M
Non so usare ne matlab ne octave anche se li conosco. Ho usato per un sacco di tempo Mathematica e un po' Root del Cern.
Python? La sua libreria standar è paragonabile a quella di java?
con numpy e scipy vai più o meno alla velocità di matlab e _non_ è compilato o compilato jit. è interpretato puro con una community immensa e un sacco di IDE per sviluppo/debugging. io un pensiero ce lo farei. se poi il problema è anche la curva di apprendimento e conosci gà altri strumenti allora usa quelli che sai. tra java e c++ non saprei che dirti: mai usato java (l'ho sempre trovato troppo cervellotico per me)
M