|
|
|
![]() |
|
Strumenti |
![]() |
#141 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Li conosco entrambi, ma a livello di codice in comune non avranno praticamente niente: ecco perché non ha senso confrontarli.
__________________
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 |
![]() |
![]() |
![]() |
#142 | |
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2516
|
Quote:
ed in generale applicazioni in linguaggi non compilati, come python, risultano essere molto piu lente che programmi che fanno le stesse cose in linguaggi compilati. questa è la mia opinione... per le gui mi riferivo in generale, ho letto in altri post sul forum quella cosa |
|
![]() |
![]() |
![]() |
#143 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
"Casualmente" uso quasi sempre Python (da circa 3 anni), e a parte un po' di lentezza nel caricamento (la virtual machine deve partire per prima, e poi caricare i moduli dell'applicazione vera e propria), non mi sono mai lamentato della velocità d'esecuzione delle mie applicazioni.
![]()
__________________
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 |
![]() |
![]() |
![]() |
#144 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
E' anche vero che ritrovarsi un'eccezione perchè fallisce la conversione del float 5,096 in uno short è qualcosa di frustrante. In C++ sotto Windows sbattendoti con le SEH puoi trappare i segmentation fault, lo stack overflow è possibile trapparlo ma non avendo più spazio nello stack non hai modo di gestirlo. OT: qualcuno conosce se esiste un equivalente Linux per le SEH? La doppia deallocazione è un problema, ma generalmente sta scritto se la deallocazione è a carico del chiamante o meno (in C++ direi che non dovrebbe mai essere a carico del chiamante, oltretutto c'è modo di evitare il passaggio dei puntatori, vedi auto_ptr). E all'interno di una classe si spera che dopo la delete ci sia anche un'assegnazione a NULL del relativo puntatore. Per i memory leak questi sono possibili in tutti i tipi di linguaggio sia managed che no. Almeno in questo sono pari. Secondo me l'enorme vantaggio dei linguaggi managed sul C++ è quello di fornire una vasta libreria tutto sommato uniforme in cui è possibile trovare tutto quello che serve, invece di ricorrere a librerie sempre diverse con interfacce differenti. Buon 2008! |
|
![]() |
![]() |
![]() |
#145 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
![]() |
![]() |
![]() |
#146 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Per i memory leak non sono d'accordo: coi linguaggi managed (dotati di garbage collector) se un pezzo di memoria non risulta più usato / referenziato, prima o poi verrà deallocato. La stessa cosa non si può dire per i linguaggi non managed (che non fanno uso di meccanismi GC): se dimentichi una free/delete, rimani con la memoria allocata fino alla morte dell'applicazione. ![]() Auguri a tutti. ![]()
__________________
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 |
|
![]() |
![]() |
![]() |
#147 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Come pensi di poter scrivere codice a comune tra C++ e Java? Per essere comparabili non dovresti usare la STL del C++ che in Java non ha equivalente e viceversa per i generics. Ma se in Java si può fare benissimo a meno dei generics (che secondo me sono venuti fuori un pò malino a causa della retrocompatibilità del bytecode), togliere l'STL al C++ significa lavorare con il C con le classi: niente stream, string, vector, tr1... Non potresti usare i puntatori del C++ perchè non hanno controparte in Java. Non dovresti allocare niente sullo stack ma solo sulll'heap. In Java per il problema del boxing e unboxing (assente in C++) che faresti useresti int o Integer? Ma in C++ Integer non esiste quindi creeresti una classe Integer per fare pari? Insomma è impossibile scrivere codice comparabile di un certo interesse tra 2 linguaggi differenti. |
|
![]() |
![]() |
![]() |
#148 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Qualche post fa è stato riportato un link a Mokabyte dove viene riportato un esempio di memory leak in Java: nell'esempio il pop su uno stack non impostava a null l'oggetto estratto, così che il GC si trova sempre referenziato l'oggetto e non lo elimina mai. La dimenticanza equivalente in C++ sarebbe stata la mancata delete, ma che differenza c'è tra dimenticarsi elements[size] = null piuttosto che delete elements[size] ? In entrambi i casi hai memory leak. |
|
![]() |
![]() |
![]() |
#149 | ||
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4741
|
Quote:
![]() Quote:
![]() imho, una misura già più attendibile dell' overhead del runtime di un linguaggio, si avrebbe applicando a codice preesistente (in, per dire, C++) le modifiche necessarie e sufficienti per renderlo valido sintatticamente e semanticamente (quindi funzionante) in quel linguaggio (o viceversa), senza alterarne struttura e algortmi di funzionamento - ovvero un language port ... il codice di diamond crush ( java ) è a disposizione per ogni possibile uso, compresa, per chi volesse cimentarsi, una eventuale conversione in C++ ( a patto di aggiungere le deallocazioni degli oggetti e reimplementare strutture dati e meccanismi di introspection) - a questo punto, sarei perfino curioso di vedere un confronto quantitativo...
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 01-01-2008 alle 18:51. |
||
![]() |
![]() |
![]() |
#150 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Immagino che tu abbia preso un programma da 10000 righe di codice ed abbia fatto la verifica. Prego postare
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#151 | |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
![]() |
![]() |
![]() |
#152 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
E' chiaro che di un un linguaggio sono libero di utilizzare qualunque costrutto, ed eventualmente libreria. Quindi OK per l'STL per il C++, come pure per il framework standard di Java. Idem per i generics. Per i tipi di dati, userei gli scalari quando servono gli scalari, e i corrispettivi "boxed" (eventualmente generati automaticamente dal compilatore) quando servono invece degli oggetti. La mia idea è che la struttura dei programmi dev'essere praticamente identica, fatta eccezione per i casi in cui, appunto, si può usare qualche funzione e/o oggetto di libreria o caratteristiche peculiari per implementare particolari parti di codice. Questo se vogliamo fare dei confronti serii, in cui l'unica variabile diversa fra due applicazioni è, appunto, il linguaggio (e di esempi se ne trovano in giro) usato. ![]() Sull'altro messaggio vedo che ha già scritto marco, di cui condivido il pensiero.
__________________
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 |
|
![]() |
![]() |
![]() |
#153 | ||||
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Crea per esempio una pletora di piccoli oggetti, per esempio: Codice:
class MyTest { public: MyTest () { a = 0; b = 0; buf = new char[1024]; strcpy (buf, ""); } MyTest (int a, int b) { this->a = a; this->b = b; buf = new char[1024]; strcpy (buf, ""); } MyTest (const MyTest &myTest) { printf ("Costruttore di copia chiamato\n"); a = myTest.a; b = myTest.b; buf = new char[1024]; strcpy (buf, myTest.buf); } void setA (int a) { this->a = a; } void setB (int b) { this->b = b; } void setText (char *text) { strcpy (buf, text); } const char *getText () { return buf; } private: int a; int b; char *buf; }; Dopo di che, scrivi nel main: Codice:
void allochiamo () { printf ("Alloco un po'...\n"); time_t start = time (NULL); for (int i = 0; i < 1000000; i++) { MyTest *p = new MyTest; if (p) delete p; } time_t stop = time (NULL); printf ("Tempo di allocazione: %d\n", stop - start); } Codice:
static void allochiamo () { long start = Calendar.getInstance().getTimeInMillis (); for (int i = 0; i < 100000000; i++) { MyTest mytest = new MyTest(); } long stop = Calendar.getInstance().getTimeInMillis (); System.out.println ("Time: " + ((stop - start))); } Sul mio sistema Win XP, Java e' circa 100 volte piu' veloce. Infatti puoi vedere dalle mie prove che il numero di zeri nel ciclo Java e' piu' grande, anche perche' sul mio sistema C++, con lo stesso numero di zeri, non arriva a completamento in un tempo decente (ore). Dove sbaglio? Soprattutto, nel caso abbia commesso un errore, che tipo di errore e'? L'ho creato apposta per far "vincere"Java o si tratta di una normalissima prassi di programmazione? Perche' Java vince? Non dovrebbe perdere SEMPRE? Quote:
LOCALMENTE non riesce a battere C++, ma quando hai applicazioni da milioni di linee, le cose cambiano. Tanto piu' che le piattaforme a management di memoria (non solo Java) stanno vincendo sul mercato: mem leaks piu' difficili da produrre (ci vuole piu' entusiasmo), codice piu' robusto e possibilita' di fare ottimizzazioni a livello globale. Quote:
Codice:
MyTest getTest () { MyTest t; t.setA(5); t.setB(8); return t; } Oppure: Codice:
void doSome1 (MyTest myTest) Codice:
void doSome1 (const MyTest &myTest) Come evitare? Dovrai fare una copia locale, che potremmo chiamare "copia volontaria". Quote:
__________________
In God we trust; all others bring data |
||||
![]() |
![]() |
![]() |
#154 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Dimenticavo. Spesso e' utile controllar wikipedia.
Beh, la versione italiana non mi piace, visto che da notizie contrastanti da quella inglese ![]() Leggendo infatti al link http://en.wikipedia.org/wiki/Compiler il paragrafo "Compiled versus interpreted languages" si legge una cosa, secondo me, importante: Quote:
Quanto e' efficiente la macchina virtuale? Si puo' migliorarla con un layer software in piu'? Cosa ne pensate? E' questo, secondo voi, il motivo per cui i linguaggi "managed" vinceranno la sfida rispetto ai linguaggi tradizionali?
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#155 |
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1726
|
meglio un programma il 10% più veloce o un programma 10% più esente da errori?
a mio parere programmare in C++ porta più facilmente a commettere errori, rispetto a programmare in Java.
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
![]() |
![]() |
![]() |
#156 | |
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2516
|
Quote:
io sto dando una opinione da utente: tutti i programmi java che ho provato sono assolutamente lenti, molto piu degli equivalenti c e simili. poi potete dirmi che non ha senso confrontare vari programmi fatti da diversi programmatori, ma sinceramente mi sembra strano che prendo x programmi java e x programmi c e simili, e andando a confrontarli in ogni caso sono nettamente piu veloci quelli c... Non ho assolutamente nulla contro java, solo che mi vengono in mente una caterva di esempi di programmi lentissimi in questo linguaggio e che per uno o un'altro motivo devo anche usare spesso: eclipse, che da solo si prende 300 mb di ram e all'uni sui computer un pochino datati è piu che inutilizzabile, maple che sul mio computer con 1 gb di ram e core duo fatica a caricare le finestre ![]() programmi cosi affamati di risorse per quello che fanno in c++ sinceramente non mi vengono in mente... |
|
![]() |
![]() |
![]() |
#157 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Dove sbagli non lo so (o meglio forse si, ho aggiunto il distruttore della classe MyTest altrimenti hai un bel memory leak
![]() Se non esegui la delete su buffer il sistema va in crisi perchè allochi 10GB di RAM. Appena posso provo a fare lo stesso con Eclipse e ti dico il risultato. Ultima modifica di tomminno : 01-01-2008 alle 21:26. |
![]() |
![]() |
![]() |
#158 |
Senior Member
Iscritto dal: Sep 2000
Messaggi: 886
|
Sia pure orientato su .Net mi pare interessante questo articolo:
http://msdn2.microsoft.com/it-it/lib...52(en-us).aspx
__________________
1986/2008 - 22 anni di rabbia cancellati in un giorno. Adesso passeranno altri 22 anni.. ![]() |
![]() |
![]() |
![]() |
#159 | ||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Un qualunque compilatore tradice la tua funzione in: Codice:
void getTest (MyTest & tRet) { MyTest t; t.setA(5); t.setB(8); tRet = t; } Quote:
Altrimenti se vuoi modificare l'oggetto la funzione corretta è: Codice:
void doSome1 (MyTest & myTest) |
||
![]() |
![]() |
![]() |
#160 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Prestazioni di tutto rispetto, direi. 10 milioni di allocazioni in 3 secondi, praticamente 300 nanosecondi ad allocazione. Sei proprio sicuro? Mi sembra una prestazione davvero esagerata! Ne approfitto per augurarti Buon Anno, e per estendere l'augurio a tutti i frequentatori del forum.
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:13.