|
|
|
![]() |
|
Strumenti |
![]() |
#81 |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Mi e' venuto in mente solo ora. Vorrei chiarire un punto. Chi ha seguito il mio scambio di opinioni con ilsensine riguardo all'efficienza del C++ rispetto al C, potrebbe obiettare che se seguissi la stessa linea di pensiero dovrei concludere che Java, essendo a piu' alto livello del C++ come il C++ lo e' rispetto al C, dovrebbe essere sempre preferibile e altrettanto efficienze.
Rispondo subito a questa possibile obiezione. Il C++ e' un superset del C, tutti i concetto che possono essere espressi in C possono essere espressi in C++ allo stesso modo o in maniera migliore. Java non e' un superset del C++ e non puo' esprimere alcuni concetti che il C++ puo' esprimere, quindi non tutto quello che puo' essere scritto in C++ puo' essere scritto in maniera altrettanto efficiente in Java. Al contrario tutto quello che puo' essere scritto in C puo' essere scritto in maniera altrettanto efficiente in C++.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
![]() |
![]() |
![]() |
#82 | ||
Senior Member
Iscritto dal: Jun 2004
Città: Milano
Messaggi: 461
|
Quote:
Le uniche cose su cui non concordo sono dettagli e rimangono nell'ambito delle opinioni personali: - C# non lo preferisco affatto a java per tanti motivi, primo tra i quali, che se in un mio progetto devo interfacciare classi C++, c'è qualcosa di sbagliato nell'architettura ![]() ![]() - java non è stato progettato lento per scelta. E' stato progettato per essere un linguaggio che non avesse bisogno di porting (e mille altre cose): da cui la scelta quasi obbligata per un linguaggio interpretato. Il resto sono conseguenze. - che java sia un linguaggio attualmente più lento di un compilato in codice nativo, è indubbiamente vero. Che java ad oggi sia lento in assoluto, no. - mi sfugge il motivo per cui si debba sapere quando una zona di memoria è stata effettivamente liberata, quando non si ha accesso diretto alla memoria: se la gestione non è sotto il mio controllo, non vedo perchè mai preoccuparmi di conoscerne lo stato. Non è che il GC di java butti via memoria in uso: libera solo quelle zone a cui non punta più alcun riferimento, per intenderci, se una variabile esce dal ciclo di vita, se impostata a null, etc. etc. Comunque qui ricadiamo nel discorso del C++ come rasoio: per queste cose (e parliamo di soprattutto di gestione manuale dell'accesso alla memoria e quindi dei puntatori) è palesemente meglio (o più veloce) di un linguaggio che media con uno strato di astrazione e gestione, su questo non ci piove. E la mia considerazione sulla scelta del C++ per lo sviluppo di un desktop 3D, deriva da questo e da un paio di altri motivi che tu stesso hai detto e che mi piace sottolineare: Quote:
Sarà per scelta progettuale votata alla sicurezza, sarà per quello che volete, ma la realtà dei fatti è questa. Questo non vuol dire che non si possano tentare approcci alternativi o sperimentare soluzioni diverse. Il problema posto da cioni è chiaramente irrisolvibile se non scrivendo un layer apposito tra le applicazioni e il desktop in java (conosco JNI ma non conosco un equivalente lato C/C++). Ma è anche mal posto: anche per far girare applicazioni java su una piattaforma win32 ho bisogno di una VM. Per questo dicevo che dipende da cosa si vuole ottenere. Poi, per quanto riguarda il discorso della portabilità, mi spiace per chi non vuol capire, ma in java il problema non si pone neppure: anche nel caso descritto da cionci, la parte in java una volta compilata, rimarrebbe sempre la stessa. Punto. Senza doverla più ricompilare. Su tutte le VM. E' ben diverso che "scrivere codice portabile", il quale necessita comunque di una complilazione per poter essere eseguito. Al limite si dovrebbe cambiare il layer, ma non mi sembra che si stia parlando di qualcosa scritto in java. Sulla fattibilità del quale, tra l'altro, nutro forti dubbi. Ma vi pongo una domanda su cui riflettere: le applicazioni scritte per KDE girano anche sotto Gnome e viceversa? |
||
![]() |
![]() |
![]() |
#83 | |
Senior Member
Iscritto dal: Nov 2002
Città: Singularity
Messaggi: 894
|
Quote:
X per quello che ne so offre alcune primitive abbastanza scarne per la gestione di finestre. Un'applicazione che si appoggia solo a queste può girare benissimo in entrambi i sistemi, e con il vantaggio di usare il look&feel del WM usato. |
|
![]() |
![]() |
![]() |
#84 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#85 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Viceversa, visto che normalmente su qualunque sistema esiste uno straccio di compilatore C (con GNU, ad esempio, posso compilare applicazioni tanto per Commodore64 quanto per un Cray MP), migliaia e migliaia di applicazioni ("scritte bene") potranno essere utilizzate, e gireranno molto velocemente. In entrambi i casi, quindi, abbiamo bisogno di un "ambiente" disponibile: poco importa che sia la JVM o GNU con librerie QT o altro ancora, serve comunque "punto d'appoggio" per ottenere alla fine la possibilità di eseguire delle applicazioni. C'è ben poco da capire: si tratta di una realtà di cui prendere atto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#86 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
E' un problema ricompilare ?!?!? Non mi sembra... Forse mi sono perso qualcosa di Looking Glasses... Looking Glasses si interfaccia con X, ma facendo girare un'applicazione in GTK+ o QT avrebbe il look & feel originale ?!?!? |
|
![]() |
![]() |
![]() |
#87 | |
Senior Member
Iscritto dal: Jun 2004
Città: Milano
Messaggi: 461
|
Quote:
Non che tu dica nulla di sbagliato (a parte forse: "visto che normalmente su qualunque sistema esiste uno straccio di compilatore C "), ma addirittura dire che in termini di portabilità è preferibile una applicazione scritta in C da ricompilare di volta in volta che una scritta in java, francamente mi sembra quantomeno azzardato. E la realtà di cui prendere atto è forse un'altra... Cmq, tutto ciò credo sia OT. |
|
![]() |
![]() |
![]() |
#88 | |||
Senior Member
Iscritto dal: Jun 2004
Città: Milano
Messaggi: 461
|
Quote:
![]() Quindi sarebbe l'unico a dover essere distribuito per ogni ambiente. Ma, ripeto nutro forti dubbi su un approccio del genere. Quote:
Ma poi, siamo sicuri che sia la portabilità il fulcro della questione? Forse stiamo trascurando aspetti architetturali ben più importanti sollevati proprio dal tuo intervento: come sia possibile far girare applicazioni non java in un desktop scritto in java. Quote:
|
|||
![]() |
![]() |
![]() |
#89 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#90 | |||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Quote:
Quote:
Meglio fare un piccolo sforzo all'inizio, creando qualche file include in cui racchiudere tutto il codice o i dati non portabile, e ritrovarsi poi con un eseguibile per la piattaforma target che girerà con un'ottima velocità. Quote:
Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||||
![]() |
![]() |
![]() |
#91 | ||||
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
1) Se in un progetto devo interfacciare classi C++ a classi Java, c'e' sicuramente qualcosa di sbagliato nell'architettura: l'aver scelto Java ![]() 2) Qui forse non sono stato chiaro nella mia affermazione: Java e' stato progettato per essere un linguaggio ad alto livello per scelta, essere un linguaggio ad alto livello implica essere "piu' lento", e' una conseguenza immancabile che e' stata sicuramente prevista in fase di progettazione. Ma qui e' piu' un discorso filosofico di poca importanza. Quote:
Il GC non butta via ovviamente memoria in uso, il GC entra in funzione per definizione in maniera imprevedibile e questo comportamento non e' accettabile in un sistema in real time, dove le operazioni devono concludersi in un tempo deterministico. Ti faccio un esempio: immagina che stia finendo di spedire la geometria di una scena alla GPU e mi appresto a sincronizzare la CPU e la GPU per il prossimo frame e per mantenere il frame rate costante so di avere a disposizione, per dire, 2 millisecondi prima della fine del frame. Immagina che il GC decida di entrare in gioco proprio in questo momento (teoricamente puo' farlo) e sai meglio di me che non e' deterministico quando finira', puo' impiegare meno di 2 millisecondi, puo' impiegarne di piu'. Se impiega piu' di 2 millisecondi (teoricamente puo' farlo), mi salta il frame, torna il controlla alla CPU che pensa di aspettare la fine del frame precedente e invece aspetta la fine del frame successivo, perdendo un intero frame, visibile in un "glitch" dell'animazione, ed e' un effetto particolarmente fastidioso in una qualunque applicazione 3d. C'e' gia' il sistema operativo, Windows non e' un S.O. realtime, non e' possibile forzarlo a rilasciare il controllo in un tempo fisso, che decide di prendersi la CPU per un periodo indeterminato ed e' gia' faticoso controllare questo, non e' proprio il caso di crearsi ulteriori problemi con un garbage collector. In sintesi, scrivere un motore 3d in Java porrebbe dei problemi tali, la cui soluzione richiederebbe un sistema piu' complesso. Inoltre, per definizione, un motore 3d che deve pilotare un hardware in maniera efficiente e' un'applicazione molto poco portabile, ulteriore motivo per il quale Java non e' una scelta intelligente. Quote:
![]() A meno che non si sta facendo R&D per divertimento. Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
||||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:17.