PDA

View Full Version : Il c++ sta morendo?


javaboy
08-01-2008, 19:14
Mi sembra che il c++ venga sempre meno usato e sia ora relegato ad una vera e propria nicchia. Java e C# stanno rubando la scena a questo linguaggio, secondo voi quale futuro lo attende?Che mi sapete dire del linguaggio D?

Unrue
08-01-2008, 21:01
Mi sembra che il c++ venga sempre meno usato e sia ora relegato ad una vera e propria nicchia.

E questa dove l'hai sentita ?:mbe:
Probabilmente in futuro sarà così, o meglio, il futuro è dei linguaggi interpretati. Ma direi che siamo piuttosto lontani dalla morte del C++ considerando le migliaia di applicazioni attuali ed in fase di sviluppo scritte con questo linguaggio ... Oddio.. forse da uno che si chiama Javaboy, questa affermazione era prevedibile ..:D

a2000.1
08-01-2008, 21:08
"The speed of processors doubles every 18 months" -- Moore's law
"The speed of software halves every 18 months" -- Gates' law

http://programmazione.it/index.php?entity=eitem&idItem=33234

71104
08-01-2008, 21:34
"The speed of processors doubles every 18 months" -- Moore's law
"The speed of software halves every 18 months" -- Gates' law :tapiro:

http://programmazione.it/index.php?entity=eitem&idItem=33234 "questa si che è una bella montagna di merda :asd:" [cit. Jurassic Park]

per dire che non avevo mai letto un simile mucchio di stronzate :rotfl:

a2000.1
08-01-2008, 23:46
stronzate nel senso che scrivete i vostri codici (si fa per dire, script più esattamente ... ) col c.ulo :D

^TiGeRShArK^
09-01-2008, 01:28
stronzate nel senso che scrivete i vostri codici (si fa per dire, script più esattamente ... ) col c.ulo :D
...ma anche no.
Sarò un inguaribile romantico, ma finchè il codice non è oggettivamente bello (quindi semplice ed efficace) non lo rilascio.
Le stronzate le ho lette lì, dato che, se ricordi bene, mi pare che il lotus symphony (se non erro si chiamava così la suite) era lievemente diversa dalle suite office attuali.
Se poi sei tu quello che scrive script beh.. niente da dire..
io stesso in ruby il programma (anzi.. lo script) + lungo che ho scritto è stato di 76 righe di codice.
Ma, evidentemente, quello scriptino soddisfaceva appieno quello che mi serviva ;)
poi sentire dire:

dobbiamo renderci conto che garbage collection, macchine virtuali e automatismi vari, non fanno che accrescere i tempi di accesso in memoria, così come i cicli di CPU, di pari passo con l'aumentare della capacità di calcolo.

Magari fosse quello il problema :asd:
Sta addebitando interamente il decadere delle prestazioni praticamente alle virtual machines :rotfl:
mai sentita barzelletta migliore :rotfl:
Peccato che *forse* quel genio è rimasto ai tempi in cui le virtual machine erano effettivamente interpretate ed erano 10 volte + lente del codice nativo.
Oggi che tali differenze prestazionali si assestano mediamente (e ne abbiamo già discusso ampiamente nel corrispettivo thread) al 90% del codice nativo non mi pare proprio che la fonte di tutti i mali sia il "virtual machinismo".
Per concludere, da uno che fa tanto il meravigliato scoprendo che mov ax, 1 è molto + lento di xor ax, ax, che cosa ci si potrebbe attendere? :rolleyes:

cionci
09-01-2008, 02:19
Oggi che tali differenze prestazionali si assestano mediamente (e ne abbiamo già discusso ampiamente nel corrispettivo thread) al 90% del codice nativo non mi pare proprio che la fonte di tutti i mali sia il "virtual machinismo".
Anche questa affermazione è difficilmente dimostrabile come abbiamo visto nell'altro thread.

In ogni caso tornando in topic C++ non sta morendo, stanno solo cambiando i suoi campi applicativi. C++ come C non morirà mai.

cdimauro
09-01-2008, 07:36
Mi sembra che il c++ venga sempre meno usato e sia ora relegato ad una vera e propria nicchia. Java e C# stanno rubando la scena a questo linguaggio, secondo voi quale futuro lo attende?Che mi sapete dire del linguaggio D?
Il D è interessante, ma poco diffuso.

Personalmente concordo con Unrue che ha detto che in futuro ci sarà sempre più spazio per i linguaggi "interpretati" (lo metto tra virgolette perché ormai quasi tutti compilano in bytecode, e altri anche in codice nativo).
"The speed of processors doubles every 18 months" -- Moore's law
"The speed of software halves every 18 months" -- Gates' law

http://programmazione.it/index.php?entity=eitem&idItem=33234
Grazie per avermi fatto cominciare bene la giornata... :p

amedeoviscido
09-01-2008, 13:27
Probabilmente in futuro sarà così, o meglio, il futuro è dei linguaggi interpretati

ODDIO

Comunque c'è da fare una precisazione... voi parlate del sistema operativo Windows. I computer non sono i PC. I PC sono una grossa fetta, certo, ma ci sono delle alternative, linux in primis, che puntano ad altri obiettivi. E poi non dimentichiamoci che il linguaggio da usare è funzione del problema: un sisop fatto in C# non lo vedo possibile :D

cdimauro
09-01-2008, 13:50
Nessuno sta dicendo di buttare il C++ (il C, invece, non ha motivo di esistere visto che ci sono validissime alternative / estensioni): semplicemente che per il futuro i linguaggi "interpretati" saranno quelli usati per la maggiore.

Poi ci saranno sempre ambiti applicativi per cui C++ e/o assembly continueranno a essere preferiti. ;)

variabilepippo
09-01-2008, 13:58
Io trovo interessanti le tesi esposte in questa discussione (http://forum.ioprogrammo.it/thread.php?threadid=13766&boardid=31&styleid=1), se nel mainstream spopolano (a ragione) Java/.NET&Co è altrettanto vero che il mainstream rappresenta solo una fetta dell'intera torta. :sofico:

fek
09-01-2008, 14:51
dobbiamo renderci conto che garbage collection, macchine virtuali e automatismi vari, non fanno che accrescere i tempi di accesso in memoria, così come i cicli di CPU, di pari passo con l'aumentare della capacità di calcolo.

Uh?!

vizzz
09-01-2008, 15:21
Nessuno sta dicendo di buttare il C++ (il C, invece, non ha motivo di esistere visto che ci sono validissime alternative / estensioni): semplicemente che per il futuro i linguaggi "interpretati" saranno quelli usati per la maggiore.

Poi ci saranno sempre ambiti applicativi per cui C++ e/o assembly continueranno a essere preferiti. ;)

C è indispensabile per la programmazione di alcuni microcontrollori, che alternativa ci sarebbe?

71104
09-01-2008, 15:39
Uh?! ora mi faccio due risate :asd: :asd: :asd: :asd:

a2000.1
09-01-2008, 19:05
...ma anche no.
Sarò un inguaribile romantico, ma finchè il codice non è oggettivamente bello (quindi semplice ed efficace) non lo rilascio.



bravo non rilasciare:

http://www.bruvva.com/images/vigorsolFrontPage.jpg

okay
09-01-2008, 19:17
prott...!

AnonimoVeneziano
09-01-2008, 19:36
prott...!

BIIIIP

cdimauro
09-01-2008, 20:02
C è indispensabile per la programmazione di alcuni microcontrollori, che alternativa ci sarebbe?
Il C++, che è un superset del C, quindi puoi fare ESATTAMENTE le stesse cose che fai in C, ma hai a disposizione tanti altri strumenti che sono utili per:
- velocizzare la scrittura del codice;
- strutturare meglio il codice;
- facilitarne la manutenibilità.

Oggi non c'è alcun motivo per continuare a usare il C, che è un linguaggio della preistoria informatica.

Certo, se proprio non c'è un compilatore C++ per il microcontrollore che devi programmare c'è poco da fare: ti accontenti di quello che hai...

71104
09-01-2008, 20:42
bravo non rilasciare: [...]

prott...!

BIIIIP

che interminabile sequenza di sonora coglionaggine... uno più scemo dell'altro :asd:
scusatemi eh, in questi casi ci si giustifica dicendo "prendetelo con ironia" :asd:

a2000.1
09-01-2008, 20:46
e prenderlo direttamente in c. invece ? :D

tomminno
09-01-2008, 20:52
Il C++, che è un superset del C, quindi puoi fare ESATTAMENTE le stesse cose che fai in C, ma hai a disposizione tanti altri strumenti che sono utili per:
- velocizzare la scrittura del codice;
- strutturare meglio il codice;
- facilitarne la manutenibilità.

Oggi non c'è alcun motivo per continuare a usare il C, che è un linguaggio della preistoria informatica.

Certo, se proprio non c'è un compilatore C++ per il microcontrollore che devi programmare c'è poco da fare: ti accontenti di quello che hai...

Generalmente almeno per micro e DSP il compilatore è sempre C/C++ però nessuno nell'ambiente osa usare il C++.

Ci sono tanti ambienti dove anche il "costo" di una chiamata a funzione è troppo elevato per cui non si muovono dall'assembly.

Dove lavoravo, per lo sviluppo firmware si affidavano ad una azienda esterna dove lavorano mostri della programmazione (un titolare è finito al MIT allo sviluppo dell'OLPC) beh non ritenevano opportuno il passaggio al C++ in quanto "troppo peso" per un micro come l'ARM7.
Evidentemente c'è del vero visto che una sprintf è già troppo pesa per questi sistemi, figuriamoci il resto.

cdimauro
09-01-2008, 20:57
Ogni caratteristica del C++ ha un "peso" ben preciso: basta conoscere bene il linguaggio e il codice generato del compilatore.

La conoscenza del linguaggio è a dir poco ovvia (anche se, purtroppo, non è affatto scontata: vedi le sparate di un certo Torvalds sul C++).

Quella del codice generato è necessaria per chi lavora così a basso livello.

Alla fine è sempre un discorso di conoscenza ed esperienza.

P.S. Per inciso: C++ != oggetti.

71104
09-01-2008, 21:00
e prenderlo direttamente in c. invece ? :D se vuoi :rolleyes: le chiappe son le tue

71104
09-01-2008, 21:04
Oggi non c'è alcun motivo per continuare a usare il C, che è un linguaggio della preistoria informatica. ce n'è invece, per esempio in situazioni in cui l'operatore new non è stato / non può essere implementato, e quindi non puoi gestire oggetti nel modo classico. per esempio quando si programma un driver WDM è possibile allocare memoria in più modi diversi (pool paginato e non, con il tag e senza tag), e un semplice "new" da solo non è abbastanza eloquente.

in questi casi il tuo discorso (il C++ fa almeno quanto il C) rimane valido, ma praticamente si riduce ad utilizzare le sole features del C.

cdimauro
09-01-2008, 21:38
Innazitutto ti ricordo che in C++ puoi configurarti gli handler per l'allocazione della memoria come desideri.

Poi gli oggetti si possono creare anche staticamente.

Infine avevo scritto che C++ != oggetti: il linguaggio offre diverse caratteristiche che non sono legate espressamente agli oggetti.

In soldoni: se il C++ è un superset del C, non lo è soltanto perché offre la possibilità di programmare a oggetti. ;)

k0nt3
09-01-2008, 21:46
beh si.. d'altra parte non capisco perchè qualcuno usa ancora l'automobile considerando il fatto che hanno inventato l'aereo :p

cdimauro
09-01-2008, 21:57
Esempio che non c'entra NULLA e volutamente capzioso.

Ritenta la prossima volta: magari sarai più fortunato... :mc:

k0nt3
09-01-2008, 22:03
Esempio che non c'entra NULLA e volutamente capzioso.

Ritenta la prossima volta: magari sarai più fortunato... :mc:

in realtà c'entra più di quello che credi visto che non era una risposta a un tuo commento.. se poi si può applicare anche al tuo commento è un caso :P

@javaboy
il D farà ben poca strada finchè non fanno una documentazione degna di questo nome.

cdimauro
09-01-2008, 22:09
in realtà c'entra più di quello che credi visto che non era una risposta a un tuo commento..
Non era chiaro, visto che i precedenti messaggi li ho scritti io.
se poi si può applicare anche al tuo commento è un caso :P
Questo puoi dirmelo soltanto tu.

k0nt3
09-01-2008, 22:33
Non era chiaro, visto che i precedenti messaggi li ho scritti io.

Questo puoi dirmelo soltanto tu.

è che non avevo nemmeno letto tutti i commenti :D
comunque lo sai che considero il C un linguaggio ancora utile per cui non è il caso di discuterne di nuovo :fagiano: tanto non si va da nessuna parte

AnonimoVeneziano
09-01-2008, 22:49
Ma quali sono le funzionalità del C++ utili per programmare microcontrollori che il C non ha ?

Quali potrebbero essere i vantaggi dal passare al C++?

Non ci capisco molto di programmazione di microcontrollori :)

Grazie

vizzz
09-01-2008, 22:59
Certo, se proprio non c'è un compilatore C++ per il microcontrollore che devi programmare c'è poco da fare: ti accontenti di quello che hai...

è esattamente il caso a cui volevo arrivare :D
anche se comunque in questi casi il C è più che sufficente allo scopo anche perchè certe comodità del C++ non si potrebbe avere il lusso di usarle, quando hai 4K di ram si sta molto bene attenti a come si usano.

a2000.1
10-01-2008, 00:06
ai Bamboccioni viziati della glue-programming alla copia&incolla, 10 milioni di righe di assembler forzato a testa:

Assembler Macht Frei

:mad: :D :sborone:

cionci
10-01-2008, 02:10
P.S. Per inciso: C++ != oggetti.
Purtroppo...ed è forse uno dei motivi principali per cui la gente programma con i piedi con C++.

Io la vedo in modo complementare al tuo: va bene utilizzare C per la programmazione a basso livello, va bene per utilizzarlo sui microcontrollori (non è vero che C++ è sempre chiaro sull'utilizzo implicito e non di puntatori per chi non conosce A FONDO il linguaggio, al contrario l'uso della memoria in C è sempre esplicito), ma se si programma in C++ ci si programmi bene e sfruttando a pieno gli strumenti che il linguaggio mette a disposizione.

IMHO C++ in qualche prossimo standard dovrebbe abbandonare la compatibilità con C e diventare finalmente adulto...

cdimauro
10-01-2008, 07:57
Ma quali sono le funzionalità del C++ utili per programmare microcontrollori che il C non ha ?

Quali potrebbero essere i vantaggi dal passare al C++?

Non ci capisco molto di programmazione di microcontrollori :)

