View Full Version : Sun promette: presto Java sarà open-source
Redazione di Hardware Upg
17-05-2006, 17:05
Link alla notizia: http://www.hwupgrade.it/news/software/17402.html
Jonathan Schwartz annuncia che a breve Java verrà distribuito con licenza open-source
Click sul link per visualizzare la notizia.
LukeHack
17-05-2006, 17:18
minchia, cosi finalmente quello scandalo di C# verrà soppiantato definitivamente :D
Mister24
17-05-2006, 17:23
minchia, cosi finalmente quello scandalo di C# verrà soppiantato definitivamente :D
Non credo proprio perche' il C e' un linguaggio compilato e quindi ha prestazioni migliori del java che e' interpretato.
Il java va comunque bene per programmi semplici.
ShadowX84
17-05-2006, 17:30
Non credo proprio perche' il C e' un linguaggio compilato e quindi ha prestazioni migliori del java che e' interpretato.
Il java va comunque bene per programmi semplici.
JVM = .NET Framework
.NET framework stà a C# come JVM stà a Java!
Entrambe sono macchine virtuali, quindi la tua prima parte del discorso non è molto veritiera.
Java va bene per fare solo programmi semplici? butta un occhio qui www.eclipse.org oppure qui www.jnode.org
share_it
17-05-2006, 17:33
ricordo che open source != libero
Oramai che l'implementazione libera gnu di java è praticamente pronta la sun fa questa mossa per salvare un po' del suo controllo della piattaforma. Diverse distro linux hanno già una soluzione java basata su gij e gcj... il compilatore gnu gcj compila java in codice NATIVO...
Arriva tardi questa decisione e a meno che non venga utilizzata una licenza veramente libera, come la gpl, è anche pressoche inutile.
PS complimenti Mister24 per la sparata
Debian ed Ubunto hanno ora la possibilità di inserire J2EE/J2SE/J2RE nelle loro distribuzioni perché sono diventati distributori di Java, è molto probabile che quindi la licenza sarà GPL2 ;)
Per dovere di cronaca C# non è uno scandalo ha molti dei vantaggi del Java e del C++ coniugati :)
coschizza
17-05-2006, 18:14
JVM = .NET Framework
.NET framework stà a C# come JVM stà a Java!
Entrambe sono macchine virtuali, quindi la tua prima parte del discorso non è molto veritiera.
Java va bene per fare solo programmi semplici? butta un occhio qui www.eclipse.org oppure qui www.jnode.org
memmeno la tua frase non è veritiera perche il linguaggio .NET framework è interpretato solo alla prima esecuzione e poi viene utilizzato come codice compilato e quindi performante.
gli applicativi fatti completamente in java sono quasi inutilizzabili rispetto a versione c++ puro, IMHO il java è stato il peggiore linguaggio della storia a causa di questo. Purtroppo per lavoro il 50% di quello che usiamo è fatto in java e non ho mai visto dei miei colleghi che non lo maledica ogni giorno.
fare programmini in java puo andare bene ma fare programmi in java è un altra cosa.
approposito utiliziamo anche eclipse, un buon prodotto se non fosse che in varie situazioni (per noi importanti) ha performance e pesantezza 10 volte inferiore di un visual basic 6 o .net, ma questo spesso viene ovviato perche molte parti importanti sono state sviluppate in linguaggi diversi dal java proprio per ovviare alle limitazioni intrinseche di performance
ricordo che open source != libero
Oramai che l'implementazione libera gnu di java è praticamente pronta la sun fa questa mossa per salvare un po' del suo controllo della piattaforma. Diverse distro linux hanno già una soluzione java basata su gij e gcj... il compilatore gnu gcj compila java in codice NATIVO...
Arriva tardi questa decisione e a meno che non venga utilizzata una licenza veramente libera, come la gpl, è anche pressoche inutile.
PS complimenti Mister24 per la sparata
Sottoscrivo in pieno.
minchia, cosi finalmente quello scandalo di C# verrà soppiantato definitivamente :D
C# e il framework .NET non sono affatto uno scandalo, sono più avanzati di Java e più performanti. Il punto debole è che .NET c'è solo per Windows, ma nulla vieta di implementare un CLI per altri sistemi operativi (vedere Mono per Linux).
Speriamo di vedere presto il pacchetto per il jdk o il jre di sun su debian. Ormai mi sono rotto di dovermi fare a mano il .deb ad ogni aggiornamento. :mad:
ciao ;)
memmeno la tua frase non è veritiera perche il linguaggio .NET framework è interpretato solo alla prima esecuzione e poi viene utilizzato come codice compilato e quindi performante.
I programmi sul framework .NET non sono mai interpretati, neanche la prima volta. Per capirci: quando in Visual Studio si compila, non viene generato codice macchina per la macchina fisica, ma una specie di assembly per una macchina "astratta" chiamato IL e infilato in .exe e .dll (analogo al bytecode di Java infilato nei .class). La differenza con Java è quando si clicca il .exe non si interpreta l'IL, bensì si compila a seconda della macchina fisica che sta sotto (quindi in codice nativo, ma anche managed)... credo che compili ogni classe la prima volta che viene usata, in ogni caso l'overhead per questa operazione è minimo, la differenza di prestazioni con il codice in C++ che usa le win32 è dovuto ad altre cose come gli strati (comodissimi) che il .NET interpone tra l'applicazione e il sistema operativo.
gli applicativi fatti completamente in java sono quasi inutilizzabili rispetto a versione c++ puro, IMHO il java è stato il peggiore linguaggio della storia a causa di questo. Purtroppo per lavoro il 50% di quello che usiamo è fatto in java e non ho mai visto dei miei colleghi che non lo maledica ogni giorno.
Ti sei mai chiesto il motivo? Il C++ permette di fare cose orribili :D
Hai mai provato a fare lo stesso programma in Java/.NET/Phyton e poi in C++?
fare programmini in java puo andare bene ma fare programmi in java è un altra cosa.
Boh a me NetBeans, Poseidon, JDiskReport piacciono parecchio.
DevilsAdvocate
17-05-2006, 19:00
non paragoniamo il java al C++, per favore..... col C++ uno puo' implementare progetti ad ampio respiro (vedi KDE ), col java questo e' impensabile in quanto
java non va nemmeno la meta'.... la contropartita e' che java e' "piu' facile da
imparare/programmare".
Mazzulatore
17-05-2006, 19:10
Comunque java è multipiattaforma, .net non ha la stessa portabilità anche se col tempo le cose cambieranno di sicuro.
Microsoft ha praticamente reinventato il pcode del visual basic con .net, quindi le prestazioni se non sono uguali, sono molto simili.
In ogni caso conoscere questi strumenti bene permette di usarli per tutto, indipendentemente dall'applicazione. Anche per giochi 3d.
j_c_maglio
17-05-2006, 19:12
Anche io sono più a favore del C++ perchè in generale è più performante...resta però il fatto che anche un programma fatto in C++ se programmato male ha cattive performance, e questo capita molto più facilmente in C++ che non in java.
Java poi permette di realizzare applicazioni molto più velocemente, soprattutto quelle web
Mercuri0
17-05-2006, 19:12
Ma perché invece di scatenare ogni volta flame assurdi su java vs .net non si fa riferimento a qualche test concreto?
Mazzulatore
17-05-2006, 19:15
Resta vero che un client bittorrent scritto in c++ è come se non ci fosse, un analogo programma in java o python (azureus) è pesantissimo sia come utlizzo del processore che di memoria.
A me il J non è mai piaciuto più di tanto... troppo lento su pc vecchi.
imho java fa piuttosto schifo... rende il codice un po' piu' carino e meno criptico del c++ ma e' meno flessibile, inoltre il fatto che non produca mai file eseguibili e' una gran cagata, a quel punto meglio il C#.
cmq si vede il java com'e' diffuso... i software java saranno lo 0,0001% del parco software (grazie a dio), java ha un futuro solo nel web e nel mobile, imho.
tomminno
17-05-2006, 19:33
Ti sei mai chiesto il motivo? Il C++ permette di fare cose orribili :D
Quali sarebbero queste cose orribili?
Hai mai provato a fare lo stesso programma in Java/.NET/Phyton e poi in C++?
No, ma hai mai provato a scrivere un software che deve girare in 64KB di RAM? E non mi riferisco a 30 anni fa (che ancora non ero nato), ma praticamente a tutti quei dispositivi elettronici che ci circondano che sono leggermente di più dei PC.
Mai scritto un software che debba implementare la gestione della memoria perchè al di sotto non hai un OS che fa le cose al posto tuo?
Oppure a scrivere una libreria per calcoli scientifici? Non trovo molto (per non dire nulla) a giro che non sia scritto in C/C++.
Boh a me NetBeans, Poseidon, JDiskReport piacciono parecchio.
Oddio Poseidon! Il mio computer non è abbastanza potente per farlo girare, possibile che per disegnare un diagramma UML non basti un P3 a 1GHZ?
gli applicativi fatti completamente in java sono quasi inutilizzabili rispetto a versione c++ puro, IMHO il java è stato il peggiore linguaggio della storia a causa di questo. Purtroppo per lavoro il 50% di quello che usiamo è fatto in java e non ho mai visto dei miei colleghi che non lo maledica ogni giorno.
Non e' strettamente vero, il bytecode prodotto da Java e' compilato "just in time" durante l'esecuzione: la CPU vede sempre codice assembly nativo e dal punto di vista prestazionale non c'e' molta differenza con il C++. Inoltre alcune JVM sono in grado di analizzare dinamicamente il codice prodotto e "adattare" la compilazione alle condizioni di esecuzione (profile-guided optimisations). Il C++ invece e' compilato e poi distribuito e fare profile-guided optimisation e' molto piu' complesso e non puo', per ovvi motivi, adattarsi dinamicamente a diverse condizioni di esecuzione, ma solo alle condizioni "tipiche".
Affermare che Java e' molto piu' lento del C++ e' scorretto. Anche qui dipende molto da quello che si sta facendo.
Eclipse, ad esempio, e' molto pesante non tanto perche' scritto in Java, ma perche' e' un ambiente estremamente flessibile e la flessibilita' si paga in termini di performance.
Chi paragona .NET a Java (e magari da' giudizi di merito su uno rispetto all'altro), non ha le idee molto chiare, perche' sono due ambienti che risolvono problemi totalmente opposti, con soluzioni per certi versi simili, come l'esecuzione per mezzo di una virtual machine. Sarebbe come dire che un aereo e una nave sono la stessa cosa perche' entrambi hanno un motore e magari la nave fa schifo perche' non puo' volare: ovviamente risolvono problemi diversi.
Java risolve il problema di scrivere codice il piu' possibile indipendente dalla piattaforma e il piu' possibile portabile da un'ambiente di esecuzione all'altro.
.NET (C# e' solo uno dei linguaggi che compila per .NET) risolve il problema di produrre componenti condivisibili in forma binaria fra un linguaggio e l'altro sulla medesima piattaforma.
Infine, e' un'ottima cosa che Java sia rilasciato da Sun come open source, perche' la comunita' open di Java e' ricchissima ed ha prodotto negl'anni moltissime idee innovative nell'Ingegneria del Software.
Fabio_si
17-05-2006, 19:48
imho java fa piuttosto schifo... rende il codice un po' piu' carino e meno criptico del c++ ma e' meno flessibile, inoltre il fatto che non produca mai file eseguibili e' una gran cagata, a quel punto meglio il C#.
cmq si vede il java com'e' diffuso... i software java saranno lo 0,0001% del parco software (grazie a dio), java ha un futuro solo nel web e nel mobile, imho.
memmeno la tua frase non è veritiera perche il linguaggio .NET framework è interpretato solo alla prima esecuzione e poi viene utilizzato come codice compilato e quindi performante.
gli applicativi fatti completamente in java sono quasi inutilizzabili rispetto a versione c++ puro, IMHO il java è stato il peggiore linguaggio della storia a causa di questo. Purtroppo per lavoro il 50% di quello che usiamo è fatto in java e non ho mai visto dei miei colleghi che non lo maledica ogni giorno.
fare programmini in java puo andare bene ma fare programmi in java è un altra cosa.
approposito utiliziamo anche eclipse, un buon prodotto se non fosse che in varie situazioni (per noi importanti) ha performance e pesantezza 10 volte inferiore di un visual basic 6 o .net, ma questo spesso viene ovviato perche molte parti importanti sono state sviluppate in linguaggi diversi dal java proprio per ovviare alle limitazioni intrinseche di performance
Ma che cavolo andate dicendo ????
Lavoro in una softwarehouse e lavoro in Java da almeno 7 anni, per clienti grandissimi e su applicazioni sofistificatissime sia gestionali che non ... con prestazioni ottime !
Java solo su mobile ? Ma avete bevuto ! :doh:
coschizza
17-05-2006, 19:55
Ma perché invece di scatenare ogni volta flame assurdi su java vs .net non si fa riferimento a qualche test concreto?
non citiamo test perche non ci sono test dove un programma java sia piu performante dello stesso fatto in .net o c++
io stesso ti posso dire che l'ultimo software che abbiamo passato nella mia azienda da codice java a codice visual basic .net è migliorato di piu di 10x dal punto delle performance, si trattava di programma che lavorava su database e passava il tempo a fare il parsing di record in formato XML e lo rielaborava per fare dei report.
comunque anche il fatto di considerare i programma java compatibili con altre piattaforme è relativo, nella nostra azienda per far funzionare i vari software abbiamo installavo da 4 a 5 versioni della java virtual machine differenti per ogni PC (poco piu di 1000) questo perche ogni programma vuole una versione differente e nonostante i quasi 600 programmatori a disposizione non è stato possibile risolvere questo problema negli ultimo 6 anni che ci lavoro, pensa che nei pc dell'amministrazione per far funzionare anche i software fatti dal ministero per dichiarazioni dei redditi ecc oltre a quelli citati abbiamo bisogno di installare altri 2-3 java virtual machine perche non esiste software del ministero delle finanze che non abbia bisogno di versioni particolari ovviamente non compatibili.
hai capito perche noi nella nostra azienda odiamo questo linguaggio!
Quali sarebbero queste cose orribili?
list<int> foo()
{
list<int> col;
col.push_back(2);
return col;
}
void main()
{
std::list<int>::iterator it = foo().begin();
int data = *it;
}
x Mercuri0
http://shootout.alioth.debian.org/
Noterai che il Java non primeggia né per consumo di memoria né per utilizzo del processore. Tra l'altro mi sembra strano che stiano tutti a discutere fra C++ e Java, quando il linguaggio che veramente si usa su sistemi dove serve stabilità e velocità è il C puro, che rimane tutt'ora il più performante insieme ai linguaggi funzionali; certo per chi lo sa usare...
non citiamo test perche non ci sono test dove un programma java sia piu performante di uno in .net o c++
int sum = 0;
for (int i = 0; i < count; ++i)
{
if (dummy > 0)
{
sum += i * 2;
}
else
{
sum += i;
}
}
Se dummy e' sempre maggiore di zero e count e' un numero abbastanza alto, e' probabile che questo metodo sia eseguito piu' velocemente da una JVM o dal CLR di .NET piuttosto che l'equivalente in C++ (senza PGO).
Che coincidenza, giusto oggi il tipo che ci ha iniziato il corso di Laboratorio di Informatica (un'amministratore di una ditta informatica) all'uni ci diceva che Java non era open source... questo perché consentire di modificare le classi base e quindi il linguaggio vero e proprio è considerato un po' una mezza cavolata per chi programma in quel linguaggio.
Che poi alla fine si tratta semplicemente di poter usare il nome Java associato ai sorgenti modificati, almeno a quanto ho capito.
x Mercuri0
http://shootout.alioth.debian.org/
Noterai che il Java non primeggia né per consumo di memoria né per utilizzo del processore. Tra l'altro mi sembra strano che stiano tutti a discutere fra C++ e Java, quando il linguaggio che veramente si usa su sistemi dove serve stabilità e velocità è il C puro, che rimane tutt'ora il più performante insieme ai linguaggi funzionali; certo per chi lo sa usare...
Piccola correzione, C e C++ sono performanti esattamente allo stesso modo. Ci sono invece alcune cose che in C non possono essere scritte in maniera efficiente come potrebbero essere scritte in C++.
jappilas
17-05-2006, 20:13
...
il linguaggio che veramente si usa su sistemi dove serve stabilità e velocità è il C puro, che rimane tutt'ora il più performante insieme ai linguaggi funzionali; certo per chi lo sa usare...
è il linguaggio che si usa quando non si conosce altro ;)
E' un pò stupido parlare delle performance del C/C++, si dovrebbe parlare delle performance del compilatore piuttosto :)
... a me con XP non ha mai funzionato bene... o si blocca tutto o non si vedono i grafici o va tutto a scatti... a seconda della versione e di eventuali service pack installati... provato anche dopo formattazione, senza SP, con SP1, con SP2... varie versioni... nulla da fare... per me sto java è un enigma... l'unico programma che mi ha dato problemi...
jappilas
17-05-2006, 20:30
... a me con XP non ha mai funzionato bene... o si blocca tutto o non si vedono i grafici o va tutto a scatti... a seconda della versione e di eventuali service pack installati... provato anche dopo formattazione, senza SP, con SP1, con SP2... varie versioni... nulla da fare... per me sto java è un enigma... l'unico programma che mi ha dato problemi...
io ho XP con SP2 e l' ultimo JRE e ogni build di DiamondCrush (l' unico programma java che ho attivo in questo periodo, però sottospoto a cicli continui test-build-debug ) gira perfettamente (notare che passiamo attraverso opengl e openal) ;)
tomminno
17-05-2006, 20:45
list<int> foo()
{
list<int> col;
col.push_back(2);
return col;
}
void main()
{
std::list<int>::iterator it = foo().begin();
int data = *it;
}
Indubbiamente orribile. Ma credo che nessuno malato di mente farebbe una cosa simile al posto di un ben più banale
void main()
{
int data = 2;
}
Più che altro volevo conoscere qualcosa di orribile tra quello che generalmente si scrive, o magari qualcosa di orribile tra le tecniche di programmazione comunemente usate.
tomminno
17-05-2006, 20:49
Tomminno, ogni linguaggio è adatto ad uno scopo. Dire quindi che java non è in grado di permetterti di realizzare un applicazione che stia in 64k o che debba implementare una gestione della memoria perchè non cè un OS sotto non è corretto. Java non vuole essere un linguaggio di quel tipo. Esiste il C, il C++ e volendo ci si mette dentro anche dell'assembly per quel genere di cose.
L'Assembly è un pò difficile, quando hai realizzato 2 o 3 progetti hai già dovuto imparare 2 o 3 linguaggi completamente diversi. Sto cominciando ora a programmare firmware, è una specie di involuzione vista nell'ottica della OOP. Anche il C++ non è molto usato perchè i paradigmi della OOP non sono adatti a questi scopi. La riusabilità del codice non è un problema perchè praticamente non esiste, se cambi l'hardware devi per forza cambiare radicalmente anche il codice.
Non ti dico le imprecazioni quando dopo un paio d'anni di sviluppo ci si rende conto che il micro non è più sufficiente per le funzioni che deve svolgere: Ethernet, CobraNet e Wi-Fi sembra che siano d'obbligo su qualunque cosa.
Quello che è certo è che un programma in C/C++ non è sicuro come un applicativo Java o C#, che non possiede una garbage collection integrata e moltissime altre cose.
Sicuro in che senso?
Sulla velocità.. beh.. ognugno la pensa come vuole.
Per me è un dato di fatto che i programmi Java siano pesantissimi, forse quando avrò un Athlon X2 cambierò idea, ma mi sembra assurdo che su un computer dove girano tranquillamente diverse sessioni di .NET 2003 in contemporanea faccia fatica a far girare programmi come Azureus o Poseidon.
Comunque la programmazione Java mi ha sempre interessato, solo che non l'ho mai approfondita, magari avere il tempo per tutto, tra C,C++, C#, ASP.NET e PHP, non mi avanza tanto tempo libero!
Indubbiamente orribile. Ma credo che nessuno malato di mente farebbe una cosa simile al posto di un ben più banale
Il problema e' che quella cosa non e' orribile, quella cosa se ti va bene va in core dump, ma nessun compilatore C++ te lo puo' segnalare a tempo di compilazione. Quel codice e' "undefined behavior".
L'esempio e' volutamente semplificato, perche' oggi mi e' capitata la stessa cosa in un pezzo di codice decisamente piu' complesso. L'unica soluzione e' stata cancellare e ripartire daccapo. In C++ si possono fare un sacco di cose bruttissime ;)
Guarda questo:
int f(int x, int y)
{
return x + y;
}
void main()
{
int x = 0;
int y = 1;
printf(f(x = x + 1, y == x));
}
Stampa 1 o 2?
Ma... infatti funziona più o meno a tutti... tranne che a me ed a un'altro utente del forum con lo stesso problema...
C'era anche un thread per sperare in qualche aiuto ma nessuno ci ha mai illuminato... che sia la volta buona?
Il thread è il seguente:
http://www.hwupgrade.it/forum/showthread.php?t=1067815
JohnPetrucci
17-05-2006, 21:15
Bene, sono sempre favorevole all'open-source.
avrebbero potuto farlo anche prima.. ma meglio tardi che mai
ps. smettetela con C++ vs Java non servono alla stessa cosa
Indubbiamente orribile. Ma credo che nessuno malato di mente farebbe una cosa simile al posto di un ben più banale
list<int> foo()
{
list<int> col;
col.push_back(2);
return col;
}
void main()
{
std::list<int>::iterator it = foo().begin();
int data = *it;
}
Più che altro volevo conoscere qualcosa di orribile tra quello che generalmente si scrive, o magari qualcosa di orribile tra le tecniche di programmazione comunemente usate.
Come mai questo pezzo di codice dà un comportamento indefinito?
DevilsAdvocate
17-05-2006, 23:29
Per una volta sono daccordo con fek al 100%.. :D. Provate HotSpot, oppure provate JVM con JIT. E comunque ci sono testo dove java è performante tanto quanto C/C++.
Per un applicazione che deve manipolare piccole moli di dati, niente grafica, nessuno stress
della cpu concordo che va benissimo il java.
Si puo' arrivare a qualche esempio di gioco in 2D dove il java riesce a non sfigurare (il primo
che mi viene a mente e' Jrisk). Su questo non ci piove.
Quando pero' il tempo CPU diventa una priorita' ed una necessita' il java semplicemente non
e' adatto, ed infatti non viene utilizzato nella stragrande maggioranza di questi casi.
Per di piu', e' un linguaggio interpretato e non compilato, e quindi non ci si possono aspettare
le prestazioni del C/C++ se non in rarissimi casi (certo, se la versione C viene scritta coi
piedi....)
LukeHack
17-05-2006, 23:35
sicuramente se si prende in esame il C/C++ possiamo anche chiudere il topic, come performance stiamo sempre (o quasi) un gradino sopra a fovore di sti ultimi ;)
che poi il java sia COMODO non c'è assolutamente alcun dubbio, ma ha ragione chi dice che lo scopo del java primario ed assoluto (w.o.r.e.) è la portabilità estrema e la sicurezza, quindi hanno evidentemente scopi differenti....
il migliore resta C++, co librerie come wx-window gtk qt mfc atl non è neanche cosi complicato da gestire, (sempre se non si è cani nel gestire la memoria :D )
di ambienti RAD ne è pieno sia il mercato che l'opensource, meglio di così ;)
certo, per applicativi server il java non ha eguali, anche se la libreria dell' EJB secondo me è troppo ridondante..
edit: fek, il risultato dipende cmq dal compilatore, y==x potrebbe venir processato primo o dopo della chiamata alla f, giusto? ;)
OLAZZZZZZZZZZZ
E' un pò stupido parlare delle performance del C/C++, si dovrebbe parlare delle performance del compilatore piuttosto :)
Azaroth, se ti butti da un ponte ti vengo dietro di corsa: ti ho nominato mio Gran Visir della Saggezza, honoris (et verbis) causa. Se qualcuno dei partecipanti alla stanca guerra del mio è più veloce del tuo avesse la gentilezza di dirci come diamine abbia fatto a dare in pasto al proprio calcolatore un sorgente Java o C (dal che si potrebbe giudicare se il linguaggio e non il prodotto della compilazione sia più o meno veloce) saremmo tutti più felici.
Per tornare in topic, c'è una notizia forse un po' più concreta del pronostico di Schwartz: il JDK ha cambiato licenza e, udite udite, pare non faccia più a pugni con GNU/Linux.
http://blogs.sun.com/roller/page/webmink?entry=jdk_on_gnu_linux_something
Qualche Debianista o Ubutuese (è tardi, non trovo di meglio :D) ha già provato?
..linguaggi interpretati per fare motori 3d..BUAHAHAHA!!!
forse all'atto del rendering nudo&crudo (entrando cmq in gioco le capacità della scheda video) l'overhead dovuto alla VM (sia java ke .NET) è minimo..ma quella è solo la punta dell'iceberg
mi trovo perfettamente daccordo nell'affermare che java e c/c++ assolvano a scopi differenti..per quanto riguarda le prestazioni, beh..nella maggior parte dei casi il calo nei programmi java è dovuto alle SWING (che, ricordiamo, non s'appoggiano direttamente alle widget native del SO)..con le SWT le cose migliorano (e non di poco, devo dire)..e se ql.no dice che eclipse è lento..beh, che mi trovi un altro programma che tramite plugin può permetterti di scrivere codice [linguaggio di programmazione a scelta], chattare, leggere email, disegnare database, [eccecc]..la verità è che la IBM è arrivata dal buon Foley e gli ha detto che cosa doveva fare..lui non l'ha capito è ha progettato un software..per fare tutto :D !
..non ricordo chi ha scritto qui che le prestazioni del c e del c++ sono identiche..beh..lo sono se non usi le classi, l'object oriented introduce sempre (almeno un minimo) di overhead.
(java sarà quasi sempre+lento del c/c++..accidenti, java E' SCRITTO in c/c++! così sul momento l'unica operazione + veloce in java è il new..xkè si gestisce lui la memoria!)
..linguaggi interpretati per fare motori 3d..BUAHAHAHA!!!
forse all'atto del rendering nudo&crudo (entrando cmq in gioco le capacità della scheda video) l'overhead dovuto alla VM (sia java ke .NET) è minimo..ma quella è solo la punta dell'iceberg
Java è C# non sono interpretati.
ciao ;)
magilvia
18-05-2006, 08:10
int f(int x, int y)
{
return x + y;
}
void main()
{
int x = 0;
int y = 1;
printf(f(x = x + 1, y == x));
}
Potrebbe anche stampare 0, ma la conversione boolean intero genera un warning (forse di livello 4, stupidamente disabilitato di default in vstudio 6) e ignorare i warning non è affatto una buona idea...
Chi conosce java non tornerebbe per nessuna ragione al C++
Poi vabbè qui c'è gente che paragona il C a Java, senza neanche sapere che uno è un linguaggio a oggetti e l'altro neanche sa cosa siano gli oggetti.
Effettivamente C# può essere un valido concorrente di Java, peccato che sia arrivato un millennio dopo :rolleyes:
Quali sarebbero queste cose orribili?
Vabbè sono tante, a parte i puntatori che se na vanno a spasso dove gli dici di andare, e se ti sbagli addio... poi cose che sinceramente non capisco come l'ereditarietà multipla.
Cmq non sto dicendo che Java è meglio di C++ o viceversa, ci mancherebbe altro!!!! Ognuno è adatto a uno scopo. Ovvio che se devi scrivere un driver o un software con max 64 KB di RAM, farlo in Java semplicemente è folle. Ma io non scriverei mai un programma di medie dimensioni in C, a meno che non ci siano necessità di prestazioni assurde... semplicemente perché con Java mi viene più facile scrivere codice "più funzionante" e in più in fretta.
Oddio Poseidon! Il mio computer non è abbastanza potente per farlo girare, possibile che per disegnare un diagramma UML non basti un P3 a 1GHZ?
Non basta se lo vuoi fare con Poseidon, ma io ho un A64 con 1 GB di RAM quindi me ne sbatto :D
Chi conosce java non tornerebbe per nessuna ragione al C++
Poi vabbè qui c'è gente che paragona il C a Java, senza neanche sapere che uno è un linguaggio a oggetti e l'altro neanche sa cosa siano gli oggetti.
Effettivamente C# può essere un valido concorrente di Java, peccato che sia arrivato un millennio dopo :rolleyes:
falso! java non sostituisce C++, e chi è passato da C++ a java o non stava usando un linguaggio adatto ai suoi scopi oppure ha cambiato scopi.
riguardo al C.. non è esatto che non sa cosa siano gli oggetti... in qualche modo glielo puoi dire anche se il risultato non è così immediato come in java (qualcuno aveva promesso un totorial :fiufiu: )
C# è un valido concorrente a java, soprattutto per via della sua implementazione opensource e multipiattaforma (MONO)
1)falso! java non sostituisce C++, e chi è passato da C++ a java o non stava usando un linguaggio adatto ai suoi scopi oppure ha cambiato scopi.
2)riguardo al C.. non è esatto che non sa cosa siano gli oggetti... in qualche modo glielo puoi dire anche se il risultato non è così immediato come in java (qualcuno aveva promesso un totorial :fiufiu: )
3)C# è un valido concorrente a java, soprattutto per via della sua implementazione opensource e multipiattaforma (MONO)
1) se scrivevi un gestionale a oggetti, con java hai un sistema a oggetti comprensibile, hai una JVM sicura e stabile, hai un sacco di librerie standard ben supportate e documentate e puoi far girare il tuo gestionale ovunque.
C++ va bene solo nei casi in cui ti devi appoggiare a specifiche librerie su specifici OS, nel caso esempio delle directx per sviluppare videogiochi
2) ripeto che non puoi paragonare un linguaggio NON ad oggetti a uno a oggetti. sono due mondi diversi.
C al giorno d'oggi va bene giusto per scrivere routine a bassissimo livello.
3) multipiattaforma?? ma se mono NON è neanche supportato dalla MS :rolleyes:
beh..da quel che posso ricordare java è un linguaggio compilato E interpretato..compilato in bytecode per la JVM e poi questa lo interpreta in codice nativo per l'architettura.
C# devo ammettere che non ho molto ben chiaro come funzioni xD, l'ho provicchiato un pò, devo dire che cm potenziale espressivo del linguaggio non mi è dispiaciuto (forse trovo eccessivo dover far notare al compilatore che sto overloadando un metodo, ma vabè)
Per W4rfoX:
non capisco xkè dovresti mandare "affan.." quello che ti dice che si appoggia al rendere nativo, dato che lo fa :D . in effetti si appoggia sulle LWJGL, che in pratica sono quasi un mapping uno a uno con le controparti in C..
in ogni caso, cm ho già detto, non è in fase di rendering che java si fa sentire (anche se, ti dirò, anche qui potrebbe succedere..immagina che il garbage collector si svegli proprio mentre stai trasferendo la geometria nella scheda video, magari xkè s'è accorto che hai instanziato davvero troppa roba..), quanto per effettuare calcoli fisici, determinazione della geometria visibile (che è uno degli aspetti "stupidi" dei motori che porta via+tempo). Java non è certo un fenomeno per quanto riguarda la computazione matematica.il rendering..beh, quello lo fa opengl :D
(non fraintendermi, io adoro Java! ci programmo da anni, solo che, per lo meno attualmente, 3D e Java non sn molto amici :D , certo a meno che non si tratti di progetti relativamente piccoli)
Come mai questo pezzo di codice dà un comportamento indefinito?
Perche' la lista ritornata da foo() e' temporanea e per lo standard C++ e' definita solo fino al ; che segue foo(). Dopo non esiste piu', quindi se ne prendo un iteratore e poi prendo un valore da quello, li' dentro puo' esserci qualunque cosa.
Per di piu', e' un linguaggio interpretato e non compilato, e quindi non ci si possono aspettare
le prestazioni del C/C++ se non in rarissimi casi (certo, se la versione C viene scritta coi
piedi....)
Java va assolutamente benissimo per applicazione CPU intensive; come ho spiegato NON e' un linguaggio interpretato. Linguaggi che si basano su un garbage collector hanno problemi per software real time (che non vuol dire CPU intensive). Puoi aspettarti le medesime prestazioni, o molto molto vicine da software scritto in Java e in C++.
Potrebbe anche stampare 0, ma la conversione boolean intero genera un warning (forse di livello 4, stupidamente disabilitato di default in vstudio 6) e ignorare i warning non è affatto una buona idea...
Il risultato generato dipende dall'ordine di valutazione dei due argomenti, quindi dipende dal compilatore ma anche dal momento in cui l'espressione viene valutata. Questo comportamento non e' una svista, e' voluto dallo standard. Insomma, il C++ non e' linguaggio semplice da usare, soprattutto in progetti di grandi dimensioni. E come ho fatto vedere nell'esempio precedente esistono casi in cui Java e C# possono risultate anche piu' performanti.
http://jmonkeyengine.com/index.php?option=com_content&task=view&id=26&Itemid=50
Java è lento per la grafica? :Prrr: :asd:
P.s. il primo spiritoso che mi fà notare che si appoggia al render nativo lo mando affan... :)
Non userei Java o .NET per fare grafica 3d in tempo reale, ma non per le prestazioni che sono ottime. Il problema e' il controllo sul ciclo di vita degli oggetti, che in Java e .NET non e' sotto controllo del programmatore, ma dipende dal garbage collector, mentre in C++ e' sotto diretto controllo. Per svariati motivi (purtroppo) nella grafica 3d e' necessario avere sotto diretto controllo il ciclo di vita degli oggetti, non sto parlando di oggetti 3d qui, che si stanno manipolando (texture, vertex buffer, shader) ed e' necessario finalizzarli in maniera assolutamente deterministica. Per questo motivo il C++ e' preferibile, ma ormai non si va piu' oltre: il motore 3d di un gioco e' ancora scritto in C++, ma la logica del gioco stesso tende ad essere scritta in linguaggi ad alto livello come Lua e Python.
Sono ormai due anni che utilizzo Java tutti i giorni, e ne ho passati 8 a programmare in C standard.
Java non mi piace, fa cio' che vuole delle memoria infischiandosene di prestazioni ed occupazione ed e' LENTO svariate volte (forse anche un ordine di grandezza...) rispetto al C.
Se il C lo si sa' usare, non ci si perde le memoria per strada o ci si spaventa per una manciata di puntatori o puntatori a funzione.
In C e' come fare un viaggio senza sporcare niente in giro, in JAVA lasci tutto dov'e' tanto dopo passano i netturbini... (garbage collector)
Se programmi male cmq vai in out of memory anche con Java (basta dimenticarsi i riferimenti alle classi)
successo proprio in azienda !
vittoriusly
18-05-2006, 09:49
Beh.. sembra che le directx 10 saranno disponibili solo per codice managed e che in futuro tutte le API di windows saranno eseguite in ambiente managed per evitare vulnerabilita' tipo buffer overflow.
Sul C++ ed i puntatori
Il programmatore e' responsabile della memoria che alloca e della sua gestione. Quindi impari a non lasciare "le cose in giro".
Java su sistemi embedded... JINI e i "java processors" che fine hanno fatto?
.NET compila "on-fly" lo IL e ne tiene una copia in cache, JAVA di suo non prevede come standard questa funzionalita'
Qualcuno mi spiega la dimensione dell'interprete JRE e di come riesca a "demolire" 2 cluster HP-UX per carico? Ovviamente c'erano delle applicazioni in esecuzione, ma la gestione delle risorse le lasciamo a chi?
In C e' come fare un viaggio senza sporcare niente in giro, in JAVA lasci tutto dov'e' tanto dopo passano i netturbini... (garbage collector)
System.gc()
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#finalize()
Comunque Java e C non hanno nulla in comune, se ti han messo a programmare i n Java senza prima spiegarti basi di OOP e Ingegneria del software, non usi nemmeno il 10% delle potenzialità di java
Chi conosce java non tornerebbe per nessuna ragione al C++
Poi vabbè qui c'è gente che paragona il C a Java, senza neanche sapere che uno è un linguaggio a oggetti e l'altro neanche sa cosa siano gli oggetti.
http://developer.gnome.org/doc/API/2.0/gobject/pr01.html
Il C sa ogni cosa ;)
http://developer.gnome.org/doc/API/2.0/gobject/pr01.html
Il C sa ogni cosa ;)
è furbissimo usare il c con la libreria a oggetti.
e il polimorfismo ce l'ha? le eccezioni?
è furbissimo usare il c con la libreria a oggetti.
e il polimorfismo ce l'ha? le eccezioni?
polimorfismo -> si
gestione delle eccezioni -> cosa centra con l'OOP? e' un aiuto che il C++ o il Java danno per costruire sistemi più stabili. Dimenticavo, esiste la gestione dei segnali in C.
è furbo usare il c con una libreria ad oggetti? -> si, basta fare le cose in modo consono.
polimorfismo -> si
gestione delle eccezioni -> cosa centra con l'OOP? e' un aiuto che il C++ o il Java danno per costruire sistemi più stabili.
è furbo usare il c con una libreria ad oggetti? -> si, basta fare le cose in modo consono.
Bè allora continuate pure a divertirvi con C.. che vi devo dire.
tomminno
18-05-2006, 10:43
Guarda questo:
int f(int x, int y)
{
return x + y;
}
void main()
{
int x = 0;
int y = 1;
printf(f(x = x + 1, y == x));
}
Stampa 1 o 2?
A me stampa 2 come mi aspetterei.
Inserendo f(x = x + 1, y == x) tra le espressioni di controllo però il risultato è 3 [;)]
tomminno
18-05-2006, 10:45
Vabbè sono tante, a parte i puntatori che se na vanno a spasso dove gli dici di andare, e se ti sbagli addio... poi cose che sinceramente non capisco come l'ereditarietà multipla.
Scusa ma un programmatore deve saper fare il proprio lavoro!
Se ritieni inutile l'ereditarietà multipla chiediti come mai in C# puoi usarla per le interfacce, se fosse proprio inutile non l'avrebbero inclusa (e io l'ho già usata parecchio). Il C++ dà una possibilità in più sta al programmatore saperla usare, dopotutto puoi sempre limitarti ad ereditare classi astratte.
Non basta se lo vuoi fare con Poseidon, ma io ho un A64 con 1 GB di RAM quindi me ne sbatto :D
Spiegami per quale motivo un P3 non dovrebbe essere sufficiente per disegnare 4 quadrati e 5 frecce, quando va benissimo per altri compiti ben più impegnativi.
Bè allora continuate pure a divertirvi con C.. che vi devo dire.
La mia era una constatazione di una tua frase errata, cioè che in C gli oggetti fossero solo un miraggio.
ErPazzo74
18-05-2006, 10:52
beh io ho programmato in tutti i linguaggi qui citati e devo dire che programmando in C dopo aver raggiunto una buona conoscenza del linguaggio lo sviluppo è veloce e anche sicuro. Il linguaggio è sicuramente molto performante, ma sinceramente Java a me piace molto perche molto facile da apprendere e da usare e sinceramente veloce anche con sistemi molto datati (se ben programmato). Inoltre fornisce molte librerie molto complete ma anche moltissime librerie opensource utilissime. Per chi dice che eclipse è pesante.....direi che non lo ha mai usato io lo uso a lavoro su un P4 3Ghz con 1giga di ram e non ho notato molte differenze con Eclipse fatto girare sul mio portatile con PIII 850Mhz e 256mega (e devo dire che la cosa mi ha lasciato di sasso, tranno come tempi di avvio che con un HD da 4200 di 6 anni fa la differenza si vede). La differenza tra i due computer è che il portatile è W98 e ovv. il computer di lavoro è XpPro. Sarà che io ho sempre programmato con SWT e le applicazioni che faccio vanno velocissime (tanto quanto le GTK in C per intenderci sempre programmate x un'altra applicazione). Certo non sto parlando di applicazioni titaniche ma comunque neanche di Hello World. Se non sbaglio la mia applicazione raggiunge punte di 18 mega niente di esagerato.....
Tra l'altro l'applicazioni da me fatte sono molto CPU intensive (son dei modelli matematici tutti in doppia precisione) e vanno bene.
Quel che ho notato nel mio gruppo di lavoro è che le persone che nn conoscono ne C e ne C++ ne si son mai posti problemi di ottimizzazione del codice per cui scrivono codice tanto per scrivere quel che ne vien fuori è che i programmi C# e Java son lenti ma non per colpa dei linguaggi ma per colpa di chi li programma.
Sono linguaggi sicuramente più lenti ma non di un ordine, soprattutto se con java si usano le SWT le applicazioni son veloci e leggere.
Quel che ho notato invece io è che C# 1.x è molto + lento e pesante di java+swt, certo sono impressioni personali basate sulle applicazioni che ho sviluppato ma un'applicazione che feci in C# in java con le SWT sarebbe stata molto + veloce, ma + lenta da sviluppare in quanto a me C# è parso veramente semplice da utilizzare.
Riguardo il C++ il difetto principale è che è + difficile dei precedenti e che va programmato con accortezza ma questo è anche un suo punto di forza secondo me perche ti permette di comprendere a fondo quel che fai.
X dupa: se non erro la system.gc nn da nessuna garanzia di quando verrà effettivamente eseguita la GC
x fek: x avere + "interattivita" hai provato mai la incremental GC?
(Non vorrei che con java5 fosse il default, io l'ho usata con java 1.4 quando era sperimentale e ne sono molto soddisfatto)
Avete provato a fare la visualizzazione verbose delle GC, aiuta molto vedere quanta ram viene allocata e liberata anche per ridurre eventuali sprechi (certo un bel profiler è molto meglio) e quanto spesso vien chiamata la GC e quanto tempo impiega ogni volta....
Dimenticavo di dire la mia sulal news!
Che Java diventi open-source non può che farmi piacere. Sicuramente sarà un'ottima notizia per i Debianisti ghgh. Speriamo solo in una licenza il più vicina possibile al free software.
Ritengo Java (usato solo all'università e per un piccolo esperimento di algebra lineare), un linguaggio di programmazioni con molti pregi (sintassi, sicurezza, trasportabilità... ecc) e un solo difetto: guardandolo da lontano è tutto rosa e fiori ma se si vuole realmente fare qualcosa di veloce, leggero e funzionale si deve lavorare quasi quanto C++ o C, senza comunque ottenere i risultati di questi ultimi (almeno nelle applicazioni da me sviluppate negli anni).
Ritengo che, al di la di tutto, ogni linguaggio ha uno scopo. Quello di Java è la portabilità.
Dimenticavo di dire la mia sulal news!
Che Java diventi open-source non può che farmi piacere. Sicuramente sarà un'ottima notizia per i Debianisti ghgh. Speriamo solo in una licenza il più vicina possibile al free software.
Ritengo Java (usato solo all'università e per un piccolo esperimento di algebra lineare), un linguaggio di programmazioni con molti pregi (sintassi, sicurezza, trasportabilità... ecc) e un solo difetto: guardandolo da lontano è tutto rosa e fiori ma se si vuole realmente fare qualcosa di veloce, leggero e funzionale si deve lavorare quasi quanto C++ o C, senza comunque ottenere i risultati di questi ultimi (almeno nelle applicazioni da me sviluppate negli anni).
Ritengo che, al di la di tutto, ogni linguaggio ha uno scopo. Quello di Java è la portabilità.
Bè sì Java va bene solo per piccoli esperimenti, peccato che J2EE ha una valanga di application server sviluppati dalle maggiori società mondiali, Oracle e IBM tanto per far due "piccoli" esempi.
ShadowX84
18-05-2006, 11:59
Bè sì Java va bene solo per piccoli esperimenti, peccato che J2EE ha una valanga di application server sviluppati dalle maggiori società mondiali, Oracle e IBM tanto per far due "piccoli" esempi.
Giusto, mi permetto di aggiungere anche io degli esempi per il mondo Java:
Intanto un tool eccezionale che non ha eguali per la piattaforma .NET (che comunque ritengo valida) e (credo) per altre piattaforme ecc: http://maven.apache.org che serve per documentare/generare il codice.
www.atlassian.com/software/jira/ che è un'issue track tra i più diffusi del mondo open source.
lo stesso tomcat: http://tomcat.apache.org non è da sottovalutare...
...e ce ne sono tanti altri, lo stesso progetto che ho in sign (per carità è piccolino) è sviluppato interamente con tecnologia Java (anche se tra brave verranno integrate altre tecnologie come hibernate e srping), quello che fa la differenza, com'è stato fortunatamente ripetuto più e più volte in questa discussione, è come viene scritto il codice.
Se alla base c'è una buona ingegnerizzazione si otterrano delle applicazioni veloci e leggere (entro i limiti di determinati campi di applicazione).
A me stampa 2 come mi aspetterei.
Inserendo f(x = x + 1, y == x) tra le espressioni di controllo però il risultato è 3 [;)]
Ho visto dei compilatori embedded che stampano 1 o 2 a seconda di dove chiami la funzione :D
Lo standard non definisce il risultato, puoi cambiare opzioni di compilazioni, o passare ad una versione successiva del compilatore e il risultato puo' cambiare.
Intanto un tool eccezionale che non ha eguali per la piattaforma .NET (che comunque ritengo valida) e (credo) per altre piattaforme ecc: http://maven.apache.org che serve per documentare/generare il codice.
Maven e' un tool di building e deploying dell'applicazione assolutamente ottimo. L'equivalente in .NET e' il framework di VS2005 attorno a msbuild.
polimorfismo -> si
gestione delle eccezioni -> cosa centra con l'OOP? e' un aiuto che il C++ o il Java danno per costruire sistemi più stabili. Dimenticavo, esiste la gestione dei segnali in C.
è furbo usare il c con una libreria ad oggetti? -> si, basta fare le cose in modo consono.
Beh, anche in assembly puoi programmare ad oggetti, ma non e' furbo scrivere un'applicazione complessa in assembly :)
E non e' neppure furbo scriverla in C, visto che il C++ (ancora meglio Java e C#) mette a disposizione tutta una serie di strumenti sia del linguaggio sia di verifica che aumentano di molto produttivita' e correttezza dell'applicazione.
In sintesi: si puo' programmare ad oggetti in C? Si'. E' furbo farlo? No.
Ritengo Java (usato solo all'università e per un piccolo esperimento di algebra lineare), un linguaggio di programmazioni con molti pregi (sintassi, sicurezza, trasportabilità... ecc) e un solo difetto: guardandolo da lontano è tutto rosa e fiori ma se si vuole realmente fare qualcosa di veloce, leggero e funzionale si deve lavorare quasi quanto C++ o C, senza comunque ottenere i risultati di questi ultimi (almeno nelle applicazioni da me sviluppate negli anni).
Ti assicuro che e' vero il contrario, e' molto piu' semplice e veloce scrivere qualcosa di leggero e funzionale in Java/C# che scriverlo in C++.
x fek: x avere + "interattivita" hai provato mai la incremental GC?
(Non vorrei che con java5 fosse il default, io l'ho usata con java 1.4 quando era sperimentale e ne sono molto soddisfatto)
No mai usato. Il problema e' proprio il fatto che la definizione di Java non prevede la finalizzazione deterministica degli oggetti, quindi nessun GC conforme alle specifiche Java puo' fare quello che mi serve.
ShadowX84
18-05-2006, 12:11
Maven e' un tool di building e deploying dell'applicazione assolutamente ottimo. L'equivalente in .NET e' il framework di VS2005 attorno a msbuild.
Non sapevo che VS2005 avesse un qualcosa di simile a Maven. è altrettanto valido?
Per curiosità: anche tu fek giri un pò sul mondo dell'open?
Non sapevo che VS2005 avesse un qualcosa di simile a Maven. è altrettanto valido?
Si', e' ottimo. E' molto flessibile (quindi anche molto complesso)
Per curiosità: anche tu fek giri un pò sul mondo dell'open?
Io cerco di usare gli strumenti migliori per risolvere i problemi che devo affrontare, qualunque siano questi strumenti :)
MenageZero
18-05-2006, 12:45
Ma... infatti funziona più o meno a tutti... tranne che a me ed a un'altro utente del forum con lo stesso problema...
C'era anche un thread per sperare in qualche aiuto ma nessuno ci ha mai illuminato... che sia la volta buona?
Il thread è il seguente:
http://www.hwupgrade.it/forum/showthread.php?t=1067815
ciao, ti ho postato qualcosa su quel thread, spero ti possa essere utile (ma purtroppo ne dubito)
RedDrake
18-05-2006, 12:59
da uno che scrive
f(x = x + 1, y == x)
non può venire niente di buono,
a prescindere dal linguaggio
:rolleyes:
MenageZero
18-05-2006, 13:02
"sondaggio": eclipse 3.2 o netbeans 5.5 (o JavaStudio di Sun)?
più che altro sono in cerca di un consiglio per una scelta "definitiva", li ho già usati entrambi (javastudio invece mai), ma probabilmente non tanto estensivamente o per tanto tempo quanto altri utenti qui... :p
"sondaggio": eclipse 3.2 o netbeans 5.5 (o JavaStudio di Sun)?
più che altro sono in cerca di un consiglio per una scelta "definitiva", li ho già usati entrambi (javastudio invece mai), ma probabilmente non tanto estensivamente o per tanto tempo quanto altri utenti qui... :p
io tra i primi due che hai citato, preferisco eclipse.
In sintesi: si puo' programmare ad oggetti in C? Si'. E' furbo farlo? No.
Non vedo tutta questa poca furbizia negli strumenti che uso nei pogrammi che creo. Che sia meno produttivo di C++ è possibile ma ci sono troppi esempi che rendono C unito a gobject un buon approccio, esempi che dal mio punto di vista escludono una conclusione affrettata come "E' furbo farlo? No.". Secondo me hai tratto una conclusione troppo affrettata.
Ti assicuro che e' vero il contrario, e' molto piu' semplice e veloce scrivere qualcosa di leggero e funzionale in Java/C# che scriverlo in C++.
Punti di vista differenti ;)
Qualcosa è un termine generico che inevitabilmente tu intendi in un modo e io in un altro.
Non vedo tutta questa poca furbizia negli strumenti che uso nei pogrammi che creo. Che sia meno produttivo di C++ è possibile ma ci sono troppi esempi che rendono C unito a gobject un buon approccio, esempi che dal mio punto di vista escludono una conclusione affrettata come "E' furbo farlo? No.". Secondo me hai tratto una conclusione troppo affrettata.
Non e' una conclusione affrettata perche' e' provato da diversi studi come la produttivita' (e la correttezza del software) cali drasticamente al passare da linguaggi ad alto livello come Java/C# al C++ e poi, ultimo, al C.
Inoltre, non c'e' alcun motivo per preferire il C al C++ in alcuna applicazione.
E' interessante leggere Design and Evolution of C++ di Bjarne Stroustrup per capire i perche' dell'affermazione di sopra e per capire perche' la mia conclusione non e' affrettata.
da uno che scrive
f(x = x + 1, y == x)
non può venire niente di buono,
a prescindere dal linguaggio
:rolleyes:
Quello e' un esempio per chiarire il concetto, puoi complicare quel codice a dismisura e trovarti in situazioni che il linguaggio non definisce univocamente. Immagina del codice che puo' essere riportato a questa matrice:
F(A(), B());
Dove il risultato di A() dipende dall'ordine di esecuzione rispetto a B(). Di nuovo lo standard in questa situazione non ti garantisce chi viene eseguito per primo, A o B.
E' per questo che si consiglia di scrivere sempre il codice cosi':
a = A();
b = B();
F(a, b);
In questo codice l'ordine e' garantito, e il risultato e' sempre il medesimo.
RedDrake
18-05-2006, 14:13
volevo solo dire che quando si scrive codice
(soprattutto al livello professionale),
la leggibilità è sempre molto importante.
Con il tempo rischi di non ricordare neppure
che cosa fa il codice scritto da te stesso!
( se vi interessa andatevi a vedere il concorso
di obfuscated C
http://www.ioccc.org/ )
Il kernel di Linux è un esempio, nel tempo è
migliorato moltissimo il modo in cui è scritto il codice
(mi pare da un'occhiata superficiale...
non sono un kernel hacker).
Le porcherie le si può fare con ogni tipo di linguaggio.
Nel lavoro uso C# e devo dire che per applicativi
gestionali a finestre è comodo e veloce,
ma non ho termini diretti di paragone con Java.
ErPazzo74
18-05-2006, 14:48
......cut...........
No mai usato. Il problema e' proprio il fatto che la definizione di Java non prevede la finalizzazione deterministica degli oggetti, quindi nessun GC conforme alle specifiche Java puo' fare quello che mi serve.
Guarda quando io lessi a cosa serviva l'Incremental GC, si parlava appunto di applicazioni tipo streaming video/audio....insomma qualcosa di diverso rispetto ad un'applicazione gestionale o web, ma capisco anche le tue necessità non a caso sto facendo un sistema di videosorveglianza in C++ ;).
Per le tue necessità puoi usare Java, basta preallocare tutto all'inizio del programma e verrà deallocato tutto alla fine quando chiudi :D :).
(Ovv. il riferimento al real-time è voluto)
undertherain77
18-05-2006, 14:55
PER COSCHIZZA: "fare programmini in java puo andare bene ma fare programmi in java è un altra cosa".
Ti parla un programmatore Java e .NET, da una decina d'anni, ormai.
Non fare affermazioni, se non è il tuo "pane"...
Senza offesa, ma la frase che hai scritto è proprio una gran stronzat...
Ciao, bello! ;)
Per le tue necessità puoi usare Java, basta preallocare tutto all'inizio del programma e verrà deallocato tutto alla fine quando chiudi :D :).
(Ovv. il riferimento al real-time è voluto)
Allocare tutto all'inizio e' esattamente quello che non posso fare in un Engine 3D :)
Java va assolutamente benissimo per applicazione CPU intensive; come ho spiegato NON e' un linguaggio interpretato.
Scusa fek, a me avevano insegnato un'altra cosa ma sicuramente mi fido di quel che dici... potresti però spiegarmi in cosa consiste la differenza nel compilazione di un'applicazione Java e di una .NET?
polimorfismo -> si
gestione delle eccezioni -> cosa centra con l'OOP? e' un aiuto che il C++ o il Java danno per costruire sistemi più stabili. Dimenticavo, esiste la gestione dei segnali in C.
è furbo usare il c con una libreria ad oggetti? -> si, basta fare le cose in modo consono.
Vabbè ma tutto si può fare con i linguaggi di basso livello, però se si usano le eccezioni (che non sono semplicemente un aiuto, ma un modo di pensare diverso!), le classi, il polimorfismo... tanto vale usare un linguaggio di alto livello che ha questi concetti radicati nella stessa sintassi, è sicuramente più semplice e veloce...
Scusa ma un programmatore deve saper fare il proprio lavoro!
Certo ma più il lavoro è complicato più è facile sbagliare, a parità di programmatore. Quindi perché complicarsi la vita usando un linguaggio non adatto allo scopo? Cioè per fare un applicativo tipo gestionale che lavora per un database, il codice managed ad esempio non limita di certo le potenzialità, anzi aggiunge sicurezza.
Poi se uno si trova meglio a scrivere tutto in assembly va benissimo, ma mi verrebbe da dire che è un malato :)
Se ritieni inutile l'ereditarietà multipla chiediti come mai in C# puoi usarla per le interfacce,
Si può fare anche in Java, giustamente.
Un conto è implementare le interfaccie, un conto è ereditare una classe, c'è una bella differenza, fosse solo per il fatto che nelle interfacce non c'è codice...
Spiegami per quale motivo un P3 non dovrebbe essere sufficiente per disegnare 4 quadrati e 5 frecce, quando va benissimo per altri compiti ben più impegnativi.
Usa quello che serve a te che io uso quello che serve a me, non mi mettere in bocca cose che non ho detto. A me serve un software per fare diagrammi UML che sia multipiattaforma, e non ho problemi di hardware per Poseidon. Poi ho citato anche altre applicazioni che ora non ricordo :D
ErPazzo74
18-05-2006, 17:02
Allocare tutto all'inizio e' esattamente quello che non posso fare in un Engine 3D :)
Dipende dalla RAM ;)
Sto scherzando ovviamente.....conosco bene le problematiche del 3d......
1) se scrivevi un gestionale a oggetti, con java hai un sistema a oggetti comprensibile, hai una JVM sicura e stabile, hai un sacco di librerie standard ben supportate e documentate e puoi far girare il tuo gestionale ovunque.
C++ va bene solo nei casi in cui ti devi appoggiare a specifiche librerie su specifici OS, nel caso esempio delle directx per sviluppare videogiochi
2) ripeto che non puoi paragonare un linguaggio NON ad oggetti a uno a oggetti. sono due mondi diversi.
C al giorno d'oggi va bene giusto per scrivere routine a bassissimo livello.
3) multipiattaforma?? ma se mono NON è neanche supportato dalla MS :rolleyes:
1) questo rientra nel caso "usavi lo strumento sbagliato". comunque sia nessuno ti obbliga a programmare in dx.. esistono le opengl per giochi multipiattaforma :) qualcuno se le ricorda? (domanda provocatoria :asd: )
2) non puoi paragonare nemmeno C++ con java. e poi io non ho paragonato un bel niente! ho solo detto che quello che si può fare in C.
3) e allora? è sempre multipiattaforma ed è sempre .NET (per curiosità.. l'hai mai usato?). tra le altre cose esiste anche dotGNU.
mmhh..per quanto riguarda il 3D..sarò stupido (..e beh, in effetti ho dei fatti inconfutabili che lo certificano :D ), ma non riesco a capire dove sia questo grande problema nel ciclo di vita degli oggetti..nel senso, il garbage collector cmq libera dalla memoria oggetti che oramai sono fuori dallo scope, cosa sana, giusta e sacrosanta..anche scrivendo in C++ dovrebbe essere giusto sano e sacrosanto deletare le cose prima che dei puntatori vadano fuori dallo scope.
bah. c'è sicuramente ql.sa che mi stà sfuggendo :cry:
(..e cmq se questo fosse un problema insormontabile, cm fanno a fare, quei pazzi che lo fanno, del 3d cn java?)
uuhh..per quanto riguarda le opengl..beh, sn delle ottime api per fare 3d..il fatto è che cmq le dx coprono ambiti che le ogl per ora non supporta..e ricordiamo che il mercato di riferimento dei videogiochi per pc in pratica ha un solo comandamento: "non conoscerai altro SO al di fuori di uinzoz" :O (..e cmq il buon vecchio zio ID se le ricorda le OGL, oh..se le ricorda!)
mmhh..per quanto riguarda il 3D..sarò stupido (..e beh, in effetti ho dei fatti inconfutabili che lo certificano :D ), ma non riesco a capire dove sia questo grande problema nel ciclo di vita degli oggetti..nel senso, il garbage collector cmq libera dalla memoria oggetti che oramai sono fuori dallo scope, cosa sana, giusta e sacrosanta..
Però lo fa quando gli pare a lui.
Del tipo: un oggetto non ha più riferimenti dal nessuna parte, quando passa il garbage collector lo spazza via. Ma quando passa il garbage collector?
Almeno questo per quanto ne so, poi certamente le cose saranno più complicate...
Il problema e' proprio il fatto che la definizione di Java non prevede la finalizzazione deterministica degli oggetti, quindi nessun GC conforme alle specifiche Java puo' fare quello che mi serve.
Quando vendono una cosa senza dirti il prezzo io penso sempre che sia per proteggere i deboli di cuore :D
E' il caso della versione Sun delle specifiche RTSJ.
http://java.sun.com/j2se/realtime/
Sfruttano proprio il fatto segnalato da fek: al linguaggio del come e quando la memoria sia liberata non importa. Anche se importa al programmatore.
Chi è che ha un paio di centomila dollari che gli cadono dalle tasche e prova un HelloWorld RTSJ? :D
Vabbè ma tutto si può fare con i linguaggi di basso livello, però se si usano le eccezioni (che non sono semplicemente un aiuto, ma un modo di pensare diverso!), le classi, il polimorfismo... tanto vale usare un linguaggio di alto livello che ha questi concetti radicati nella stessa sintassi, è sicuramente più semplice e veloce...
Dipende da ciò che devi fare. Usare il concetto che sta alla base degli oggetti in C può essere utile in molti casi. L'OOP è un "modo di pensare" che facilità la stesura e la pulizia dei programmi, non è una proprietà esclusiva di C++, Java, Python e compagnia.
Comunque C è un linguaggio di ALTO livello con pochi costrutti e parole.
beh..il GC di java non è che passa esattamente "quando gli pare"..certo è un thread che può dare fastidio, cm ho già avuto modo di dire. Ci sono delle determinate occasioni in cui: ferma la computazione, scansiona la memoria (..ecco, qui è pezzo in cui si fa sentire di +), detiene i puntatori fuori scope e finalmente libera la memoria; ad esempio quando l'applicazione supera determinati "limiti" di memoria (ovviamente non ho idea di quali siano :D ), o quando è passato un certo periodo di tempo dall'ultima volta che l'ha fatto (anche se di questo non ne sono proprio sicuro).
Poi volendo si può (quasi) forzare il GC ad essere eseguito ad una determinato momento della conmputazione ( System.gc() ). beh questo cmq non lo ferma dallo svegliarsi quando crede sia il momento + adatto.
Gli algoritmi di GC di java e .NET sono l'unica cosa tenuta segreta perchè molto complicati (anche se forse adesso quello di java è pubblicamente accessibile, non saprei)
Non si basano certo su una sola metrica, possono anche essere incrementali o generazionali. Fatto sta che non lo sapremo mai con esattezza :)
mmhhh...sn quasi completam. ubr..ick :D
cmq, sì vero..sicuramente l'algoritmo del GC è piuttosto complesso..sul fatto che non lo sapremo mai con certezza..beh, il fatto che Java stà per essere rilasciato open source direi che è un'ottima risposta ;)
(ps..probabilmente quello che sto per dire è dettato dalle mie condizioni psicofisiche non proprio brillanti, diciamo, cmq.. malediz!! voglio le reflection in C++ :D (e non ditemi "c'è pure il dynamic cast", io voglio un oggetto "method" :cry: ) ..bah, farfugliazioni di un pazzoide :fagiano: )
ErPazzo74
19-05-2006, 08:43
Gli algoritmi di GC di java e .NET sono l'unica cosa tenuta segreta perchè molto complicati (anche se forse adesso quello di java è pubblicamente accessibile, non saprei)
Non si basano certo su una sola metrica, possono anche essere incrementali o generazionali. Fatto sta che non lo sapremo mai con esattezza :)
Uno dei primi algoritmi di GC era stato fatto da un Prof. di Pisa poi è stato sostituito con un algo migliore da java2 in poi.....che io mi ricordi non era niente di difficile....ma potrei sbagliarmi era tanti anni fa.
Io cmq al momento ho sulla mia macchina i sorgenti di Java (e mi son tornati pure utili per risolvere 1 "bug" di javacomm), basta registrarsi e scaricarseli solo che ovviamente al momento non sono modificabili (come tipo di licenza)......credo che questo diventare open-source
presupponga la possibilita di modificarli a piacimento o lo possibilita di scaricarli e distribuirli senza doversi registrare.
Stavo guardando java RTS e ho visto che forse solo i sorgenti di j2se son scaricabili, forse j2ee no e questa forse sarà la novita del diventare opensource.
System.gc()
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#finalize()
Comunque Java e C non hanno nulla in comune, se ti han messo a programmare i n Java senza prima spiegarti basi di OOP e Ingegneria del software, non usi nemmeno il 10% delle potenzialità di java
hai mai provato ad usare quella chiamata in un programma complesso ???
sai cosa comporta ?? una Full GC... una ricerca globale e meticolosa di tutti gli oggetti non referenziati a prescindere dalle aree "eden" e "tenured". disastrosa in termini di performance...
Il nostro server si ferma per 4 (QUATTRO !!) secondi: non risponde piu' a niente e a nessuno, nonostante il GC viene eseguito in un altro thread...
sul sito della Sun e' parecchio sconsigliato usare chiamate esplicite alla GC :read:
il peggiore dei mali e lasciare alla JVM di decidere quando fare una GC: di solito non esegue una Full GC, e il server almeno "sopravvive".
hai mai provato ad usare quella chiamata in un programma complesso ???
sai cosa comporta ?? una Full GC... una ricerca globale e meticolosa di tutti gli oggetti non referenziati a prescindere dalle aree "eden" e "tenured". disastrosa in termini di performance...
Il nostro server si ferma per 4 (QUATTRO !!) secondi: non risponde piu' a niente e a nessuno, nonostante il GC viene eseguito in un altro thread...
sul sito della Sun e' parecchio sconsigliato usare chiamate esplicite alla GC :read:
il peggiore dei mali e lasciare alla JVM di decidere quando fare una GC: di solito non esegue una Full GC, e il server almeno "sopravvive".
Il senso di chiamare a mano il gc() è quello di chiamarlo quando sai che il tuo server è scarico.
Non è che avete qualche finalize particolarmente complessa?
Avete provato a fare la visualizzazione verbose delle GC, aiuta molto vedere quanta ram viene allocata e liberata anche per ridurre eventuali sprechi (certo un bel profiler è molto meglio) e quanto spesso vien chiamata la GC e quanto tempo impiega ogni volta....
E' proprio con questa visualizzazione che mi sono accorto del modo abominevole di usare la RAM di Java...
Gli algoritmi di GC di java e .NET sono l'unica cosa tenuta segreta perchè molto complicati (anche se forse adesso quello di java è pubblicamente accessibile, non saprei)
Non si basano certo su una sola metrica, possono anche essere incrementali o generazionali. Fatto sta che non lo sapremo mai con esattezza :)
non penso.. se fosse complicato costerebbe troppo eseguirlo
Il senso di chiamare a mano il gc() è quello di chiamarlo quando sai che il tuo server è scarico.
Non è che avete qualche finalize particolarmente complessa?
vabbe', ma vedi che vieni al mio discorso: se fosse fatto in C, per ogni richiesta il servere allocherebbe e DEALLOCHEREBBE ram e non avremmo MAI disservizio. Visto che e' in Java l'occupazione sale fino al 65% dell' heap definito e poi la JVM si spupazza una GC per deallocarla.
se la forzi tu e' ancora peggio, con disservizi vari (ed in questo caso il disservizio significa perdere soldi...)
La gestione della RAM in Java non e' adatta a programmi Server.
(mi fa' ridere che c'e' pure l'opzione -server nella JVM... :) )
The Son of Krypton
19-05-2006, 11:09
>
Non credo proprio perche' il C e' un linguaggio compilato e quindi ha prestazioni migliori del java che e' interpretato.
Il java va comunque bene per programmi semplici.
<
Si ma Java viene anche usato per applicazioni realtime: controlli di processo ecc...
maxithron
19-05-2006, 11:14
Non userei Java o .NET per fare grafica 3d in tempo reale, ma non per le prestazioni che sono ottime. Il problema e' il controllo sul ciclo di vita degli oggetti, che in Java e .NET non e' sotto controllo del programmatore, ma dipende dal garbage collector, mentre in C++ e' sotto diretto controllo.
Con la premessa dell'indeterminabilità di 'quando' il gc interverrà sugli oggetti creati, nei limiti del possibile, in C# ci si può assicurare comunque una chiamata a IDisposable in questa maniera:
using(Object object = new Object())
{
object.SimpleTest()
}
All'uscita dal blocco la chiamata a Dispose() è garantita.
E' scontato che l'oggetto non dovrà essere utilizzato alla fine del blocco.
Per quanto riguarda il mondo 3d, non ho nessuna cognizione ne esperienza in merito, ma, considerando la rigidità di cui si parla per l'assoluta precisione in fase deterministica per il ciclo di vita degli oggetti, effettivamente non credo che, al momento, ci siano modi diversi dal C++ per affrontare il problema.
Dipende da ciò che devi fare. Usare il concetto che sta alla base degli oggetti in C può essere utile in molti casi. L'OOP è un "modo di pensare" che facilità la stesura e la pulizia dei programmi, non è una proprietà esclusiva di C++, Java, Python e compagnia.
Comunque C è un linguaggio di ALTO livello con pochi costrutti e parole.
Tutto giusto ma... tanto vale usare un linguaggio di più alto livello che ha questi concetti radicati nella stessa sintassi, è sicuramente più semplice e veloce. :D
non penso.. se fosse complicato costerebbe troppo eseguirlo
E infatti quando parte il GC lo sente tutto il sistema.
Un algoritmo stupido si scandisce tutto l'heap 2 volte (mark e sweep).
La GC è ancora argomento di ricerca, e siamo ancora a livelli sperimentali.
The Son of Krypton
19-05-2006, 22:01
>
Beh, anche in assembly puoi programmare ad oggetti, ma non e' furbo scrivere un'applicazione complessa in assembly
E non e' neppure furbo scriverla in C, visto che il C++ (ancora meglio Java e C#) mette a disposizione tutta una serie di strumenti sia del linguaggio sia di verifica che aumentano di molto produttivita' e correttezza dell'applicazione.
In sintesi: si puo' programmare ad oggetti in C? Si'. E' furbo farlo? No.
<
Forse sfugge una cosa fondamentale perche' si possa parlare di OOP: ENCAPSULATION o DATA HIDING.
Non e' tanto il fattore complessita' o strumenti di verifica, quanto il girare questi due fattori: da ALGORITHMS+DATA STRUCTURES a DATA STRUCTURES+ALGORITHMS e l'incapsulamento delle stesse strutture dati (come si diceva, strumenti di linguaggio).
Seguono l'EREDITARIETA' ed il POLIMORFISMO.
Il POLIMORFISMO "lavora al suo massimo" con il LATE BINDING (DYNAMIC BINDING o DYNAMIC DISPATCH).
Quindi questo frega il C++ nei confronti di Java ed ObjectiveC.
A sua volta Java e' fregato dall'ObjectiveC dal fatto di essere STRONGLY TYPED quindi di dover specificare un tipo per oggetto (che deve stare nella catena di ereditarieta' o una interfaccia) come destinatario di un messaggio.
ObjectiveC (come Smalltalk) e' invece "piu' puro", un VERO linguaggio OOP, multipiattaforma (mac, linux, windows ecc...) come Java.
Per quanto riguarda le prestazioni di Java possiamo dire un "dipende". Oggi come oggi le cose sono state notevolmente migliorate, grazie anche ai JIT. Inoltre possiamo usare la keyword "final" per ovviare all'overhead posto dal meccanismo di DYNAMIC DISPATCH che permette al compilatore di mettere inline il codice di una funzione, e cmq Java trova applicazioni in molti ambiti di reatime solutions.
La stessa cosa per ObjC: specificando il tipo dell'oggetto e con direttive si ovvia al dynamic dispatch, anche se una chiamata ad una funzione normalmente, una volta cachata, e' uguale a quella C o C++ equivalente.
Salut!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.