Pagina 2 di 10 primaprima 1 2 3 4 ... ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 92
  1. #11
    mmmmm utentesse?!
    Il mio numero è tre tre tre tre tre tre tre tre tre...

    Ok, sto degenerando.
    sapientino regna sovrano

  2. #12
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Non capisco il senso del garbage collector.Ogni volta scandisce tutta la memoria per vedere quali sono gli oggetti inutilizzati, oppure tiene conto di quali sono gli oggetti denotabili controllando gli assegnamenti? In entrambe i casi non capisco perché non permettere di deallocare la memoria, si perde tantissimo in efficienza.
    In più non si possono usare i puntatori, insomma è un linguaggio semplice ma è semplice perché ha la sintassi povera.Quindi è poco potente e punta sul framework.
    Non capisco come possa java avere un futuro roseo, semmai direi C++.

  3. #13
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Originariamente inviato da ramy89
    Non capisco il senso del garbage collector.Ogni volta scandisce tutta la memoria per vedere quali sono gli oggetti inutilizzati, oppure tiene conto di quali sono gli oggetti denotabili controllando gli assegnamenti? In entrambe i casi non capisco perché non permettere di deallocare la memoria, si perde tantissimo in efficienza.
    In più non si possono usare i puntatori, insomma è un linguaggio semplice ma è semplice perché ha la sintassi povera.Quindi è poco potente e punta sul framework.
    Non capisco come possa java avere un futuro roseo, semmai direi C++.
    si è creato negli anni cosi tanto codice "demmerda", poco sicuro, pieno di memory leak, difficile da manuntenere che il prezzo da pagare per avere un livello di astrazione in piu è ben poca cosa rispetto ai vantaggi che questo offre. Inoltre in ambiente multithread l'efficienza del singolo processo ha poca importanza rispetto alla sicurezza che tutti i processi "viaggino insieme senza intoppi".

  4. #14
    Il GC non è inefficiente come può sembrare, e rimuove un bel po' di complessità dalle spalle del programmatore: in C++ o wrappi ogni allocazione dinamica in una classe RAII/uno smart pointer oppure alla prima eccezione inizi ad avere memory leaks. (d'altra parte non bisogna dimenticare che è una soluzione solo per l'allocazione della memoria, altre risorse - file, connessioni a DB, ... - vanno comunque rilasciate manualmente se si vuole una distruzione deterministica e immediata)
    Il problema di Java piuttosto è che secondo me è un linguaggio "ottuso", che forza in ogni situazione un paradigma di OOP rigida abbastanza "instupidito"; diciamo che è un linguaggio che limita i danni fatti da programmatori incompetenti, ma che risulta estremamente noioso da usare se si è abituati a lavorare con linguaggi più flessibili.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #15
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da MItaly
    Il GC non è inefficiente come può sembrare, e rimuove un bel po' di complessità dalle spalle del programmatore: in C++ o wrappi ogni allocazione dinamica in una classe RAII/uno smart pointer oppure alla prima eccezione inizi ad avere memory leaks. (d'altra parte non bisogna dimenticare che è una soluzione solo per l'allocazione della memoria, altre risorse - file, connessioni a DB, ... - vanno comunque rilasciate manualmente se si vuole una distruzione deterministica e immediata)
    La soluzione (almeno da parte mia) è sempre la classe RAII, ma non capisco dov'è il problema.Se uno vuole può sempre usare l' allocazione statica al posto di quella dinamica, per essere sicuro che un oggetto o un array di oggetti vengano distrutti fuori la scope di una funzione.C'è comunque libertà di scelta, se uno vuole fare le cose semplici le può fare.

    Il problema di Java piuttosto è che secondo me è un linguaggio "ottuso", che forza in ogni situazione un paradigma di OOP rigida abbastanza "instupidito"; diciamo che è un linguaggio che limita i danni fatti da programmatori incompetenti, ma che risulta estremamente noioso da usare se si è abituati a lavorare con linguaggi più flessibili.
    Su questo concordo, è come se a un muratore gli dai meno strumenti per costruire una casa, e poi ti vanti dicendo che gli hai dato un lavoro semplice da fare.Invece è difficile perché può usare meno strumenti, niente (metaforicamente parlando) overloading degli operatori, ne puntatori, passaggio di parametri per riferimento ... il metodo swap tocca farlo con un ArrayList
    Se il C++ avesse il framework che ha Java

  6. #16
    Originariamente inviato da ramy89
    La soluzione (almeno da parte mia) è sempre la classe RAII, ma non capisco dov'è il problema.Se uno vuole può sempre usare l' allocazione statica al posto di quella dinamica, per essere sicuro che un oggetto o un array di oggetti vengano distrutti fuori la scope di una funzione.C'è comunque libertà di scelta, se uno vuole fare le cose semplici le può fare.
    Non è sempre tutto così semplice... se inizi ad avere oggetti ad ownership condivisa la questione diventa più complicata - o usi uno shared_ptr (disponibile solo nell'ultima revisione dello standard o in boost) o ti devi arrabattare in maniere poco simpatiche.
    O anche, se devi restituire un puntatore a qualcosa trasferendo l'ownership al chiamante, o usi un auto_ptr (attualmente deprecato) o uno unique_ptr, che però c'è solo in C++11 con la move semantic; e in tutto questo la sintassi si appesantisce non poco.
    La GC è una soluzione "turn key" a tutto questo genere di problemi (anche se ne pone degli altri, ovvero la distruzione non deterministica degli oggetti, che in certi casi può essere un problema che va risolto manualmente).
    Se il C++ avesse il framework che ha Java
    Tip: prova le Qt.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #17
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Originariamente inviato da MItaly
    (anche se ne pone degli altri, ovvero la distruzione non deterministica degli oggetti, che in certi casi può essere un problema che va risolto manualmente).
    scusa Mitaly ma secondo me quello non è un problema. La deallocazione deterministica nei linguaggi managed esiste ed è facile perche la si wrappa dentro un metodo (close, dispose in base al framework), perchè grazie alla natura OOP del linguaggio gli eredi non devono far altro che fare l'overloading di questo metodo, esistono dei pattern ben collaudati per implementare questo metodo (pattern disposable). Semmai il problema è di chi non usa accortezza.

    Inoltre sfido qualsiasi programmatore in ambiente multitasking ad essere piu efficiente della GC. Il fatto di non deallocare "subito" è un VANTAGGIO in termini di prestazioni perchè si pospone un operazione in momenti di "crisi" della memoria.

    @Ramy nei linguaggi managed c'è eccome il passaggio parametri per riferimento solo che non te ne accorgi perchè (grazie all'eliminazione del concetto di puntatore) è tutto sintatticamente zuccherato ma soprattutto TYPE SAFE. Al di la dell'efficienza (dovuta principalmente al fatto di essere ospitati su una JVM/CLR) con un linguaggio managed puoi fare TUTTO cio chi si vorrebbe fare in un SO multitasking.

  8. #18
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da MItaly
    Non è sempre tutto così semplice... se inizi ad avere oggetti ad ownership condivisa la questione diventa più complicata - o usi uno shared_ptr (disponibile solo nell'ultima revisione dello standard o in boost) o ti devi arrabattare in maniere poco simpatiche.
    O anche, se devi restituire un puntatore a qualcosa trasferendo l'ownership al chiamante, o usi un auto_ptr (attualmente deprecato) o uno unique_ptr, che però c'è solo in C++11 con la move semantic; e in tutto questo la sintassi si appesantisce non poco.
    La GC è una soluzione "turn key" a tutto questo genere di problemi (anche se ne pone degli altri, ovvero la distruzione non deterministica degli oggetti, che in certi casi può essere un problema che va risolto manualmente).
    Se un oggetto è di proprietà condivisa uso semplicemente una variabile per tenere traccia di quante volte è stata acquisita e rilasciata.Basta uno static int.
    Ma forse ti riferisci a casi più complessi, puoi fare un esempio se non siamo troppo OT ?

    Tip: prova le Qt.
    Le ho provate e sono rimasto proprio così: con la bava alla bocca, ma non ho tempo per studiarle bene

  9. #19
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da rsdpzed
    @Ramy nei linguaggi managed c'è eccome il passaggio parametri per riferimento solo che non te ne accorgi perchè (grazie all'eliminazione del concetto di puntatore) è tutto sintatticamente zuccherato ma soprattutto TYPE SAFE. Al di la dell'efficienza (dovuta principalmente al fatto di essere ospitati su una JVM/CLR) con un linguaggio managed puoi fare TUTTO cio chi si vorrebbe fare in un SO multitasking.
    Linguaggi come C# sono una bellezza da usare, ma io stavo parlando di Java.In Java non si può passare una variabile per riferimento.

  10. #20
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Originariamente inviato da ramy89
    Linguaggi come C# sono una bellezza da usare, ma io stavo parlando di Java.In Java non si può passare una variabile per riferimento.
    tendo sempre a paragonare java a c# quando si tratta di compararli con linguaggi unmanaged chiedo venia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.