Grazie
Il passaggio di parametri per riferimento, ad esempio.
Purtroppo...ed è forse uno dei motivi principali per cui la gente programma con i piedi con C++.

Io la vedo in modo complementare al tuo: va bene utilizzare C per la programmazione a basso livello, va bene per utilizzarlo sui microcontrollori (non è vero che C++ è sempre chiaro sull'utilizzo implicito e non di puntatori per chi non conosce A FONDO il linguaggio, al contrario l'uso della memoria in C è sempre esplicito), ma se si programma in C++ ci si programmi bene e sfruttando a pieno gli strumenti che il linguaggio mette a disposizione.

IMHO C++ in qualche prossimo standard dovrebbe abbandonare la compatibilità con C e diventare finalmente adulto...
Conoscere a fondo il linguaggio è il minimo richiesto per un professionista.

Per l'ultima affermazione, onestamente non mi piace proprio il C++ come linguaggio, e da quel che m'ha fatto vedere Jappilas sul prossimo standard per quanto mi riguarda la situazione è peggiorata. :|

cionci
10-01-2008, 08:53
Conoscere a fondo il linguaggio è il minimo richiesto per un professionista.
Il fatto, imho, è che in C++, come in altri linguaggio ad alto livello, molti comportamenti sono impliciti e/o determinabili solo a runtime (vedi la STL), quindi non va assolutamente bene per programmare a bassissimo livello. Anche se il linguaggio lo conosci estremamente bene, l'utilizzo della memoria non è così facile da predeterminare, esattamente all'opposto del C ;)

A meno che tu non voglia continuare ad usare il C++ a la C, ma a me questa cosa ha sempre fatto schifo :D Tanto vale usare il C ;)

cdimauro
10-01-2008, 09:04
Indubbiamente, il tutto va valutato "cum grano salis".

Anche Fran nell'altro thread ha spiegato in che modo risolve alcuni problemi di questo tipo che si presentano nella realizzazione di un gioco.

Certamente non si diventa lead programmer, o in generale programmatori esperti con un linguaggio come il C++ dal giorno alla notte. ;)

P.S. Per inciso: io NON lo sono. :p

cionci
10-01-2008, 09:10
Io ho visto cente che programma i microcontrollori...ho visto fare degli #include nel mezzo al codice al posto di chiamare funzioni :eek: Tanto per farti capire quanto cercano di risparmiare anche il passaggio di parametri nelle chiamate a funzione :D
Tanto il programma gira molto spesso da ROM o da Flash mappate in RAM, mentre la ram vera è minima ;)

cdimauro
10-01-2008, 09:16
Posso immaginare.

In passato ho sviluppato giochi per Amiga, e stavo a spaccare il ciclo di clock, inventandomi qualunque cosa pur risparmiare tempo d'esecuzione e/o memoria.

Per conto dell'STM ho sviluppato un decoder JPEG 2000, da implementare in hardware, e anche lì i requisiti erano molto stringenti (non potevo nemmeno usare i puntatori a funzione, tanto per dirne una; purtroppo si usava soltanto un subset dell'ANSI C standard).

Non è facile sviluppare sui microcontrollori, e onestamente m'è passata la voglia da un bel pezzo di andare a smanettare così a basso livello.

fek
10-01-2008, 09:56
beh si.. d'altra parte non capisco perchè qualcuno usa ancora l'automobile considerando il fatto che hanno inventato l'aereo :p

Perche' in aereo non puoi andare in autostrada da Milano a Torino, mentre in C++ puoi fare esattamente tutto quello che fai in C con la stessa efficienza e molte altre cose con efficienza maggiore.

Mi fai un esempio di un costrutto in C standard che, a meno di errori di sintassi, non e' compilato da un compilatore C++ standard con la medesima efficienza?

C++ non vuol dire programmare a oggetti.

fek
10-01-2008, 09:57
Ma quali sono le funzionalità del C++ utili per programmare microcontrollori che il C non ha ?

Quali potrebbero essere i vantaggi dal passare al C++?

Non ci capisco molto di programmazione di microcontrollori :)

Grazie

C++ e' un linguaggio fortemente tipizzato al contrario del C. Il vantaggio nell'usare un compilatore C++ anche nella programmazione di microcontrollori e' il commettere meno errori a parita' di efficienza del codice prodotto.

Non c'e' alcun motivo per usare un compilatore C al posto di un compilatore C++.

fek
10-01-2008, 10:00
A meno che tu non voglia continuare ad usare il C++ a la C, ma a me questa cosa ha sempre fatto schifo :D Tanto vale usare il C ;)

Ma e' proprio questo il punto che in molti non colgono: se devi usare il C++ a la C per programmazione di sistema (ambito per il quale il C++ e' stato specificatamente progettato) tanto vale usare il C++ :)
C++ non vuol dire programmare ad oggetti, vuol dire poter programmare anche ad oggetti, ma ci sono ambiti dove questo NON e' indicato. Ho lavorato su un gioco per PS2 dove la new era bandita, un milione e passa di righe di codice C++ senza una sola allocazione dinamica o senza un solo metodo virtuale.

fek
10-01-2008, 10:07
IMHO C++ in qualche prossimo standard dovrebbe abbandonare la compatibilità con C e diventare finalmente adulto...

Odio i multiquote :)
Stroustrup non sarebbe d'accordo con te. Il C++ e' stato progettato specificatamente per supportare la programmazione di sistema e per essere compatibile con il C. Se togli questa compatibilita' e lo limiti ad un linguaggio ad oggetti ottieni... Java o C#. Non e' piu' C++, diventa un'altra cosa. E secondo me non lo deve diventare perche' e' uno strumento che va a coprire esattamente quelle esigenze per le quali e' stato progettato. Se vuoi un linguaggio ad oggetti rigoroso, usi Java o C#, se vuoi un linguaggio dove hai il totale controllo della memoria, puo' essere usato efficientemente per la programmazione di sistema e supporta nativamente il paradigma ad oggetti quando necessario, allora scegli il C++.

E' solo una questione di scegliere lo strumento giusto per risolvere un problema.

cionci
10-01-2008, 10:11
Odio i multiquote :)
Stroustrup non sarebbe d'accordo con te. Il C++ e' stato progettato specificatamente per supportare la programmazione di sistema e per essere compatibile con il C.
Ma così continueremo a vedere degli obbrobri di programmi in C++ dove i programmatori credono di scrivere un programma C++, ma in realtà scrivono una via di mezzo :cry: Mi fanno una rabbia :stordita:

fek
10-01-2008, 10:26
Ma così continueremo a vedere degli obbrobri di programmi in C++ dove i programmatori credono di scrivere un programma C++, ma in realtà scrivono una via di mezzo :cry: Mi fanno una rabbia :stordita:

C'e' chi usa il martello per ammazzarci la gente, ma la colpa non e' del martello, ma dell'uso che se ne fa ;)

cionci
10-01-2008, 11:06
C'e' chi usa il martello per ammazzarci la gente, ma la colpa non e' del martello, ma dell'uso che se ne fa ;)
Ok, ma se il martello ha una punta dall'altro lato con scritto colpisci da questa parte per uccidere ?:D

cdimauro
10-01-2008, 11:18
Sarà il martello di Stallman: http://blogs.ugidotnet.org/Franny/archive/2007/10/25/89197.aspx :asd:

fek
10-01-2008, 12:05
Ok, ma se il martello ha una punta dall'altro lato con scritto colpisci da questa parte per uccidere ?:D

Non passerebbe la revisione del comitato di standardizzazione dei martelli :D

k0nt3
10-01-2008, 13:34
Perche' in aereo non puoi andare in autostrada da Milano a Torino, mentre in C++ puoi fare esattamente tutto quello che fai in C con la stessa efficienza e molte altre cose con efficienza maggiore.

Mi fai un esempio di un costrutto in C standard che, a meno di errori di sintassi, non e' compilato da un compilatore C++ standard con la medesima efficienza?

C++ non vuol dire programmare a oggetti.
beh ma il mio commento era più riferito al fatto che java/C# dovrebbero soppiantare C/C++. l'ho detto che non era riferito al post di cdimauro

comunque sia dico la mia.
Conoscere a fondo il linguaggio è il minimo richiesto per un professionista.
è incommensurabilmente più facile conoscere a fondo il C piuttosto che il C++, quindi è altrettanto più facile vedere qualcuno che programma male in C++ piuttosto che in C. ma non direi che è tutta colpa sua.. gli esseri umani hanno una capacità limitata nel gestire cose complesse.

fek
10-01-2008, 13:40
beh ma il mio commento era più riferito al fatto che java/C# dovrebbero soppiantare C/C++. l'ho detto che non era riferito al post di cdimauro

Lo strumento giusto per ogni problema: Java/C# non possono essere usati per programmare un microcontrollore o scrivere un bootloader. Quindi non ha senso che soppiantino C/C++. Ma ha molto senso che molto di cio' che ieri era scritto in C++ oggi sia scritto in Java/C#.
Di nuovo i giochi come esempio: ieri erano scritti esclusivamente in C++, oggi praticamente tutti i giochi sono scritti in un linguaggio ad alto livello (LUA/Python/Ruby) e sempre meno sistemi sono scritti in C++.

k0nt3
10-01-2008, 13:44
Lo strumento giusto per ogni problema: Java/C# non possono essere usati per programmare un microcontrollore o scrivere un bootloader. Quindi non ha senso che soppiantino C/C++. Ma ha molto senso che molto di cio' che ieri era scritto in C++ oggi sia scritto in Java/C#.
Di nuovo i giochi come esempio: ieri erano scritti esclusivamente in C++, oggi praticamente tutti i giochi sono scritti in un linguaggio ad alto livello (LUA/Python/Ruby) e sempre meno sistemi sono scritti in C++.

vedi che ora l'esempio dell'auto e dell'aereo calza molto di più ;)

fek
10-01-2008, 13:45
vedi che ora l'esempio dell'auto e dell'aereo calza molto di più ;)

Calza al contrario ;)
Nel senso che e' molto meglio usare un linguaggio meno ricco come Java dove il controllo del C++ non e' necessario.

cdimauro
10-01-2008, 13:46
beh ma il mio commento era più riferito al fatto che java/C# dovrebbero soppiantare C/C++. l'ho detto che non era riferito al post di cdimauro
Sì, hai precisato. Comunque: http://www.hwupgrade.it/forum/showpost.php?p=20476217&postcount=10
comunque sia dico la mia.
Certamente.
è incommensurabilmente più facile conoscere a fondo il C piuttosto che il C++, quindi è altrettanto più facile vedere qualcuno che programma male in C++ piuttosto che in C. ma non direi che è tutta colpa sua.. gli esseri umani hanno una capacità limitata nel gestire cose complesse.
Indubbiamente. E' probabile che Torvalds chiuderà gli occhi senza aver mai imparato a programmare in C++... :asd:

fek
10-01-2008, 13:47
Indubbiamente. E' probabile che Torvalds chiuderà gli occhi senza aver mai imparato a programmare in C++... :asd:

Speriamo non lo impari mai ;)

k0nt3
10-01-2008, 13:53
Calza al contrario ;)
Nel senso che e' molto meglio usare un linguaggio meno ricco come Java dove il controllo del C++ non e' necessario.

questo per andare da roma a parigi... ma per andare da via padova a piazza udine non mi sembra il caso.
siamo daccordo che java/C# non sostituiscono C/C++ ma si sono ritagliati il loro spazio (talvolta invadendo quello del C++)

fek
10-01-2008, 13:55
questo per andare da roma a parigi... ma per andare da via padova a piazza udine non mi sembra il caso.
siamo daccordo che java/C# non sostituiscono C/C++ ma si sono ritagliati il loro spazio (talvolta invadendo quello del C++)

Non mi sono spiegato, per andare da padova a piazza udine usi Java perche' e' uno strumento piu' immediato e la ricchezza del C++ non serve.

k0nt3
10-01-2008, 14:02
Indubbiamente. E' probabile che Torvalds chiuderà gli occhi senza aver mai imparato a programmare in C++... :asd:
non siamo nessuno per giudicare.. magari lo conosce meglio di te. indipendentemente da questo la mia personale opinione è che non è per niente necessario imparare C++, anzi è meglio non impararlo.

Non mi sono spiegato, per andare da padova a piazza udine usi Java perche' e' uno strumento piu' immediato e la ricchezza del C++ non serve.
mi sa che hai travisato il mio discorso.. l'aereo non può andare da via padova a piazza udine, e costruire due aereoporti per fare quel tragitto direi che non è conveniente

fek
10-01-2008, 14:04
non siamo nessuno per giudicare.. magari lo conosce meglio di te. indipendentemente da questo la mia personale opinione è che non è per niente necessario imparare C++, anzi è meglio non impararlo.

Date le sparate che fa sul C++, e' probabile che neppure abbia mai letto un libro a riguardo... Quella sull'impossibilita' di allocare la memoria in maniera custom era meravigliosa.


mi sa che hai travisato il mio discorso.. l'aereo non può andare da via padova a piazza udine, e costruire due aereoporti per fare quel tragitto direi che non è conveniente

Non ho travisato affatto. E' esattamente il mio discorso, non e' conveniente usare il C++ dove Java/C# va benissimo.

cdimauro
10-01-2008, 14:12
non siamo nessuno per giudicare.. magari lo conosce meglio di te. indipendentemente da questo la mia personale opinione è che non è per niente necessario imparare C++, anzi è meglio non impararlo.
Fortunatamente lo standard lo conosco (non conosco bene le librerie): lui ha dimostrato di non conoscere nemmeno le basi del C++... :asd:

P.S. Anche se ho lavorato in C++ in passato, non mi considero affatto un programmatore C++.
Come ho detto, ci vuole esperienza, imparare a conoscere la libreria standard, ed entrare nell'ottica della programmazione con questo linguaggio. Non sono cose dell'altro mondo sia chiaro, ma al momento nemmeno m'interessa approfondirne la conoscenza (e onestamente spero di farne a meno perché il C++ non lo digerisco proprio). ;)

banryu79
10-01-2008, 14:16
Date le sparate che fa sul C++, e' probabile che neppure abbia mai letto un libro a riguardo... Quella sull'impossibilita' di allocare la memoria in maniera custom era meravigliosa.


Il punto non è quanto non lo conosca... ma quanto gli stia sulle p***e :spam::D

cdimauro
10-01-2008, 14:22
Il punto non è quanto non lo conosca... ma quanto gli stia sulle p***e :spam::D
Perdonami: leggendo certe sparate ha dimostrato proprio di NON conoscerlo il linguaggio, eh! :read:

