|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
|
|
|
|
|
|
|
#22 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Ad esempio in ruby puoi fare qualcosa del tipo Codice:
File.open("somefile.dat","w") {
# Use the file here
}
__________________
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 |
|
|
|
|
|
|
#23 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
L'ultima spiaggia è il GC. |
|
|
|
|
|
|
#24 | |
|
Member
Iscritto dal: Mar 2007
Messaggi: 298
|
Quote:
Certo dirai che una programmazione ideale dovrebbe prendere in considerazione questi errori, e concordo. Non è certo un diffetto del linguaggio, ma del programmatore. Ma questo è un mondo imperfetto: molti programmatori commettono questi errori, quindi eliminare la causa del problema migliora, in modo economico, la qualità del programma e diminuisce i cicli di correzione errori. Poi, per quanto riguarda la velocità delle interfacce UI in Java, hai ragione, ma non vedo il problema: Java infatti è usato bene soprattutto in ambito enterprise, dove non ha paragoni per la richezza delle librerie e di codice già pronto. Non ha molto uso nella creazione di applicazioni client (nemmeno gli applet hanno avuto grosso successo, figuriamoci un programma in AWT). Se devo fare un programma che gira su Windows, userei Visual C++, o qualcosa di simile (non andrei nemmeno su C# o VisualBasic). Ho avuto un'esperienza con un grosso programma enterprise (un sito web) interamente scritto in C++ e CORBA, ed è una esperienza che non vorrei ripetere: non solo era lento come o più di un programma in Java o persino PHP, già solo compilare e rilasciare l'applicazione era estremamente complicato, così come il debugging. Per non parlare di problemi di concorrenzialità, locking del db, etc. Di nuovo, ripeto: ogni linguaggio andrebbe usato nel ambito che più gli si addisce. |
|
|
|
|
|
|
#25 | |||
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Quote:
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 Ultima modifica di marco.r : 07-10-2008 alle 18:45. |
|||
|
|
|
|
|
#26 | |||||
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Quote:
Forse però ti sto fraintendendo, e tu intendi dire che la mancanza di praticità col concetto di liberare le risorse alla chiusura di un applicativo derivata dall'utilizzo dei linguaggi managed a causa dell'utilizzo del gc che questi fanno porta a "cattive abitudini" quando si programma in questi linguaggi. Su questo non so cosa risponderti, non ho una risposta precisa: ancora, credo che riguardi più il tipo di insegnamento che si è ricevuto nella programmazione "in generale" che nella programmazione con linguaggi "managed" in particolare. Quote:
Quote:
Anche qui, non saprei cosa dirti: potrebbe anche essere vero (anche se qualcosa mi suggerisce che forse a nessuno interessava più gestire autonomamente certi problemi, e si è preferito delegarli per astrarre ulteriormente, e nel contesto tecnologico attuale il trade-off risulta sbilanciato verso i linguaggi managed). Però questo non è un buon motivo per programmare in un linguaggio come C++ anzichè in Java (o C#, o Ruby, o Python, ...). Quote:
Quote:
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|||||
|
|
|
|
|
#27 | ||
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Quote:
Io credo che però la JVM abbia altri "assi" nella manica per abbassare le performance in altre operazioni, tipicamente i controlli sugli array et similia, e che non sia il gc la vera causa del degrado prestazionale (che peraltro, sempre IMVHO, va cercato col lanternino, al di fuori degli ambiti in cui è sempre stato usato il C/C++ finora e nessuno ha mai pensato di cambiarlo con qualcos'altro). Per tornare IT, penso che le probabilità di Johnn di incontrare questi ambiti sia molto bassa, e quindi gli suggerei di procedere con i linguaggi managed. Ecco. Quote:
Sì: ma sono scritti in C / C++ / Assembly e mi serviva un "esempio-di-codice-scritto-in-questi-linguaggi-che-riusi-senza-farti-troppi-problemi-per-motivi-di-performance-anche-se-non-sai-nulla-di-programmazione-unmanaged" (cioè, il mondo è pieno di codice unmanaged, e lo usiamo quando ci serve, senza bisogno di scrivere tutto in codice unmanaged).
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
||
|
|
|
|
|
#28 | ||||||
|
Senior Member
Iscritto dal: May 2004
Messaggi: 1136
|
Quote:
Quote:
Quote:
Quote:
Quote:
Il fatto è che sto valutando il porting di un software definito, quindi vorrei capire bene se le "inefficienze" di un linguagio unmanaged vengano bilanciate dai vantaggi. Il mio obiettivo sarebbe rendere l'implementazione java paragonabile a quella c++ (già esistente). Non potrei accettare un rapporto 1:8, ad esempio. Nel mio caso non avrò a che fare con db, risorse esterne e I/O. Solo ram e cpu. Comunque la discussione che sta venendo fuori mi piace anche se vengono coinvolti aspetti come interfacce grafiche, db, ecc. in modo da capire quali sono i limiti di un linguaggio rispetto ad un altro e fare delle scelte opportune in futuro. Su queste tematiche mi pare i sia molta confusione e molto "sentito dire". Per la discussione eclipse è lento/ no il mio è una scheggia, ho scoperto di recente che contanto anche le opzioni della jvm con cui viene lanciato. Quote:
|
||||||
|
|
|
|
|
#29 | |||||
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Ad esempio se devo scrivere su un file in C++ una volta che l'oggetto di tipo ofstream è uscito dallo scope ho la garanzia che il file è chiuso, se uso lo StreamWriter in C# devo assicurarmi di usare lo using o gestire complicatamente a mano le possibili eccezioni per garantire la corretta chiusura del file (e dire che lavoro in una azienda dove è scosigliato l'utilizzo dello using "perchè fa casini", ma io sostanzialmente me ne frego delle indicazioni senza senso che arrivano dall'alto). Non mi verrebbe mai in mente di mettere in C++ di mettere l'ofstream su heap. Stesso discorso per le connessioni al db. Quote:
Quote:
Per non parlare incredibilmente dell'accesso a file remoti, dove la lentezza della rete dovrebbe mitigare se non annullare le differenze. Quote:
Lo standard C++ evolve ogni 10 anni con revisioni ogni 5 anni come tutti gli standard, non ha nessuna azienda che lo "sponsorizza" è chiaro che è rimasto indietro come linguaggio rispetto a quello che possono permettersi linguaggi aggiornati ogni 2 anni. Cosa impedirebbe per dire di fare una libreria C++ che raccoglie il 95% delle caratteristiche del .NET? (rimane fuori la reflection) Sarebbe così tremendamente più produttivo .NET? Io dico di no per esperienza personale, ho avuto modo di partecipare a qualche grosso progetto in C++ dove c'era già tutto il codice necessario a smazzarsi le operazioni più noiose (che è quello che alla fine fa il framework .NET). Quote:
|
|||||
|
|
|
|
|
#30 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non bastano le librerie: anche il linguaggio fa la sua parte. E mi permetto di aggiungere: ovviamente.
Altrimenti non staremmo qui tutti a smazzarci C#, Java, Python, Ruby, ecc...
__________________
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 |
|
|
|
|
|
#31 | ||||
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quote:
Certo dirai che una programmazione ideale dovrebbe prendere in considerazione questi errori, e concordo. Non è certo un diffetto del linguaggio, ma del programmatore. Ma questo è un mondo imperfetto: molti programmatori commettono questi errori, quindi eliminare la causa del problema migliora, in modo economico, la qualità del programma e diminuisce i cicli di correzione errori. Quote:
Tutto il resto è solo Java. Quote:
|
||||
|
|
|
|
|
#32 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Il vantaggio enorme dei linguaggi managed è che generalmente i task di base sono già tutti fatti. Se devo connettermi via TCP ho già la classe pronta, non devo ripartire dai socket BSD, se devo inviare una email ho la classe apposita, non devo implementarmi il protocollo SMTP, se devo connettermi ad un db ho pure lì la classe wrappata in modo che sia semplice da usare, non devo scrivermi io un wrapper sopra l'ODBC. Prova però a dover fare da proxy tra un POP3 e SMTP e magicamente la produttività del linguaggio decade perchè non ci sono gli strumenti pre-creati. Prova a lavorare su un ORM in C# e la produttività decade rispetto a Java dove ci sono strumenti integrati che smazzano il lavoro sporco. Prova a creare un'applicazione enterprise in C# che gestisca lo scambio di messaggi e usi C++ o Java (e quindi scegli Java anche perchè offre prodotti open source). |
|
|
|
|
|
|
#33 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Fortunatamente i linguaggi "managed" hanno ottime librerie.
Anche per C++ esistono, sia chiaro, ma non sono standard. E quando Boost diventerà parte dello standard, rimarrà comunque un framework gigantesco da portarsi dietro... Comunque a parità di funzionalità di libreria, il linguaggio fa la differenza, eccome.
__________________
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 |
|
|
|
|
|
#34 | |||||
|
Member
Iscritto dal: Mar 2007
Messaggi: 298
|
Quote:
Quote:
Le deallocazioni "manuali" sono più efficienti (in media, non bisogna mai generalizzare) perché non devi controllare tutti gli oggetti allocati in un determinato momento per capire quali sono da riciclare e quali sono ancora in uso (questo è in pratica ciò che fa il GC). Dico in media perché in casi patologici di utilizzo di memoria al limite può verificarsi il contrario (un heap managed potrebbe anche avere un algoritmo di allocazione della memoria più efficiente di quello del SO sottostante, quindi tante chiamate a malloc() potrebbero far degenerare le performance). Quote:
Quote:
Un vantaggio di Java è che puoi fare un prototipo in poco tempo e fare qualche prova per vedere quanta differenza c'è. Implementa lo stesso algoritmo in entrambi i linguaggi e verifica i tempi di esecuzione su campioni di dati rappresentativi di ciò che dovrai andare ad implementare in seguito. Quote:
Il vantaggio di avere tante librerie è dovuto al fatto che, in media, chi ha implementato la libreria ha studiato il problema e trovato gli algoritmi più efficienti, in C++ spesso devi fare di testa tua o non hai tempo per analizzare le alternative. Molti dicono che un linguaggio è lento, ma non si sono minimamente disturbati ad usare un profiler per vedere dove stava il collo di bottiglia: 80 volte su 100, è negli algoritmi implementati da noi e non nel linguaggio vero e proprio. Detto questo, io non sono contrario a C++ ed anzi lo uso volentieri, ma principalmente per applicazioni desktop (trovo non solo Java, ma qualsiasi altro linguaggio managed, uno spreco di risorse in questo tipo di applicazioni). Qualche volta, quando voglio usare in una applicazione desktop delle comode librerie Java, chiamo le classi Java direttamente dall'applicazione C++ (una specie di JNI a rovescio, è perfettamente fattibile). Comunque, anche C++ ha delle librerie spettacolari (in media, la qualità del codice è molto superiore a quella delle librerie Java, che spesso non funzionano neanche o sono delle versioni alpha). Un paio di esempi: lo stesso Boost ed SQL Lite. Ma ce ne sono tantissime altre. Inefficiente non è (stai chiamando un metodo scritto in C/C++, quindi la velocità di esecuzione è quella del normale C/C++). Complicato forse un po', ma soprattutto sul lato C++, non tanto sul lato Java. Ma almeno a me è bastato vedere un paio di esempi per riuscire ad usarlo senza problemi di sorta. |
|||||
|
|
|
|
|
#35 | |||||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Comunque le deallocazioni "manuali" (o immediate) non sempre più efficienti. Spesso è meglio lasciar allocato lo spazio e liberarlo do un po', quando serve memoria, perché tendenzialmente diminiuisce la frammentazione della memoria (ed è poi più facile compattare i blocchi di memoria). Quote:
Quote:
Quote:
Poi è anche vero che tutti i server che ho sviluppato finora li ho scritti in Python... Quote:
SQLite è carino (e ci sono binding per praticamente qualunque linguaggio), ma è fortemente fuori specifiche SQL e implementa veramente pochi costrutti. Insomma, per uno che è abituato a trigger, procedure, ecc. è quanto di meno desiderabile. Ma nel suo piccolo ha anche la sua utilità.
__________________
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 |
|||||
|
|
|
|
|
#36 | |||
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Quote:
http://www.sqlite.org/whentouse.html Quote:
|
|||
|
|
|
|
|
#37 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non farà concorrenza a Oracle, ma implementa più di una semplice fopen, ecc.: http://www.sqlite.org/lang.html e http://www.sqlite.org/omitted.html
Sicuramente in futuro miglioreranno i trigger, e magari introdurranno le stored procedure: sono caratteristiche troppo utili per non inserirle. Comunque se devo utilizzare un db embedded preferisco questo, che è MOOOLTO più completo (e passare poi da embedded a client/server è una bazzecola).
__________________
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 |
|
|
|
|
|
#38 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
SQLite, se non si hanno troppe pretese(Multiutenza, triggers, etc), mi sembra la soluzione migliore. È più leggero e più facile da utilizzare. |
|
|
|
|
|
|
#39 | ||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Più leggero SQLite lo è sicuramente: FireBird occupa 10 volte di più come spazio. Ma oggi chi se ne frega di passare da 400K a 4MB di memoria occupata?
__________________
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 |
||
|
|
|
|
|
#40 |
|
Senior Member
Iscritto dal: May 2004
Messaggi: 1136
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:52.




