fek
10-01-2008, 14:22
Il punto non è quanto non lo conosca... ma quanto gli stia sulle p***e :spam::D

Oddio, io non reggo Python a pelle, ma non per questo scrivo fesserie a ripetizione su un linguaggio che non conosco troppo bene e pretendo pure di aver ragione ;)
Ok, effettivamente Torvalds non e' il solo ad avere questo atteggiamento, al mondo e' pieno di troll.

javaboy
10-01-2008, 14:57
Lo strumento giusto per ogni problema: Java/C# non possono essere usati per programmare un microcontrollore o scrivere un bootloader. Quindi non ha senso che soppiantino C/C++. Ma ha molto senso che molto di cio' che ieri era scritto in C++ oggi sia scritto in Java/C#.
Di nuovo i giochi come esempio: ieri erano scritti esclusivamente in C++, oggi praticamente tutti i giochi sono scritti in un linguaggio ad alto livello (LUA/Python/Ruby) e sempre meno sistemi sono scritti in C++.
Io ero convinto che anche attualmente i giochi per xbox360 , play3 e pc fossero scritti esclusivamente in c++...
Nell'ambito della programmazione videogiochi per cosa viene usato c++, per cosa python o altro?

fek
10-01-2008, 15:04
Io ero convinto che anche attualmente i giochi per xbox360 , play3 e pc fossero scritti esclusivamente in c++...
Nell'ambito della programmazione videogiochi per cosa viene usato c++, per cosa python o altro?

Esiste almeno un caso in cui questo non e' vero :D
A parte gli scherzi i casi sono molti (Civ4 usa Python per la gioca di Cesare ad esempio).

LUA/Python/Ruby sono usati per grosse parti della logica del gioco, per gli script dove non sia presente un linguaggio di scripting custom, la GUI. C++ per le parti a piu' basso livello (fisica, audio, 3d engine) e per lo strato di interfaccia ovviamente.

k0nt3
10-01-2008, 20:06
Non ho travisato affatto. E' esattamente il mio discorso, non e' conveniente usare il C++ dove Java/C# va benissimo.
questa è la dimostrazione che hai travisato visto che mi stavi contestando di dire la stessa cosa che hai detto te. sta di fatto che java/C# non sostituiscono C/C++ e infatti la gente continuerà a usare tutti questi linguaggi giustamente.

tomminno
10-01-2008, 20:07
IMHO C++ in qualche prossimo standard dovrebbe abbandonare la compatibilità con C e diventare finalmente adulto...

Non lo credo possibile.
La prossima versione ingloberà anche il C99 per cui qualcuno potrebbe scrivere:

int size;
int array[size];

e passarla pure liscia in fase di compilazione.

a2000.1
10-01-2008, 20:59
...
LUA/Python/Ruby sono usati per grosse parti della logica del gioco, per gli script dove non sia presente un linguaggio di scripting custom, la GUI.
C++ per le parti a piu' basso livello (fisica, audio, 3d engine) e per lo strato di interfaccia ovviamente.

traduzione:

LUA/Python/Ruby per le cazzate cazzate

C++ per le cazzate serie

:D

fek
10-01-2008, 21:04
questa è la dimostrazione che hai travisato visto che mi stavi contestando di dire la stessa cosa che hai detto te. sta di fatto che java/C# non sostituiscono C/C++ e infatti la gente continuerà a usare tutti questi linguaggi giustamente.

Questa e' dimostrazione che non ti sei neppure sforzato di capire quello che ho scritto. Non ho travisato affatto, anzi, e non ho mai scritto che C/C++ verra' abbandonato, anzi, l'esatto contrario :)
Se non ti e' chiaro quello che ho scritto, per cortesia rileggilo con piu' attenzione.

banryu79
10-01-2008, 21:11
traduzione:

LUA/Python/Ruby per le cazzate cazzate

C++ per le cazzate serie

:D

Umm... e come la mettiamo per i moduli di IA?
Possiamo annoverarli tra le "cazzate serie"?

Quali sono i linguaggi maggiormente utilizzati/indicati in questo caso?

cdimauro
10-01-2008, 21:26
A lui devi parlare di "High Performance Fortran", ma soltanto quando è ispirato.

Normalmente sono la carta e la matita gli strumenti che predilige. :D

a2000.1
10-01-2008, 21:32
c.zzo e figa, veramente. :O

banryu79
10-01-2008, 21:33
Ma lol. :)

La mia non voleva essere una provocazione, sono davvero curioso di sapere cosa va per la maggiore in ambito IA in giochi in cui questo aspetto è molto importante...

(visto che qua gira un certo fek, ne cito uno a caso tra quelli che conosco: Black&White?)

@EDIT:
Grazie della risposta.

a2000.1
10-01-2008, 21:38
fek dicci, hai partecipato al nuovo gioco per PS3 "The Hidden Treasure" ?

http://www.potato2008.org/images/iyp-en.gif http://www.potato2008.org/images/iyp-fr.gif

http://www.potato2008.org/images/aip-es.gif http://www.potato2008.org/images/iyp-zh.gif

fek
10-01-2008, 21:50
Ma lol. :)

La mia non voleva essere una provocazione, sono davvero curioso di sapere cosa va per la maggiore in ambito IA in giochi in cui questo aspetto è molto importante...

L'IA e' distrubuita fra C++ e un qualunque linguaggio ad alto livello a seconda delle prestazioni necessarie.

recoil
11-01-2008, 07:34
questo per andare da roma a parigi... ma per andare da via padova a piazza udine non mi sembra il caso.

dipende da che punto di via Padova, se sei in fondo magari ci può pure stare se sei dove abito io fa forse prima una nonnina a piedi :O :asd:

siamo daccordo che java/C# non sostituiscono C/C++ ma si sono ritagliati il loro spazio (talvolta invadendo quello del C++)

il che ci può pure stare
a ciascuno il suo, di certo ci sono sistemi (tipo certi embedded) dove java/c# non arrivano per ora, quindi si va avanti in C/C++

sul discorso tra C e C++ posso dire per mia esperienza (limitata, ma tant'è) che si tende a preferire il C perché è più conosciuto. quello che ho visto è che si teme un po' la OOP, quindi si scarta a priori il C++ anche se come si diceva giustamente si potrebbe anche scrivere in C++ facendo a meno delle classi...

jappilas
11-01-2008, 13:19
c.zzo e figa, veramente. :Ofek dicci, hai partecipato al nuovo gioco per PS3 "The Hidden Treasure" ? questi due post, se non sono provocatori sono alquanto criptici... specialmente mi sfugge il nesso tra la patata in quanto tubero (visto che non si tratta di giochi per ps3 nè altra console) e il tema del thread (c++, eventualmente linguaggi di programmazione in genere) - potresti chiarire ? :)
se invece era sarcasmo ( cosa che non volevo dare per scontata), potresti evitare di farne per favore, dal momento che non mi pare fek ne abbia fatto nei tuoi confronti?

Mixmar
11-01-2008, 18:12
Esiste almeno un caso in cui questo non e' vero :D
A parte gli scherzi i casi sono molti (Civ4 usa Python per la gioca di Cesare ad esempio).

LUA/Python/Ruby sono usati per grosse parti della logica del gioco, per gli script dove non sia presente un linguaggio di scripting custom, la GUI. C++ per le parti a piu' basso livello (fisica, audio, 3d engine) e per lo strato di interfaccia ovviamente.

fek, se posso approfittare della tua pazienza, me la toglieresti una curiosità: come viene realizzato l'interfacciamento? Cioè, mi rendo contro che si può fare "ad hoc", condividendo zone di memoria, scrivendo su pipe, con file condivisi, con i registri (!), ma... avete sviluppato per caso un'interfaccia comune per la comunicazione interlinguaggio, per evitare tutti i tranelli in cui si può cadere per esempio passando dati di tipi diversi, non supportati/supportati diversamente dai diversi linguaggi, eccetera...

Insomma, non penso che le varie componenti del videogioco si scambino messaggi in formato XML... :sofico:

thebol
17-01-2008, 16:10
fek, se posso approfittare della tua pazienza, me la toglieresti una curiosità: come viene realizzato l'interfacciamento? Cioè, mi rendo contro che si può fare "ad hoc", condividendo zone di memoria, scrivendo su pipe, con file condivisi, con i registri (!), ma... avete sviluppato per caso un'interfaccia comune per la comunicazione interlinguaggio, per evitare tutti i tranelli in cui si può cadere per esempio passando dati di tipi diversi, non supportati/supportati diversamente dai diversi linguaggi, eccetera...

Insomma, non penso che le varie componenti del videogioco si scambino messaggi in formato XML... :sofico:

in java per situazioni simili, si ha un oggetto interprete a cui si passa il codice(ruby, lua, pyton). L'oggetto interprete può essere riempito con vari oggetti provenienti dall'ambiente java(ci pensa l'interprete a tradurle se riesce). Poi viene eseguito lo script, che se va bene restituisce un oggetto(tradotto dall'interprete dal linguaggio di scripting a java), oppure produce qualche side-effect sugli oggetti c++ a cui ha accesso.

Poi si può fare in teoria anche il contrario, scrivi il gioco in ruby e passi il codice c++ a un oggetto interprete, ma penso proprio che sia il contrario per problemi prestazionali

mad_hhatter
17-01-2008, 17:05
in java per situazioni simili, si ha un oggetto interprete a cui si passa il codice(ruby, lua, pyton). L'oggetto interprete può essere riempito con vari oggetti provenienti dall'ambiente java(ci pensa l'interprete a tradurle se riesce). Poi viene eseguito lo script, che se va bene restituisce un oggetto(tradotto dall'interprete dal linguaggio di scripting a java), oppure produce qualche side-effect sugli oggetti c++ a cui ha accesso.

Poi si può fare in teoria anche il contrario, scrivi il gioco in ruby e passi il codice c++ a un oggetto interprete, ma penso proprio che sia il contrario per problemi prestazionali

domanda: questo interprete è realizzato a manina da zero? usa gli strumenti nativi del linguaggio che interpreta o è solo un modo per programmare in java con una sintassi diversa? come viene realizzata la possibilità di manipolare oggetti java tramite lo script? mi scuso se qualche domanda è priva di senso, ma non ho le idee molto chiare su quanto hai descritto

thebol
17-01-2008, 18:30
domanda: questo interprete è realizzato a manina da zero? usa gli strumenti nativi del linguaggio che interpreta o è solo un modo per programmare in java con una sintassi diversa? come viene realizzata la possibilità di manipolare oggetti java tramite lo script? mi scuso se qualche domanda è priva di senso, ma non ho le idee molto chiare su quanto hai descritto

premessa:
java è un mondo un po a parte rispetto al c++ per via della jvm.
L'interprete può essere realizzato come interprete(parsa il codice in java/bytecode e lo esegue) oppure può essere preventivamente compilato(in bytecode) e poi eseguito come una classe java(questo è trasparente all'utente).

Con i nuovi linguaggi di scripting(JRuby e Groovy) se non sbaglio è questo l'approccio. Per manipolare un oggetto java da dentro uno script basta "usarlo". Chiamando il metodo pippo sull'oggetto x, verrà eseguito il metodo pippo sull'oggetto x(se esiste, non cè binding a tempo di compilazione, e in pià la maggiorparte dei linguaggi di scripting sono dinamici).

Onestamente non so in c++(senza una jvm) tutto questo si riesca a replicare pari pari...ma in qualche modo faranno(senza pipe o xml)

marco.r
17-01-2008, 18:33
domanda: questo interprete è realizzato a manina da zero? usa gli strumenti nativi del linguaggio che interpreta o è solo un modo per programmare in java con una sintassi diversa? come viene realizzata la possibilità di manipolare oggetti java tramite lo script? mi scuso se qualche domanda è priva di senso, ma non ho le idee molto chiare su quanto hai descritto

Visto che generalmente sono scritti in un linguaggio di piu' basso livello (C,C++,Java), i linguaggi di scripting prevedono di solito di poter accedere ad oggetti, funzioni, istanze di quest'ultimo, non fosse altro per poter estendere il linguaggio o interfacciarsi con altre librerie. In che modo questo avvenga dipende sia dal linguaggio che dalla piattaforma.
In Python ad esempio e' relativamente facile accedere a librerie scritte in C, ma farne l'embedding in un altro programma e' decisamente piu' complicato. Cosa che non avviene invece in Lua, che e' usato spesso proprio per questo scopo.
Nel caso di linguaggi scritti per girare su VM, come quella di .NET o Java, di solito si riesce a fare abbastanza agevolmente sia l'una che l'altra cosa.

kingmastermind
19-01-2008, 17:16
Senti ma.. Mi vorresti dire che il Java sia più potente del C++! Portami un esempio qualsiasi che Java sia più potente nei calcoli e stabile nelle esecuzioni del C++! Lo sai che il prossimo sistema Operativo che Windows sta progettando è scritto interamente in C++ ! C# o C++ è per me la stessa cosa! Per il "D" è un altro discorso sembrerebbe essere una evoluzione del C++ in quanto a velocità ma ancora non è molto conosciuto! Gli unici linguaggi capaci di mettere in difficoltà il C++ sono il Fortran e l'Asm! :D

fek
19-01-2008, 17:45
sigh :(

Ufo13
19-01-2008, 17:50
Senti ma.. Mi vorresti dire che il Java sia più potente del C++! Portami un esempio qualsiasi che Java sia più potente nei calcoli e stabile nelle esecuzioni del C++! Lo sai che il prossimo sistema Operativo che Windows sta progettando è scritto interamente in C++ ! C# o C++ è per me la stessa cosa! Per il "D" è un altro discorso sembrerebbe essere una evoluzione del C++ in quanto a velocità ma ancora non è molto conosciuto! Gli unici linguaggi capaci di mettere in difficoltà il C++ sono il Fortran e l'Asm! :D

Metterci un "secondo me" ogni tanto?

Cosa intendi per potenza di un linguaggio? Mi stai dicendo che C++ e` piu` usabile di Java? Ma poi tutta sta velocita` a che costo? La stabilita` proprio te la stai inventando :)

Poi, secondo me ;), il fatto che descrivi il D come evoluzione del C++ solo in termini di velocita` fa capire che forse non hai mai lavorato seriamente con i linguaggi che hai citato.

Secondo me non puoi dire queste cose seriamente. Comunque quante volte si sara` vista questa discussione? Ormai che ci vogliamo fare...

fek
19-01-2008, 17:55
C# o C++ è per me la stessa cosa!

U-gua-li.

Ufo13
19-01-2008, 17:59
Guarda che nel layout di tastiera usato in Turkmenistan premendo due volte + ottieni un #. Provare per credere!

kingmastermind
19-01-2008, 18:37
@ Ufo13
SECONDO ME!
Volevo solo dire che paragonare Java con C++ mi sembra come paragonare la ricotta con il parmigiano (può piacere una o l'altro ma la ricotta diventa acida! stavo scherzando!). Comunque alcuni miei programmi li trovi a questo link
http://www.winturtle.netsons.org/
Scusa comunque se non sono all'altezza ! Il C++ me lo magno a colazione!

fek
19-01-2008, 18:46
Scusa comunque se non sono all'altezza ! Il C++ me lo magno a colazione!

ahuuuum... ahuuuum... (sto imparando la respirazione yoga che mi permetta di non rispondere a certi post)... ahuuumm

Ufo13
19-01-2008, 19:00
Il C++ te lo magni a colazione? Manco l'HTML del tuo sito va.. Immagino il software... Non mi va alla pagina dei download

fek
19-01-2008, 19:12
Fede, rilassati, la via del coder e' irta di pericoli, mantieni la calma mio giovane padawan.

kingmastermind
19-01-2008, 19:12
Scusate! Non capisco perchè vi offendete e commentate in modo così breve i vari interventi! Non stiamo discutendo della natura dell'uno o dell'altro linguaggio! Innanzi tutto stiamo parlando di C++ ! Io utilizzo Code::blocks con GCC 4.1.2 e sinceramente, secondo me, avendola provata, solo l'ultima versione del Visual C# ( che ho provato in versione trial) ha dato risultati soddisfacenti! Ho cercato su internet giorni interi vari benchmark che confrontavano le prestazione del C++ e del Java e non sono riuscito a trovare un benchmark che mettesse più in evidenza le prestazioni di Java sul C++! Certo esistono altri linguaggi di programmazione molto flessibili e potenti ma non certo all'altezza del C++ o del C# (fate voi). Penso che se il C++ dovesse morire sarà dovuto al fatto che è sempre un linguaggio di alto livello e pertanto difficile! Mi scuso se ho urtato la suscettibilità di qualche super programmatore! Io sono un autodidatta e mi diletto a creare programmi in vari linguaggi da 25 anni ! Saluti :) !

fek
19-01-2008, 19:14
Impressionante, non ne hai beccata una.

cionci
19-01-2008, 19:18
kingmastermind: leggi almeno un po' della discussione che abbiamo fatto, inutile entrare a gamba tesa così.

Ufo13
19-01-2008, 19:18
Penso che se il C++ dovesse morire sarà dovuto al fatto che è sempre un linguaggio di alto livello e pertanto difficile!

La tua frase mi ricorda quest'immagine:

http://img166.imageshack.us/my.php?image=senserx7.jpg

kingmastermind
19-01-2008, 19:22
Saluti al nostro mitico Cionci! mi prendo ben volentieri il tuo cartellino giallo ho potuto constatare che sei un grande esperto (mi inchino) tranne ad a2000.1 (non si sa mai)!

a2000.1
19-01-2008, 19:31
non ti inchinare mai ...
che te la mettono nel c. sempre :D

cionci
19-01-2008, 19:35
e prenderlo direttamente in c. invece ? :D
E basta dai...

^TiGeRShArK^
19-01-2008, 19:49
Metterci un "secondo me" ogni tanto?

Cosa intendi per potenza di un linguaggio? Mi stai dicendo che C++ e` piu` usabile di Java? Ma poi tutta sta velocita` a che costo? La stabilita` proprio te la stai inventando :)

Poi, secondo me ;), il fatto che descrivi il D come evoluzione del C++ solo in termini di velocita` fa capire che forse non hai mai lavorato seriamente con i linguaggi che hai citato.

Secondo me non puoi dire queste cose seriamente. Comunque quante volte si sara` vista questa discussione? Ormai che ci vogliamo fare...
ma come non lo sai? :mbe:
i programmi fatti in C++ sono stabilmente + pieni di bug rispetto a quelli fatti in java :asd:

..certo che ce se ne leggono di post quantomeno "originali" spacciati per verità assoluta :asd:

Unrue
20-01-2008, 11:58
@ Ufo13
Scusa comunque se non sono all'altezza ! Il C++ me lo magno a colazione!

Mi pare una grossa pecca di presunzione. Indipendentemente dalle tue qualità o meno con la programmazione, C++ è un linguaggio che non si finisce mai di imparare( come gli altri linguaggi d'altronde).

E' sempre bene non atteggiarsi troppo,soprattutto nei forum. Si rischia solo di fare grosse figure di m.. ;)

thebol
20-01-2008, 18:53
La tua frase mi ricorda quest'immagine:

http://img166.imageshack.us/my.php?image=senserx7.jpg

:rotfl:

kingmastermind
20-01-2008, 20:09
Per quanto riguarda quella battuta (il C++ me lo magno a colazione!) stavo naturalmente scherzando e questa frase è stata esageratamente interpretata come sfida! Rispetto tutti i programmatori che qui si esprimono ma non comprendo i vari attacchi! Frequento molti forum di altri paesi esteri e vi assicuro che non ho mai ricevuto tanti attacchi per una mia opinione espressa e , quanto meno, capivano quando stavo scherzando! Il C++ non si finisce mai di imparare sono in totale accordo su questo!

das
20-01-2008, 20:21
Mi sembra che il c++ venga sempre meno usato e sia ora relegato ad una vera e propria nicchia. Java e C# stanno rubando la scena a questo linguaggio, secondo voi quale futuro lo attende?Che mi sapete dire del linguaggio D?

Mi fai il nome di un programma di grande diffussione e destinato al grande pubblico scritto in java ? (a parte toh Eclipse )

kingmastermind
20-01-2008, 20:34
Sicuramente DAS dice una verità oggi incontestabile ! [Java] ( comprese le implementazioni JIT) pure essendo un grande linguaggio di programmazione (molti sostengono che sia stabile e velocissimo) non è così utilizzato e conosciuto nel mondo come il [C++] o il [C#]! Tuttavia, considerato che la caratteristica principale di [Java] è quella di essere un linguaggio universale e non legato al processore singolo , (viene utilizzato nei sistemi operativi dei telefonini) è doveroso sottolineare che possiede questo grande pregio da tenere in considerazione per il futuro e che altri linguaggi non hanno!
Se vi può servire dagli USA mi hanno segnalato questo link interessante!
G++ vs Java6 Server
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=gpp&lang2=java

thebol
20-01-2008, 20:56
java è usato per la maggior parte in ambiente enterprise e per siti web(e in questi casi è più usato che c e c++). C#, ASP.NET e l'ultimo visual basic stanno comunque guadagnando terreno.

Applicazioni user ce ne sono poche e vero, ma sopratutto per un problema di lentezza della gestione della gui java. I problemi sono stati risolti nelle ultime versioni della jvm, ma ormai viene considerato lento e poco adatto per questi scopi. Esistono tuttavia applicazione client-based nel mondo enterprise basate su java, e ultimamente stanno venendo fuori anche basate sul runtime di eclipse.


un applicazione user fatta in java e jedit

^TiGeRShArK^
20-01-2008, 21:10
Mi fai il nome di un programma di grande diffussione e destinato al grande pubblico scritto in java ? (a parte toh Eclipse )

ce ne sono quante ne vuoi. Opera mini ti va bene? Tutti i giochi e le applicazioni in java per terminali mobili? O magari mi vorrai dire che non sono di grande diffusione...:rolleyes:
per pc ci sarebbe azureus che é molto diffuso ma che personalmente non mi piace.

fek
20-01-2008, 21:12
Sicuramente DAS dice una verità oggi incontestabile ! [Java] ( comprese le implementazioni JIT) pure essendo un grande linguaggio di programmazione (molti sostengono che sia stabile e velocissimo) non è così utilizzato e conosciuto nel mondo come il [C++] o il [C#]! Tuttavia, considerato che la caratteristica principale di [Java] è quella di essere un linguaggio universale e non legato al processore singolo , (viene utilizzato nei sistemi operativi dei telefonini) è doveroso sottolineare che possiede questo grande pregio da tenere in considerazione per il futuro e che altri linguaggi non hanno!
Se vi può servire dagli US

Ma lo sai che sia Java sia C# compilano verso bytecode (quello che tu chiami "linguaggio universale" che non e' affatto un linguaggio classico, e' una specie di assembly per una macchina virtuale).
Non c'e' nulla che impedisca anche al C++ di essere compilato verso un bytecode, tanto e' vero che esiste appunto un'estensione (C++/CLI) che compila verso CIL (il bytecode di .NET).

E nulla vieta di compilare Java o C# direttamente verso codice nativo (per java esistono compilatori nativi verso architettura x86).

Questo per farti capire che il discorso sulla prestazioni che stai portando avanti da due giorni lascia il tempo che trova. A parte rarissimi casi, non si sceglie un linguaggio per le sue presunte prestazioni, ma si sceglie in base ai tool a disposizione per risolvere al meglio il proprio problema, in base alla produttivita' che garantisce e in base alla propria esperienza con quel linguaggio rispetto ad altri. Infine, se e' pertinente, per le prestazioni.

Infine, Java e C# sono due linguaggi molto simili pur risolvendo problemi diametralmente opposti. Sono entrambi linguaggi ad alto livello, flessibili e potenti. C++ e' un linguaggio a piu' basso livello, estremamente versatile, quindi molto ma molto difficile da gestire (no, non lo conosci perfettamente, anzi) che garantisce maggior controllo sulla macchina rispetto a Java/C#, controllo che si paga pesantemente in termini di produttivita' e che nella stragrande maggioranza dei casi non e' necessario.

kingmastermind
20-01-2008, 21:19
Bella analisi Fek! Per fortuna stavoltà non ti ho fatto arrabbiare! Java non è un linguaggio di programmazione universale e allora perchè molti lo definiscono tale? :mc:
link a mia difesa e discolpa!
http://digilander.libero.it/venexian/javatest/
http://www.notrace.it/glossario/Java/
e in più
http://www.informatica.mcgraw-hill.it/esperto/Fondamenti_di_Java3.asp
3-0 e palla al centro!

thebol
20-01-2008, 21:23
attualmente è possibile compilare c# in codice nativo()?(per possibile intendo se lo fa Visual studio, non che sia possibile teoricamente o con qualche compilatore esotico)

thebol
20-01-2008, 21:33
Bella analisi Fek! Per fortuna stavoltà non ti ho fatto arrabbiare! Java non è un linguaggio di programmazione e allora perchè molti lo definiscono tale? :mc:


java E' un linguaggio di programmazione. Poi si ha un compilatore che traduce il linguaggio in un altro linguaggio. Il 99% delle persona utilizza un compilatore che traduce in bytecode per la JVM, ma in teoria si potrebbe farne uno anche per .NET(ecco una versione per mono (http://www.ikvm.net/)). Uno delle cose più apprezzate del mondo java è proprio la JVM, che è considerata molto stabile, veloce nel mondo enterprise.

La separazione fra JAVA come linguaggio e la piattaforma su cui gira (JVM) ha permesso a molti linguaggi di essere portati sulla jvm(Jyton, JRuby), e a java di essere usato su altre piattaforme. La piattaforma Android di google, viene programmata in java(le api sono quasi tutte quelle dalla distribuzione standard di sun + altre per la gestione di cose particolari per cellulari/pda). Dal java si ottiene il bytecode java, e dal bytecode java un altro bytecode per la piattaforma Android(che poi è basata su una jvm opensource di apache...)

kingmastermind
20-01-2008, 21:35
Carissimo Thebol mi sono corretto, guarda bene!

71104
20-01-2008, 21:42
ce ne sono quante ne vuoi. Opera mini ti va bene? Tutti i giochi e le applicazioni in java per terminali mobili? O magari mi vorrai dire che non sono di grande diffusione...:rolleyes:
per pc ci sarebbe azureus che é molto diffuso ma che personalmente non mi piace.ho il dubbio su NetBeans.

thebol
20-01-2008, 22:02
Carissimo Thebol mi sono corretto, guarda bene!

sry non avevo visto l'edit

kingmastermind
20-01-2008, 22:07
Sei perdonato Senior Member! Cavoli ma questo benedetto fek è proprio tosto ! Ma a che serve conoscere il C++! Io uso il C++ e quando non so una cosa utilizzo le varie guide su internet! Lo sapevate che il comando "strcmp" non è stabile ! Basta leggere su internet e non credere di conoscere il C++! Comunque, sei perdonato pure tu mitico fek! (sono un tipo scherzoso non ci fate caso!):D

thebol
20-01-2008, 22:11
Bella analisi Fek! Per fortuna stavoltà non ti ho fatto arrabbiare! Java non è un linguaggio di programmazione universale e allora perchè molti lo definiscono tale? :mc:
link a mia difesa e discolpa!
http://digilander.libero.it/venexian/javatest/
http://www.notrace.it/glossario/Java/
e in più
http://www.informatica.mcgraw-hill.it/esperto/Fondamenti_di_Java3.asp
3-0 e palla al centro!

java è un linguaggio universale (nei termini di quegli articoli, che onestamente non è che siano le massime referenze sul linguaggio java...) quanto il c++.

Basta avere un compilatore che ti compili per la piattaforma di riferimento.


La piattaforma JAVA porta + avanti questo assunto, asserendo che un programma scrittoin bytecode per la jvm, può girare su qualsiasi piattaforma su cui esista una jvm che supporti le specifiche della piattaforma di riferimento(1.0, 1.1, etc).

Con il c++ non hai questo assunto di base. Prima per portare un programma su una piattaforma X hai bisogno di un compilatore per la piattaforma X.(in java si ha bisogno della jvm per la piattaforma X).

In più se il programma fa accesso a chiamate di sistema, queste chiamate possono non esserci (o essere coerenti) su entrambe le piattaforme. Naturalmente ci sono modi per ovviare a questi problemi(usare una libreria che wrappi le chiamate di sistema), ma non fa parte del c++. Questo semplicemente perchè non esiste una piattaforma c++.

L'errore di quegli articoli(triviale) e nominare il linguaggio java, invece della piattaforma. In genere vengono considerati la stessa cosa.

thebol
20-01-2008, 22:12
ho il dubbio su NetBeans.

la sun che fa il editor di riferimento non in java?

ps.cmq anche IntellJIDEA è fatto in java (E un altro editor java)

cdimauro
21-01-2008, 08:04
Sei perdonato Senior Member! Cavoli ma questo benedetto fek è proprio tosto ! Ma a che serve conoscere il C++! Io uso il C++ e quando non so una cosa utilizzo le varie guide su internet! Lo sapevate che il comando "strcmp" non è stabile ! Basta leggere su internet e non credere di conoscere il C++! Comunque, sei perdonato pure tu mitico fek! (sono un tipo scherzoso non ci fate caso!):D
Il tuo problema è proprio quello: che leggi su internet, quando COME MINIMO dovresti prenderti lo Stroustrup e STUDIARTELO (perché leggerlo non è sufficiente: i concetti bisogna ASSIMILARLI).

E il tuo metodo poi lo riporti anche su altro: vai su internet e scopri che Java "non è un linguaggio". :muro:

P.S. Sì, ho visto che POI ti sei corretto.

^TiGeRShArK^
21-01-2008, 09:12
ho il dubbio su NetBeans.
:mbe::confused:

das
21-01-2008, 11:15
ce ne sono quante ne vuoi. Opera mini ti va bene? Tutti i giochi e le applicazioni in java per terminali mobili? O magari mi vorrai dire che non sono di grande diffusione...:rolleyes:
per pc ci sarebbe azureus che é molto diffuso ma che personalmente non mi piace.

E' vero, mi sono dimenticato di dire che mi riferivo al mopndo PC.
Comunque Azureus non è così diffuso, tra tutta la gente che conosco nessuno lo usa. Credo che per bittorrent la maggior parte usi uTorrent, e comunque è gia un protocollo usato dai power user.

Io miriferisco a programmi normali per pc, destinati al grande pubblico come può essere photoshop o 3d studio.

In quell'ambito il c++ impera mentre java è un perfetto sconosciuto.

(persino openoffice, della stessa sun, ad eccezione di certe parti non è fatto in java)

fek
21-01-2008, 11:27
Photoshop e 3D Studio sono ancora scritti in C++ perche' sono pacchetti che si portano dietro anni e anni di code base C++.
Fossero scritti oggi, C++ non sarebbe la scelta se non per poce parti di codice.

^TiGeRShArK^
21-01-2008, 13:20
E' vero, mi sono dimenticato di dire che mi riferivo al mopndo PC.
Comunque Azureus non è così diffuso, tra tutta la gente che conosco nessuno lo usa. Credo che per bittorrent la maggior parte usi uTorrent, e comunque è gia un protocollo usato dai power user.

Io miriferisco a programmi normali per pc, destinati al grande pubblico come può essere photoshop o 3d studio.

In quell'ambito il c++ impera mentre java è un perfetto sconosciuto.

(persino openoffice, della stessa sun, ad eccezione di certe parti non è fatto in java)
preso da sourceforge:

1 eMule 383,253,347
2 Azureus 159,929,042
3 Ares Galaxy 139,994,512
4 BitTorrent 51,850,559
5 DC++ 49,130,768
6 Shareaza 42,014,714
7 GTK+ and The GIMP installers for WindowsAccepting Donations 38,126,160
8 VirtualDubAccepting Donations 37,336,246
9 7-Zip 35,856,047
10 AudacityAccepting Donations 34,776,877
11 CDex 34,510,210
12 FileZillaAccepting Donations 30,929,463
13 eMule PlusAccepting Donations 25,021,826
14 guliverkliAccepting Donations 22,421,666
15 Pidgin 20,952,305
16 TightVNC 17,118,548
17 aMSN 17,075,963
18 phpBB 16,461,464
19 WinSCPAccepting Donations 16,340,580
20 ZSNESAccepting Donations 16,306,474
21 UltraVNCAccepting Donations 15,542,060
22 PDFCreatorAccepting Donations 15,381,646
23 NASA World Wind 15,310,263
24 phpMyAdminAccepting Donations 15,158,656
25 AC3Filter 14,589,673
26 Dev-C++ 13,592,684
27 Ghostscript 12,803,658
28 PortableApps.com: Portable Software/USBAccepting Donations 12,268,346
29 MinGW - Minimalist GNU for Windows 11,694,322
30 Simple Directory ListingAccepting Donations 11,601,364


Ma sicuramente sbagliano...
avrai ragione tu che tutti usano utorrent.... :rolleyes:

(da notare che il numero di download di bittorrent è circa 3 volte inferiore rispetto a quello di azureus.. :rolleyes: )
ah.. dimenticavo..
gli utenti totali di 3dstudio e photoshop sommati insieme nel mondo secondo te sono + di 160 milioni?

das
21-01-2008, 13:33
preso da sourceforge:

Ma sicuramente sbagliano...
avrai ragione tu che tutti usano utorrent.... :rolleyes:

(da notare che il numero di download di bittorrent è circa 3 volte inferiore rispetto a quello di azureus.. :rolleyes: )
ah.. dimenticavo..
gli utenti totali di 3dstudio e photoshop insieme nel mondo secondo te sono + di 160 milioni?

Se leggi avevo scritto: 'Credo che per bittorrent la maggior parte usi uTorrent'.
Inoltre se vai sul sito ufficiale di uTorrent.com scopri che il download non si appoggia all'hosting di sourceforge per cui tutti i download fatti dalla pagina ufficiale di uTorrent (cioè la maggior parte) non sono conteggiati nella tua statistica. Invece quelli di Azureus sì.

----------
( Azureus: http://prdownloads.sourceforge.net/azureus/Azureus_3.0.4.2_windows.exe?download )

(uTorrent: http://download.utorrent.com/1.7.6/utorrent.exe )
----------

Ma non è questo il punto fondamentale dato che bittorrent non è neppure il protocollo p2p più usato. Azureus NON è un programma diffusissimo, e nemmeno uTorrent.

Il punto è che di programmi di grande diffusione (tipo l'office o winamp per intenderci) per PC scritti in java non ne esiste nemmeno uno.

Persino l'openoffice che è della stessa SUN è scritto in java solo in alcune parti minoritarie.

^TiGeRShArK^
21-01-2008, 13:42
Se leggi avevo scritto: 'Credo che per bittorrent la maggior parte usi uTorrent'.
Inoltre se vai sul sito ufficiale di uTorrent.com scopri che il download non si appoggia all'hosting di sourceforge per cui tutti i download fatti dalla pagina ufficiale di uTorrent (cioè la maggior parte) non sono conteggiati nella tua statistica. Invece quelli di Azureus sì.

----------
( Azureus: http://prdownloads.sourceforge.net/azureus/Azureus_3.0.4.2_windows.exe?download )

(uTorrent: http://download.utorrent.com/1.7.6/utorrent.exe )
----------

Ma non è questo il punto fondamentale dato che bittorrent non è neppure il protocollo p2p più usato. Azureus NON è un programma diffusissimo, e nemmeno uTorrent.

Il punto è che di programmi di grande diffusione (tipo l'office o winamp per intenderci) per PC scritti in java non ne esiste nemmeno uno.

Persino l'openoffice che è della stessa SUN è scritto in java solo in alcune parti minoritarie.
scusa..
ti ho chiesto se pensi che ci siano + di 160 milioni di utenti di photoshop e 3dsmax messi insieme.
160 milioni di download, checchè se ne dica, è indice di un'elevata diffusione del software.
Che poi azureus a me personalmente non piaccia è un altro conto e l'avevo già messo in evidenza prima, ma questo non ha niente a che vedere con la sua diffusione che è sicuramente + elevata dei programmi da te stesso citati.
Tra l'altro, openoffice che continui a citare, è stato scaricato poco + della metà delle volte rispetto ad azureus, come puoi vedere:

Downloads (some duplication) 98,308,686

per cui..
mi spieghi perchè continui a ripetere che azureus non è diffuso e continui a citare programmi che sono MOLTO meno diffusi di azureus come esempio di programmi ad elevata diffusione? :mbe:

variabilepippo
21-01-2008, 13:46
Ma sicuramente sbagliano...
avrai ragione tu che tutti usano utorrent....

(da notare che il numero di download di bittorrent è circa 3 volte inferiore rispetto a quello di azureus.. )
ah.. dimenticavo..



Beh, io ho scaricato 4/5 volte Azureus nel corso del tempo per vedere se c'erano dei netti miglioramenti, ma ho sempre usato uTorrent...

In ogni caso i software P2P mostrano statistiche dettagliate sui client con i quali entrano in contatto, statistiche MOLTO più significative rispetto ai download:

http://img180.imageshack.us/img180/566/cattura1vx3.png
http://img180.imageshack.us/img180/628/cattura2hf4.png
http://img180.imageshack.us/img180/2233/cattura3sm0.png

Ho scelto 3 torrent a caso, mi sembra che le immagini siano abbastanza eloquenti. :rolleyes:

^TiGeRShArK^
21-01-2008, 13:52
Beh, io ho scaricato 4/5 volte Azureus nel corso del tempo per vedere se c'erano dei netti miglioramenti, ma ho sempre usato uTorrent...

In ogni caso i software P2P mostrano statistiche dettagliate sui client con i quali entrano in contatto, statistiche MOLTO più significative rispetto ai download:

http://img180.imageshack.us/img180/566/cattura1vx3.png
http://img180.imageshack.us/img180/628/cattura2hf4.png
http://img180.imageshack.us/img180/2233/cattura3sm0.png

Ho scelto 3 torrent a caso, mi sembra che le immagini siano abbastanza eloquenti. :rolleyes:


quindi anche secondo te un software da 160 milioni di download si può dire che non è diffuso?
pure io ho scaricato diverse volte openoffice e non l'ho MAI usato.
Togliamo anche dai dati di openoffice una percentuale uguale?
Secondo me dire che photoshop o 3dsmax siano programmi diffusi e affermare che azureus, un programma da 160 milioni di download non lo sia è una cavolata.

variabilepippo
21-01-2008, 13:57
quindi anche secondo te un software da 160 milioni di download si può dire che non è diffuso?
pure io ho scaricato diverse volte openoffice e non l'ho MAI usato.


Ciò conferma la mia idea, il numero di download non è un indice significativo, bisogna valutarne la diffusione "sul campo" e a quanto sembra quella di Azureus è veramente minima.


Secondo me dire che photoshop o 3dsmax siano programmi diffusi e affermare che azureus, un programma da 160 milioni di download non lo sia è una cavolata.


Guarda le immagini, se vuoi scegli TU una decina di torrent e vediamo quali client vengono utilizzati effettivamente...

Ho l'impressione che buona parte degli utenti rimuova Azureus dopo pochi minuti di utilizzo per passare a client molto più leggeri ma ugualmente potenti.

cionci
21-01-2008, 14:38
gli utenti totali di 3dstudio e photoshop sommati insieme nel mondo secondo te sono + di 160 milioni?
Secondo me sì...magari solo quelli "ufficiali".
Non è che siamo un filino OT ?

AnonimoVeneziano
21-01-2008, 21:11
Beh , comunque è un dato di fatto che i software Java sul desktop siano poco diffusi. A parte Azureus ed Eclipse/Netbeans (che sono software per sviluppatori) di software Java molto diffusi non ce ne sono . Rispetto alla quantità di software C/C++ impallidisce. Java trova la sua forza nel settore enterprise ed embedded, ma nel desktop è sicuramente meno presente.

Ciao

^TiGeRShArK^
21-01-2008, 21:42
Secondo me sì...magari solo quelli "ufficiali".
Non è che siamo un filino OT ?
si che siamo OT, ma visto che mi si dice che azureus NON è un software diffuso, se permettete, volevo farvi notare che non è così.
E cmq 3dstudio e photoshop LEGALI insieme dubito che si avvicinino ai 100milioni...
A meno di non contare anche le versioni per DOS di 15 anni fa :asd:
Per tornare al discorso "statistiche"...
Ovviamente il tipo di client usato è fortemente dipendente dal tipo di file che si considera.
Esempio pratico:
Apple quick time 7 pro (scaricato solo per fini dimostrativi):
http://img182.imageshack.us/img182/9540/quicktimerc6.th.png (http://img182.imageshack.us/my.php?image=quicktimerc6.png)
azureus 13 - tutti gli altri insieme 10

Kubuntu (i 3 maggiori senza screen perchè non entrava tutto insieme dato il numero di client):
azureus 41
ktorrent 58
utorrent 28

A vedere kubuntu sembrerebbe che il + diffuso sia ktorrent.
Ebbene..
quanti client con ktorrent vedete in quicktime?
nemmeno uno.
Inoltre, da quello che ho visto, l'uso principale di azureus è per scaricare file multimediali e inoltre, il tipo di client a preponderanza maggiore varia anche al variare del motore di ricerca utilizzato.
Alla luce di tutto ciò..
vorreste farmi credere che Azureus NON sia un software diffuso e che il 90% di quelli che l'hanno scaricato l'hanno cancellato?
E' vero che al giorno d'oggi in ambito desktop java non è molto diffuso.
Ma ha TUTTE le potenzialità per uno sviluppo maggiore futuro, come dimostrano Azureus, Eclipse e Netbeans.

das
21-01-2008, 22:06
si che siamo OT, ma visto che mi si dice che azureus NON è un software diffuso, se permettete, volevo farvi notare che non è così.

Ti ripeto che già di per se il protocollo bittorrent è usato pochissimo rispetto ad esmpio ad edonkey. Emule ce l'hanno tutti, ma proprio tutti, azureus etc. no.


E cmq 3dstudio e photoshop LEGALI insieme dubito che si avvicinino ai 100milioni...


Legale o illegali, anche photoshop ce l'hanno in tantissimi, anzi la moda del momento è prendere le foto e fare fotomontaggi più o meno improbabili o brutti.


E' vero che al giorno d'oggi in ambito desktop java non è molto diffuso.

Questo è il punto fondamentale, e come vedi lo riconosci anche te.


Ma ha TUTTE le potenzialità per uno sviluppo maggiore futuro, come dimostrano Azureus, Eclipse e Netbeans.

A parte che esiste da 13 anni e ancora non ha sfondato (mentre .NET ad esempio si sta espandendo a macchia d'olio ed esiete da pochi anni), vedo invece come al contrario java venga sempre più emarginato dal settore dei cellulari, mano a mano che si diffondono symbian o windows mobile.

^TiGeRShArK^
21-01-2008, 22:19
A parte che esiste da 13 anni e ancora non ha sfondato (mentre .NET ad esempio si sta espandendo a macchia d'olio ed esiete da pochi anni), vedo invece come al contrario java venga sempre più emarginato dal settore dei cellulari, mano a mano che si diffondono symbian o windows mobile.
:mbe:
Java emarginato?
1) Hai idea di quante centinaia di milioni di utenti abbiano applicazioni java sui loro cellulari? Rispondo io. Se non erro è stato superato il MILIARDO un bel pò di tempo fa.
2) Hai idea di quanto sia diffuso in ambito enterprise?
cioè.. secondo te java è un linguaggio morto...
Fallo in ambito enterprise o mobile il confronto con .Net e vediamo chi è + diffuso :rolleyes:
Ah.. e citami qualche applicazione .NET diffusa sui desktop visto che ci sei.....

cionci
22-01-2008, 01:33
^TiGeRShArK^: la verità, anche se triste, è questa...Java è stato relegato per molti anni in ambito enterprise (spesso in programmi ad hoc) e sui mobile. Per motivi anche fondati a volte: ogni applicazione di una certa importanza scritta in Java portava via una marea di risorse (lo stesso Azureus è molto pesante).
In ambito dekstop/home non ci sono molti programmi che lo usano, anche se sinceramente credo che stia recuperando. Non è da tanto tempo che dispone del compilatore JIT, e questo è stato un passo molto importante per arrivare ad avere prestazioni che non ha mai avuto.
Riguardo a .Net...l'ultimo Office si appoggia a .Net ? Molti programmi closed si appoggiano (ad esempio il Catalyst Control Center dei driver ATI, giusto per citarne uno semplice) e si appoggeranno a .Net.
In ogni caso il programma più diffuso che usa Java suppongo che sia OpenOffice, non certo Azureus.

Riguardo a 3DSmax e Photoshop: sicuramente già solo in Italia saranno almeno 1-2 milioni gli utenti che hanno una qualsiasi licenza di Photoshop sul proprio PC. Vogliamo aggiungere ad esempio gli utenti di Photoshop distribuite con gli scanner ?

cdimauro
22-01-2008, 07:21
A parte che esiste da 13 anni e ancora non ha sfondato (mentre .NET ad esempio si sta espandendo a macchia d'olio ed esiete da pochi anni), vedo invece come al contrario java venga sempre più emarginato dal settore dei cellulari, mano a mano che si diffondono symbian o windows mobile.
Se permetti, visto che da un po' di tempo lavoro anche nel settore dei cellulari, posso dirti che Java è LA piattaforma di riferimento, e il suo successo nonché diffusione non accennano a diminuire... ;)

das
22-01-2008, 08:31
Se permetti, visto che da un po' di tempo lavoro anche nel settore dei cellulari, posso dirti che Java è LA piattaforma di riferimento, e il suo successo nonché diffusione non accennano a diminuire... ;)

Sarà, ma a me pare che anche per icellulari, tutti quei programmi un minimo più "corposi" (vedi tutti i sodtware GPS tipo tomtom, navigator, route66 etc. oppure opensuite, quickoffice) siano scritti in c++.
Sono anni che uso cellulari symbian, e per la mia esperienza, i giochi scritti in c++ sono più veloci e solitamente ricchi a livello grafico e sonoro.
Basta vedere la differenza tra Frozen Buble, STris2 e tutti i vari equivalenti in java. OperaMini non è lontanamente paragonabile al nuovo browser (C++)che si trova in symbian 9.2. (anche se devo riconosce che rispetto a quello vecchio era molto meglio)

Poi se vai sul nokia store vedi che la maggior parte dei software venduti non sono java.

Mi sembra che neppure skype sia stato fatto per java eppure sarebbe utilissimo mentre esiste iSkoot per symbian.

cdimauro
22-01-2008, 09:01
Sarà, ma a me pare che anche per icellulari, tutti quei programmi un minimo più "corposi" (vedi tutti i sodtware GPS tipo tomtom, navigator, route66 etc. oppure opensuite, quickoffice) siano scritti in c++.
Dipende da diversi fattori. Il problema più grosso della piattaforma Java su mobile è che le virtual machine presentano differenze, anche notevoli, sia a livello di API (e bug :muro: ) esposte che di risorse a disposizione.
Sono anni che uso cellulari symbian, e per la mia esperienza, i giochi scritti in c++ sono più veloci e solitamente ricchi a livello grafico e sonoro.
Basta vedere la differenza tra Frozen Buble, STris2 e tutti i vari equivalenti in java. OperaMini non è lontanamente paragonabile al nuovo browser (C++)che si trova in symbian 9.2. (anche se devo riconosce che rispetto a quello vecchio era molto meglio)
Vero, ma se già con Java abbiamo non poche difficoltà (vedi sopra), non hai idea di cosa comporti lo sviluppo di applicazioni Symbian.

Se tocchiamo i giochi, poi, non ne parliamo nemmeno: i costi di sviluppo salirebbero vertiginosamente se volessimo realizzare delle versioni decenti (e di qualità) per il variegato parco macchine a disposizione.
Poi se vai sul nokia store vedi che la maggior parte dei software venduti non sono java.
Un solo dato non fa testo: tu hai idea dei numeri del mercato dei videogiochi? Java è leader incontrastato.

Non ti posso riportare delle slide con le analisi di mercato perché è materiale riservato e non posso pubblicarlo, ma il mercato Symbian, ripeto, è estremamente ridotto rispetto a quello Java.
Mi sembra che neppure skype sia stato fatto per java eppure sarebbe utilissimo mentre esiste iSkoot per symbian.
Una rondine non fa primavera. ;)

thebol
22-01-2008, 09:11
A parte che esiste da 13 anni e ancora non ha sfondato (mentre .NET ad esempio si sta espandendo a macchia d'olio ed esiete da pochi anni), vedo invece come al contrario java venga sempre più emarginato dal settore dei cellulari, mano a mano che si diffondono symbian o windows mobile.

:rotfl:

non ha sfondato?

http://www.tiobe.com/tpci.htm

ho visto classifiche anche di offerte di posti di lavoro negli usa, e java è al primo posto.

ps.Questo non vuol dire che java sia il migliore linguaggio del mondo, o adatto a tutte le situazione. Però ha assolutamente sfondato.

pps. nel mondo mobile, rischia di avere un gran ritorno sulla piattaforma android di google(e qua si parla di linguaggio java, non di piattaforma)

AnonimoVeneziano
22-01-2008, 09:13
:rotfl:

non ha sfondato?

http://www.tiobe.com/tpci.htm

ho visto classifiche anche di offerte di posti di lavoro negli usa, e java è al primo posto.

ps.Questo non vuol dire che java sia il migliore linguaggio del mondo, o adatto a tutte le situazione. Però ha assolutamente sfondato.

pps. nel mondo mobile, rischia di avere un gran ritorno sulla piattaforma android di google(e qua si parla di linguaggio java, non di piattaforma)


Mizzega, il LUA a così tante frecce in su che fa paura :D

Sabonis
22-01-2008, 09:25
Una domanda...ma il java con i controlli automatici sugli indici degli array e la gargabe collection automatica non è condannato ad essere inevitabilmente più lento del c++?

thebol
22-01-2008, 09:35
Una domanda...ma il java con i controlli automatici sugli indici degli array e la gargabe collection automatica non è condannato ad essere inevitabilmente più lento del c++?

ni
in alcune cose si e in altre no. Per esempio nelle ultime versioni della jvm, allocare memoria costa meno che in c++.(Non ho riferimenti al perchè però :( )

Cmq a parita di tempo di sviluppo(costo uomo) rischia di essere più efficiente java, non avendo problemi a gestire la memoria(meno leak, no errori sui puntatori, etc) e potendo essere compilato a tempo di esecuzione.

E il costo uomo per avere un software più efficiente in c/c++ è in molti casi maggiore che il costo dell'hardware per far girare un software java con la stessa velocità.


Poi ci sono alcuni ambiti in cui non è possibile usare java, perchè si ha bisogno del totale controllo della memoria(ad esempio come fek insegna, nei motori grafici 3d).

fek
22-01-2008, 09:42
ni
in alcune cose si e in altre no. Per esempio nelle ultime versioni della jvm, allocare memoria costa meno che in c++.(Non ho riferimenti al perchè però :( )


Per il banale motivo che in java o .NET un'allocazione di memoria e' piu' o meno questo:


return top_of_stack += size;


in C++ e' questo:


return oh_my_fekking_hell_find_me_a_free_block(size);


E basta con questo mito che il C++ e' piu' o meno veloce di Java, perche' nel 99% dei casi non conta nulla e, sicuramente, per tutto il software che potete scrivere non conta assolutamente niente. Conta solo quanto tempo impiegate a scriverlo, e in C++ ne impiegate molto di piu'.

thebol
22-01-2008, 09:50
Per il banale motivo che in java o .NET un'allocazione di memoria e' piu' o meno questo:


return top_of_stack += size;


in C++ e' questo:


return oh_my_fekking_hell_find_me_a_free_block(size);


E basta con questo mito che il C++ e' piu' o meno veloce di Java, perche' nel 99% dei casi non conta nulla e, sicuramente, per tutto il software che potete scrivere non conta assolutamente niente. Conta solo quanto tempo impiegate a scriverlo, e in C++ ne impiegate molto di piu'.

ma se faccio una new in java, l'oggetto non viene messo sull'heap?(con relativa ricerca di un blocco di memoria libera?)

das
22-01-2008, 10:09
:rotfl:

non ha sfondato?

http://www.tiobe.com/tpci.htm

ho visto classifiche anche di offerte di posti di lavoro negli usa, e java è al primo posto.


Si' ma io ti parlo dell'ambito consumer, in quelle statistiche viene calcolato anche il settore aziendale.
In ambito aziendale java e' sicuramente molto usato, ma nella discussione si sta parlando del c++ e della possibilita' che venga rimpiazzato. Per fare una considerazione di questo tipo bisogna parlare soprattutto dell'ambito consumer che consiste nella maggior parte del mercato.

Java non puo' rimpiazzare il c++ o il c, per il semplice fatto che non e' possibile creare in java certi tipi di programmi, ad esempio quelli dove e' richiesto un accesso a basso livello, quelli dove e' richiesta un'alta velocita' di avvio, ma non solo.

Io programmo per hobby e figurati che la maggior parte delle volte uso addirittura Delphi o Lazarus, pero' sinceramente di java non mi ha mai convinto il fatto che se anche devi fare un programmino scemo da 20kb, devi caricare in memoria java.exe che occupa 30MB. Credo che chiunque sviluppi si compiaccia di vedere come il suo programma occupi meno risorse possibile, forse e' anche per quello che java e' meno usato del c++.

banryu79
22-01-2008, 10:12
Java non puo' rimpiazzare il c++ o il c, per il semplice fatto che non e' possibile creare in java certi tipi di programmi, ad esempio quelli dove e' richiesto un accesso a basso livello, quelli dove e' richiesta un'alta velocita' di avvio, ma non solo.
Ma questo implica semplicemente che Java non può rimpiazzare C/C++ in questi aspetti, per le ragioni sopraindicate, mentre può rimpiazzarlo altrove.
Un software non è detto che debba essere tutto scritto in un unico linguaggio, se è realizzato in modo modulare può dividersi task e strumenti necessari a compierli (almeno credo :P)

cionci
22-01-2008, 10:17
ma se faccio una new in java, l'oggetto non viene messo sull'heap?(con relativa ricerca di un blocco di memoria libera?)
Suppongo che il garbage collector si occupi anche di eliminare la frammentazione e comunque lo spazio nello heap credo che vanga allocato a blocchi (almeno da un punto di vista logico dovrebbe essere più funzionale).

Sabonis
22-01-2008, 10:22
E i controlli sugli indici degli array non incidono sulle prestazioni?

fek
22-01-2008, 10:24
ma se faccio una new in java, l'oggetto non viene messo sull'heap?(con relativa ricerca di un blocco di memoria libera?)

Non conosco le specifiche esatte dell'allocatore di java, conosco quelle di .NET e assumiamo che siano almeno simili.

Gli oggetti sono allocati nello heap, la differenza e' l'algoritmo di allocazione: essendoci il GC tu non puoi fare free manuali, quindi non c'e' bisogno di cercare un blocco libero, il blocco libero e' sempre quello al quale punta top_of_stack (o buffer, o quello che e' nel caso particolare).

Quando entra in azione il GC, scorre tutti i blocchi allocati, marka quelli da liberare, poi ricompatta l'heap, aggiorna gli handle e aggiorna top_of_stack al primo blocco di memoria libero. Cosi' l'allocazione e' sempre immediata e non devi cercare un blocco libero.

cionci
22-01-2008, 10:25
E i controlli sugli indici degli array non incidono sulle prestazioni?
Chiaramente incidono. Ma in piccola percentuale ;)
Infatti nessuno dice che Java è più veloce del C++ in generale.

fek
22-01-2008, 10:27
Java non puo' rimpiazzare il c++ o il c, per il semplice fatto che non e' possibile creare in java certi tipi di programmi, ad esempio quelli dove e' richiesto un accesso a basso livello, quelli dove e' richiesta un'alta velocita' di avvio, ma non solo.

Il codice a basso livello e' una frazione del codice scritto lato client (i driver). L'alta velocita' di avvio non e' un problema, se ne occupa il JIT e, se necessario, si puo' sempre compilare staticamente il bytecode per una data piattaforma.


Io programmo per hobby e figurati che la maggior parte delle volte uso addirittura Delphi o Lazarus, pero' sinceramente di java non mi ha mai convinto il fatto che se anche devi fare un programmino scemo da 20kb, devi caricare in memoria java.exe che occupa 30MB. Credo che chiunque sviluppi si compiaccia di vedere come il suo programma occupi meno risorse possibile, forse e' anche per quello che java e' meno usato del c++.

Un programma non deve occupare meno risorse possibile, ma deve fare il suo compito, e possibilmente prendendomi meno tempo possibile per scriverlo. Una volta che il programma fa il suo compito, perdere ulteriore tempo per fargli occupare meno risorse e' uno spreco di tempo che puo' essere usato per fare altro.

La risorsa piu' scarsa e' sempre il tempo del programmatore, non la CPU o la memoria o la banda.

fek
22-01-2008, 10:28
E i controlli sugli indici degli array non incidono sulle prestazioni?

Se un inner loop e' scritto in maniera furba, il JIT e' spesso in grado di togliere la maggior parte dei controlli sugli indici perche' sono garantiti essere entro i limiti dell'array.

thebol
22-01-2008, 10:46
Non conosco le specifiche esatte dell'allocatore di java, conosco quelle di .NET e assumiamo che siano almeno simili.

Gli oggetti sono allocati nello heap, la differenza e' l'algoritmo di allocazione: essendoci il GC tu non puoi fare free manuali, quindi non c'e' bisogno di cercare un blocco libero, il blocco libero e' sempre quello al quale punta top_of_stack (o buffer, o quello che e' nel caso particolare).

Quando entra in azione il GC, scorre tutti i blocchi allocati, marka quelli da liberare, poi ricompatta l'heap, aggiorna gli handle e aggiorna top_of_stack al primo blocco di memoria libero. Cosi' l'allocazione e' sempre immediata e non devi cercare un blocco libero.

si è piu o meno simile. In java ci sono 3 heap. Due che si rimpallano gli oggetti giovani quando cè un garbage collector su di loro(copiando solo quelli non da liberare, si ricompatta la memoria è si ottiene l'effetto stack che dicevi tu, non ci avevo pensato), e un heap più vecchio dove stanno gli oggetti più vecchi(quelli che sono sopravvisuti a n giri del GC).

poi cè forse cè un altro heap fra quelli giovani e quello vecchio, ma non ne sono sicuro.

fek
22-01-2008, 10:55
si è piu o meno simile. In java ci sono 3 heap. Due che si rimpallano gli oggetti giovani quando cè un garbage collector su di loro(copiando solo quelli non da liberare, si ricompatta la memoria è si ottiene l'effetto stack che dicevi tu, non ci avevo pensato), e un heap più vecchio dove stanno gli oggetti più vecchi(quelli che sono sopravvisuti a n giri del GC).

poi cè forse cè un altro heap fra quelli giovani e quello vecchio, ma non ne sono sicuro.

E' piu' o meno uguale in .NET. Il GC mi affascina, e' un'idea furbissima.

^TiGeRShArK^
22-01-2008, 11:57
Si' ma io ti parlo dell'ambito consumer, in quelle statistiche viene calcolato anche il settore aziendale.
In ambito aziendale java e' sicuramente molto usato, ma nella discussione si sta parlando del c++ e della possibilita' che venga rimpiazzato. Per fare una considerazione di questo tipo bisogna parlare soprattutto dell'ambito consumer che consiste nella maggior parte del mercato.

Java non puo' rimpiazzare il c++ o il c, per il semplice fatto che non e' possibile creare in java certi tipi di programmi, ad esempio quelli dove e' richiesto un accesso a basso livello, quelli dove e' richiesta un'alta velocita' di avvio, ma non solo.

Io programmo per hobby e figurati che la maggior parte delle volte uso addirittura Delphi o Lazarus, pero' sinceramente di java non mi ha mai convinto il fatto che se anche devi fare un programmino scemo da 20kb, devi caricare in memoria java.exe che occupa 30MB. Credo che chiunque sviluppi si compiaccia di vedere come il suo programma occupi meno risorse possibile, forse e' anche per quello che java e' meno usato del c++.
...e si vede....
Se ti pagassero per il lavoro che fai credo che la penseresti in maniera MOLTO diversa... :rolleyes:

cdimauro
22-01-2008, 12:03
Ma poi cosa vuoi che siano 30MB quando oggi i PC li vendono ormai con 2GB. Mah.

Male che vada con 20€ si aggiorna la memoria di un PC più vecchio e ci si toglie il pensiero...

Guille
22-01-2008, 12:45
E basta con questo mito che il C++ e' piu' o meno veloce di Java, perche' nel 99% dei casi non conta nulla e, sicuramente, per tutto il software che potete scrivere non conta assolutamente niente. Conta solo quanto tempo impiegate a scriverlo, e in C++ ne impiegate molto di piu'.

:mano:

tomminno
22-01-2008, 13:52
Se un inner loop e' scritto in maniera furba, il JIT e' spesso in grado di togliere la maggior parte dei controlli sugli indici perche' sono garantiti essere entro i limiti dell'array.

ho scaricato una versione dei sorgenti del .NET fornita da MS stessa.
http://www.microsoft.com/downloads/details.aspx?FamilyId=8C09FD61-3F26-4555-AE17-3121B4F51D4D&displaylang=en

Mi sembra che le inefficienze siano altrove.

PS Difficile scrivere il motore .NET senza il C++ ;)
PPSS A è praticamente tutto C con le classi, il C++ è usato solo come contenitore di codice C.

tomminno
22-01-2008, 13:54
La risorsa piu' scarsa e' sempre il tempo del programmatore, non la CPU o la memoria o la banda.

Dovendo analizzare 500GB di log giornalieri, la scelta è ricaduta sull'unico linguaggio possibile che non obbligasse a tenere una macchina superperformante con il collo tirato in vista di un incremento di traffico.

il tempo uomo lo impieghi una volta, il tempo macchina tutte le volte che esegui il programma.

xblitz
22-01-2008, 14:16
mamma mia vi invidio:
sieste su un altro pianeta a giudicare dalla mole di cose che scrivete (parlo da studente ITIS informatica del 4o anno :( ) cmq questa discussione mi ha fatto venire in mente un paio di domande:

cosa intendete quando parlate di ambiente enterprise?, nuove tecniche? e in che ambiti si usa?

come fate a dire che un programma closed source sia fatto in un certo linguaggio di programmazione (p.es il motore di .NET)?

ciao!

marko.fatto
22-01-2008, 14:43
mamma mia vi invidio:
sieste su un altro pianeta a giudicare dalla mole di cose che scrivete (parlo da studente ITIS informatica del 4o anno :( ) cmq questa discussione mi ha fatto venire in mente un paio di domande:

cosa intendete quando parlate di ambiente enterprise?, nuove tecniche? e in che ambiti si usa?

come fate a dire che un programma closed source sia fatto in un certo linguaggio di programmazione (p.es il motore di .NET)?

ciao!

qui:

ho scaricato una versione dei sorgenti del .NET fornita da MS stessa.
http://www.microsoft.com/downloads/details.aspx?FamilyId=8C09FD61-3F26-4555-AE17-3121B4F51D4D&displaylang=en

Mi sembra che le inefficienze siano altrove.

PS Difficile scrivere il motore .NET senza il C++ ;)
PPSS A è praticamente tutto C con le classi, il C++ è usato solo come contenitore di codice C.

fek
22-01-2008, 15:04
Dovendo analizzare 500GB di log giornalieri, la scelta è ricaduta sull'unico linguaggio possibile che non obbligasse a tenere una macchina superperformante con il collo tirato in vista di un incremento di traffico.

Hai fatto il profiling di quell'applicazione? Stai cercando di convincermi che il tempo CPU e' equamente diviso su tutto il codice e non e' concentrato solo in pochi inner loop? Oppure hai solo tirato ad indovinare dove il tempo macchina sarebbe stato speso?

Ovvero, hai speso piu' tempo uomo di quanto sarebbe necessario scrivendo l'applicazione ad alto livello e solo gli inner loop a basso livello. Tempo che avresti potuto usare per fare piu' profiling e, eventualmente trovare algoritmi migliori.
Le ottimizzazioni migliori sono sempre a livello algoritmico.


il tempo uomo lo impieghi una volta, il tempo macchina tutte le volte che esegui il programma.

Il tempo macchina puo' essere diminuito aggiornando l'hardware, il tempo uomo non puo' essere mai recuperato: una volta speso, e' tempo che non puo' essere usato per fare altro.

thebol
22-01-2008, 15:04
ho scaricato una versione dei sorgenti del .NET fornita da MS stessa.
http://www.microsoft.com/downloads/details.aspx?FamilyId=8C09FD61-3F26-4555-AE17-3121B4F51D4D&displaylang=en

Mi sembra che le inefficienze siano altrove.

PS Difficile scrivere il motore .NET senza il C++ ;)
PPSS A è praticamente tutto C con le classi, il C++ è usato solo come contenitore di codice C.
manco la jvm è fatta in java. Neanche tutte le api sono pure java.

thebol
22-01-2008, 15:13
Hai fatto il profiling di quell'applicazione? Stai cercando di convincermi che il tempo CPU e' equamente diviso su tutto il codice e non e' concentrato solo in pochi inner loop? Oppure hai solo tirato ad indovinare dove il tempo macchina sarebbe stato speso?

Ovvero, hai speso piu' tempo uomo di quanto sarebbe necessario scrivendo l'applicazione ad alto livello e solo gli inner loop a basso livello. Tempo che avresti potuto usare per fare piu' profiling e, eventualmente trovare algoritmi migliori.
Le ottimizzazioni migliori sono sempre a livello algoritmico.



Il tempo macchina puo' essere diminuito aggiornando l'hardware, il tempo uomo non puo' essere mai recuperato: una volta speso, e' tempo che non puo' essere usato per fare altro.

forse (e dico forse) per un compito banale come può essere l'analisi del log(ma dipende dal log e dall'analisi) vale la pena fare una prova con un linguaggio di alto livello (Ruby, Pyton, Java, Ruby) e poi se si vede che l'analisi è cpu bound(perchè leggendo il log da hd, si rischia di essere IO bound) passare direttamente a c/c++ piuttosto che stare a scrivere un pezzo in un linguaggio, un pezzo in un altro, e poi fare un ponte.

Sempre che sull'analisi dei log non ci fai un applicazione complessa. Allora può aver senso fare il "parser" del log in c, e la reportistica in JAVA/.NET/Pyton


ps.avevo fatto una volta un parser dei log in ruby. Non conoscendo il linguaggio(e basandomi su roba trovata sul web) lo feci in qualche ora,e non superava le 70 righe di codice...però era lento da morire :asd: era colpa del parser xml che usava..
Però come rapidità di sviluppo è allucinante

fek
22-01-2008, 15:21
forse (e dico forse) per un compito banale come può essere l'analisi del log(ma dipende dal log e dall'analisi) vale la pena fare una prova con un linguaggio di alto livello (Ruby, Pyton, Java, Ruby) e poi se si vede che l'analisi è cpu bound(perchè leggendo il log da hd, si rischia di essere IO bound) passare direttamente a c/c++ piuttosto che stare a scrivere un pezzo in un linguaggio, un pezzo in un altro, e poi fare un ponte.

Esatto, a meno di analisi MOLTO complesse dei log, uno scenario CPU bound mi pare molto improbabile.


ps.avevo fatto una volta un parser dei log in ruby. Non conoscendo il linguaggio(e basandomi su roba trovata sul web) lo feci in qualche ora,e non superava le 70 righe di codice...però era lento da morire :asd: era colpa del parser xml che usava..
Però come rapidità di sviluppo è allucinante

E con qualche altra oretta di lavoro probabilmente avresti potuto interfacciare una veloce libreria xml al parser scritto in ruby e risolto anche quel problema.

thebol
22-01-2008, 15:48
Esatto, a meno di analisi MOLTO complesse dei log, uno scenario CPU bound mi pare molto improbabile.




E con qualche altra oretta di lavoro probabilmente avresti potuto interfacciare una veloce libreria xml al parser scritto in ruby e risolto anche quel problema.

c'era una soluzione su linux, per usare un altra libreria piu veloce. Ma su windows non era disponibile(si poteva compilare con cgwyn, ma non ho avuto lo sbattimento..)

tomminno
22-01-2008, 16:25
Hai fatto il profiling di quell'applicazione? Stai cercando di convincermi che il tempo CPU e' equamente diviso su tutto il codice e non e' concentrato solo in pochi inner loop? Oppure hai solo tirato ad indovinare dove il tempo macchina sarebbe stato speso?


Testati con dati reali diversi applicativi disponibili in commercio, l'unico che riuscirebbe ad analizzare il log di un giorno in meno di una giornata è quello scritto in C.
Ho personalizzato il risultato estetico e migliorato alcune parti dell'analisi.


Ovvero, hai speso piu' tempo uomo di quanto sarebbe necessario scrivendo l'applicazione ad alto livello e solo gli inner loop a basso livello. Tempo che avresti potuto usare per fare piu' profiling e, eventualmente trovare algoritmi migliori.
Le ottimizzazioni migliori sono sempre a livello algoritmico.


Evidentemente quello in C usava algoritmi migliori, visto che ha prestazioni 10 volte superiori agli altri.


Il tempo macchina puo' essere diminuito aggiornando l'hardware, il tempo uomo non puo' essere mai recuperato: una volta speso, e' tempo che non puo' essere usato per fare altro.

Quando il costo di una macchina supera lo stipendio annuale di una persona merita spendere qualche giorno di lavoro per testare e adattare quello che c'è già in circolazione.
E se quello che risulta più veloce è quello in C meglio perdere pochi giorni di lavoro per testarlo e adattarlo alle esigenze, piuttosto che perdere poche ore per adattare uno scritto con linguaggio di alto livello per poi fornire un disservizio a migliaia di persone.

tomminno
22-01-2008, 16:27
Esatto, a meno di analisi MOLTO complesse dei log, uno scenario CPU bound mi pare molto improbabile.


Analisi complesse no, ma se la quantità di log da analizzare è decisamente elevata (500GB al giorno e in continua crescita) ti ritrovi comunque CPU bounded.

fek
22-01-2008, 16:41
Testati con dati reali diversi applicativi disponibili in commercio, l'unico che riuscirebbe ad analizzare il log di un giorno in meno di una giornata è quello scritto in C.
Ho personalizzato il risultato estetico e migliorato alcune parti dell'analisi.

Non l'hai scritto tu, questo e' un discorso completamente differente :)

Quando il costo di una macchina supera lo stipendio annuale di una persona merita spendere qualche giorno di lavoro per testare e adattare quello che c'è già in circolazione.


Dubito fortumente che l'upgrade di una macchina possa costare 20k euro.


E se quello che risulta più veloce è quello in C meglio perdere pochi giorni di lavoro per testarlo e adattarlo alle esigenze, piuttosto che perdere poche ore per adattare uno scritto con linguaggio di alto livello per poi fornire un disservizio a migliaia di persone.

Qui non si stava parlando di una soluzione gia' scritta da scegliere, dove conta solo quale soluzione offre le prestazioni migliori, non il linguaggio nel quale e' scritta.
Si sta parlando di quale linguaggio scegliere per scrivere un software, e la scelta migliore non e' sicuramente il C, ma un linguaggio ad alto livello, per poi, eventualmente, riscrivere i colli di bottiglia in un linguaggio a basso livello.

Hai semplicemente portato un esempio fuorviante. Il disservizio a migliaia di persone si porta quando si ritarda di mesi il prodotto perche' ci si incaponisce ancora a scrivere in C.

Analisi complesse no, ma se la quantità di log da analizzare è decisamente elevata (500GB al giorno e in continua crescita) ti ritrovi comunque CPU bounded.

Se la quantita' di log e' elevata e l'analisi semplice, il software e' sicuramente io-bound (non bounded), quindi le prestazioni del linguaggio di programmazione non possono fare alcuna differenza; cio' che conta saranno gli algoritmi di cacheing e analisi. E in un linguaggio ad alto livello e' piu' semplice scrivere algoritmi piu' complessi e performanti.

AnonimoVeneziano
22-01-2008, 16:41
Mmm, credo c'entri poco il CPUBound con la dimensione del LOG, anzi, all'aumentare del log dovrebbe essere sempre più IOBound, ma credo dipenda anche dal tipo di analisi che si fa sul log , per curiosità si può sapere che tipo di analisi è?

Comunque è vero , come dice fek, che le prestazioni sono molto più spesso determinate dall'algoritmo che si usa nella risoluzione del problema piuttosto che dal linguaggio in cui si scrive il programma. Se poi si parla di latenza è un altro paio di maniche , ma per quanto riguarda le prestazioni pure del programma è l'algoritmo che fa la differenza. Ad esempio tempo fa ho scritto un pezzo di codice che praticamente rilevava la presenza di file duplicati in un filesystem. Cambiando da un algoritmo basato su una lista (implementazione iniziale) ad un algoritmo basato su hashmaps (implementazione finale) le prestazioni sono migliorate infinitamente. Questo è per dire che per fare il confronto tra due programmi che eseguono il medesimo compito, uno scritto in C e l'altro in Java, è necessario essere sicuri che implementino gli stessi algoritmi , altrimenti potrebbe essere che per uno è stato scelto un algoritmo migliore rispetto all'altro.

Ciao

tomminno
22-01-2008, 17:28
Non l'hai scritto tu, questo e' un discorso completamente differente :)


E' comunque un programma scritto in C che ha scritto qualcun altro, così come gli equivalenti in altri linguaggi.
Tra l'altro di Java o C# non c'è traccia nel settore.


Dubito fortumente che l'upgrade di una macchina possa costare 20k euro.


Le cifre sono più o meno quelle.


Qui non si stava parlando di una soluzione gia' scritta da scegliere, dove conta solo quale soluzione offre le prestazioni migliori, non il linguaggio nel quale e' scritta.


Ma guarda caso nonostante la relativamente ampia scelta, le prestazioni ricadono sempre a favore del C, se avessi dovuto pagare qualcuno per fare quel software è inutile che me lo completi in una settimana se poi non me ne faccio di niente.


Si sta parlando di quale linguaggio scegliere per scrivere un software, e la scelta migliore non e' sicuramente il C, ma un linguaggio ad alto livello, per poi, eventualmente, riscrivere i colli di bottiglia in un linguaggio a basso livello.


Perchè nessuno fa così?
Solo che non rispetteresti i requisiti funzionali, ovvero di avere delle statistiche giornaliere, visto che la macchina deputata all'estrazione delle statistiche non riuscirebbe ad eseguire in 24h.


Hai semplicemente portato un esempio fuorviante. Il disservizio a migliaia di persone si porta quando si ritarda di mesi il prodotto perche' ci si incaponisce ancora a scrivere in C.


Invece poi fornisci il disservizio perchè i clienti ritengono lento il software, ma tanto l'opinione del cliente non conta, l'importante è che il prodotto sia in vendita.

Si sposta l'onere del tempo dal programmatore al cliente e a me da cliente non piace per niente questa filosofia il tempo che non perde il programmatore lo perdo io utente (moltiplicato cento visto che poi finisco per usare il software tutti i giorni).


Se la quantita' di log e' elevata e l'analisi semplice, il software e' sicuramente io-bound (non bounded), quindi le prestazioni del linguaggio di programmazione non possono fare alcuna differenza; cio' che conta saranno gli algoritmi di cacheing e analisi. E in un linguaggio ad alto livello e' piu' semplice scrivere algoritmi piu' complessi e performanti.

L'applicazione è CPU-bound in quanto l'utilizzo della CPU prevale su quello dei dischi (e perchè scala bene all'aumentare della potenza della CPU).

tomminno
22-01-2008, 17:33
Mmm, credo c'entri poco il CPUBound con la dimensione del LOG, anzi, all'aumentare del log dovrebbe essere sempre più IOBound, ma credo dipenda anche dal tipo di analisi che si fa sul log , per curiosità si può sapere che tipo di analisi è?


banali statistiche dei log di (500) server (Apache e IIS) usando Webalizer 3.


Comunque è vero , come dice fek, che le prestazioni sono molto più spesso determinate dall'algoritmo che si usa nella risoluzione del problema piuttosto che dal linguaggio in cui si scrive il programma. Se poi si parla di latenza è un altro paio di maniche , ma per quanto riguarda le prestazioni pure del programma è l'algoritmo che fa la differenza. Ad esempio tempo fa ho scritto un pezzo di codice che praticamente rilevava la presenza di file duplicati in un filesystem. Cambiando da un algoritmo basato su una lista (implementazione iniziale) ad un algoritmo basato su hashmaps (implementazione finale) le prestazioni sono migliorate infinitamente. Questo è per dire che per fare il confronto tra due programmi che eseguono il medesimo compito, uno scritto in C e l'altro in Java, è necessario essere sicuri che implementino gli stessi algoritmi , altrimenti potrebbe essere che per uno è stato scelto un algoritmo migliore rispetto all'altro.

Ciao

Io nel software ho provato a cambiare alcune parti usando C++ e STL invece del C con le classi del sorgente originario.
La lunghezza del codice si è ridotta notevolmente, tutto fantastico, ma il risultato è stato più lento dell'orginale che andava di puntatori.

fek
22-01-2008, 17:35
E' comunque un programma scritto in C che ha scritto qualcun altro, così come gli equivalenti in altri linguaggi.
Tra l'altro di Java o C# non c'è traccia nel settore.


Quel qualcun altro dal punto di vista della produttivita' sicuramente non ha fatto la scelta migliore, ma questo discorso esula dall'argomento.


Ma guarda caso nonostante la relativamente ampia scelta, le prestazioni ricadono sempre a favore del C, se avessi dovuto pagare qualcuno per fare quel software è inutile che me lo completi in una settimana se poi non me ne faccio di niente.

Come ho gia' scritto, scrivendo un software di questo tipo in un linguaggio ad alto livello e, eventualmente, ottimizzando gli inner loop puoi avere una soluzione in un tempo nettamente inferiore e piu' performante che scrivendola da zero in C.



Perchè nessuno fa così?


La stragrande maggioranza del software enterprise e' scritto come dico io.


Invece poi fornisci il disservizio perchè i clienti ritengono lento il software, ma tanto l'opinione del cliente non conta, l'importante è che il prodotto sia in vendita.

Come ti e' stato gia' detto, in una situazione IO bound come quella, il linguaggio conta poco per le prestazioni finali.
Continui a ignorare quello che scrivo: in un linguaggio ad alto livello puoi avere quel prodotto con le prestazioni richieste dal cliente in un tempo di produzione di gran lunga inferiore.

Si sposta l'onere del tempo dal programmatore al cliente

Non ho mai affermato una cosa del genere, anzi, l'esatto contrario.

L'applicazione è CPU-bound in quanto l'utilizzo della CPU prevale su quello dei dischi (e perchè scala bene all'aumentare della potenza della CPU).

Nello scenario che hai descritto quello che scrivi e' quasi sicuramente falso.

Io nel software ho provato a cambiare alcune parti usando C++ e STL invece del C con le classi del sorgente originario.
La lunghezza del codice si è ridotta notevolmente, tutto fantastico, ma il risultato è stato più lento dell'orginale che andava di puntatori.

Il fatto che tu abbia pessimizzato quella soluzione non vuol dire che qualcun altro non possa usare algoritmi migliori e implementarli meglio in un linguaggio ad alto livello.

In generale stai commettendo un errore piuttosto banale, perche' dai per scontato che la differenza di prestazioni fra il C/C++ (ti ricordo che fra i due non c'e' differenza perche' il secondo e' un superset del primo) ed un linguaggio ad alto livello sia addirittura di ordini di grandezza. Questo tuo assunto e' stato dimostrato falso ampiamente. Dove questa differenza prestazionale puo' esserci e' sicuramente entro il 10% per codice scritto bene. Differenze di ordini di grandezza sono sempre algoritmiche.

^TiGeRShArK^
22-01-2008, 19:24
Dubito fortumente che l'upgrade di una macchina possa costare 20k euro.

20k euro? :mbe:
mi sa che il costo per l'azienda, almeno qua in italia, si dovrebbe aggirare almeno intorno al doppio di quella cifra per un programmatore di basso livello che prende 20k euro lordi....

marco.r
22-01-2008, 23:02
Dovendo analizzare 500GB di log giornalieri, la scelta è ricaduta sull'unico linguaggio possibile che non obbligasse a tenere una macchina superperformante con il collo tirato in vista di un incremento di traffico.

Ma i log in che formato sono ? Se fossero scritti in un linguaggio umano (non XML giusto per capirsi) non dovresti avere grossi problemi con linguaggi di alto livello, tanto piu' che le librerie per il parsing sono generalmente molto ottimizzate. Anzi in alcuni casi vanno pure meglio della loro controparte C (il motore di regex di Perl ad esempio ha anni di ottimizzazioni alle spalle).

Per inciso, qualcuno si e'divertito (http://www.tbray.org/ongoing/When/200x/2007/09/20/Wide-Finder) a vedere come si potessero applicare diversi linguaggi per l'analisi (in tempo reale) di log di Apache su di una macchina multicore. Non e' il tuo stesso caso, cmq potresti trovare qualche spunto interessante.

cdimauro
23-01-2008, 07:50
Interessante il test di cui parli:

It took this code 7½ seconds of CPU, 13½ seconds elapsed, to process a million and change records, a quarter-gig or so, on last year’s 1.67Ghz PowerBook. A Perl version was approximately twice as fast.

con Ruby, che non è che sia una scheggia come linguaggio.

Con una versione JIT-ed sarebbe andato decisamente meglio, ma comunque già così, "a naso", mi sembra che avrebbe potuto processare tranquillamente 500GB di log in molto meno di un giorno, e su una macchina da quattro soldi che non è certo un fulmine... ;)

tomminno
23-01-2008, 08:05
Ma i log in che formato sono ? Se fossero scritti in un linguaggio umano (non XML giusto per capirsi) non dovresti avere grossi problemi con linguaggi di alto livello, tanto piu' che le librerie per il parsing sono generalmente molto ottimizzate. Anzi in alcuni casi vanno pure meglio della loro controparte C (il motore di regex di Perl ad esempio ha anni di ottimizzazioni alle spalle).


I log sono quelli standard di Apache e IIS, puro testo separato da spazi.
Il problema non è parserizzarli (che è banale) ma tirare fuori statistiche significative.
Guarda caso AWStat che è in perl e usa proprio le espressioni regolari non analizza più di 6000log/secondo, mentre Webalizer arriva a 50000 log/secondo, con il vantaggio per Webalizer di essere completamente configurabile.


Per inciso, qualcuno si e'divertito (http://www.tbray.org/ongoing/When/200x/2007/09/20/Wide-Finder) a vedere come si potessero applicare diversi linguaggi per l'analisi (in tempo reale) di log di Apache su di una macchina multicore. Non e' il tuo stesso caso, cmq potresti trovare qualche spunto interessante.

Ma quel codice praticamente non fa niente.

cdimauro
23-01-2008, 08:07
Beh, ma non c'hai nemmeno detto che tipo di statistiche dovevi tirare fuori.

Di per sé, come vedi, l'operazione di parsing (che è strettamente IO-bound) può essere realizzata molto velocemente su macchine abbastanza datate.

I calcoli generalmente sono CPU-bound, ma di quelli che ti servirebbero non si sa nulla...

fek
23-01-2008, 09:44
Interessante il test di cui parli:

It took this code 7½ seconds of CPU, 13½ seconds elapsed, to process a million and change records, a quarter-gig or so, on last year’s 1.67Ghz PowerBook. A Perl version was approximately twice as fast.

con Ruby, che non è che sia una scheggia come linguaggio.

Con una versione JIT-ed sarebbe andato decisamente meglio, ma comunque già così, "a naso", mi sembra che avrebbe potuto processare tranquillamente 500GB di log in molto meno di un giorno, e su una macchina da quattro soldi che non è certo un fulmine... ;)

Ma infatti quei dati mi sembravano molto farlocchi e portati per dimostrare una tesi insostenibile ;)

cionci
23-01-2008, 09:51
Comunque ritornando a quel ciuccia risorse di Azureus...ho trovato un client che funziona molto meglio e consuma meno risorse: Deluge (scritto in Python per la felicità di cdimauro).

cdimauro
23-01-2008, 10:00
Non mi meraviglia. :) Considera che BitTorrent è stato realizzato proprio in Python... :p

cionci
23-01-2008, 10:08
In ogni caso il rapporto fra utenti uTorrent e Azureus è di almeno 4-5 a 1, di 2-3 a 1 rispetto a BitTorrent classico, almeno secondo quanto riportato da Deluge.

k0nt3
23-01-2008, 10:32
Comunque ritornando a quel ciuccia risorse di Azureus...ho trovato un client che funziona molto meglio e consuma meno risorse: Deluge (scritto in Python per la felicità di cdimauro).

com'è confronto a ktorrent (scritto in C++ per l'infelicità di cdimauro :read: )?

cionci
23-01-2008, 10:35
com'è confronto a ktorrent (scritto in C++ per l'infelicità di cdimauro :read: )?
La percentuale di KTorrent è infinitesimale, visto che gira solo su KDE, mentre Azureus è multipiattaforma e uTorrent è solo per Win.
Ora uTorrent:Azureus oscilla fra 10-17:1 ;)

k0nt3
23-01-2008, 10:40
La percentuale di KTorrent è infinitesimale, visto che gira solo su KDE, mentre Azureus è multipiattaforma e uTorrent è solo per Win.

ah non sapevo che deluge c'era anche per windows! :p
comunque, tra i client per linux, ktorrent è molto diffuso. quando uscirà la versione per windows e osx allora avrà senso un confronto :D

^TiGeRShArK^
23-01-2008, 21:45
La percentuale di KTorrent è infinitesimale, visto che gira solo su KDE, mentre Azureus è multipiattaforma e uTorrent è solo per Win.
Ora uTorrent:Azureus oscilla fra 10-17:1 ;)

..ovviamente stai considerando tipologie parecchio diverse di file spero..
altrimenti le tue statistiche sono esattametne inutili dato che, come ho riportato prima, anche l'infinitesimale ktorrent, in certe tipologie di file, risulta essere molto diffuso ;)
cmq io in media ho vista uno superiorità per utorrent, ma non certo dell'ordine di 10-17:1.

cionci
23-01-2008, 22:56
..ovviamente stai considerando tipologie parecchio diverse di file spero..
Ho semplicemente considerato la tipologia di file più scaricata :D Ed indipendente dalla piattaforma.
E' chiaro che se si va a considerare una iso Debian KTorrent e Azureus sono molto diffusi oppure, se si va a considerare un gioco, il più diffuso sarà uTorrent.