PDA

View Full Version : Open JDK: Oracle e Apple assieme per Java su Mac OS X


Redazione di Hardware Upg
12-11-2010, 15:57
Link alla notizia: http://www.hwfiles.it/news/open-jdk-oracle-e-apple-assieme-per-java-su-mac-os-x_34402.html

Oracle e Apple annunciano congiuntamente il progetto Open JDK che permetterà di portare Java SE7 su Mac OS X

Click sul link per visualizzare la notizia.

marczxc
12-11-2010, 16:41
ad ogni modo Apple ha deciso di non accettare nel Mac App Store applicazioni Java. (giustamente, aggiungerei)

pabloski
12-11-2010, 17:29
giustamente? e perchè mai? cos'ha java che non va? android usa solo java per i suoi programmi e guarda come funziona

semplicemente Steve non vuole competitor nel suo walled garden

v1doc
12-11-2010, 17:43
giustamente? e perchè mai? cos'ha java che non va? android usa solo java per i suoi programmi e guarda come funziona

semplicemente Steve non vuole competitor nel suo walled garden

Dimentichi che Android usa il Java di Google, NON il Java di Oracle, è questo il motivo per cui le applicazioni girano bene.
Oracle, per motivi che esulano dalla mia comprensione, ha denunciato Google, quindi il futuro di Java su Android è quantomeno incerto.

manowar84
12-11-2010, 17:51
Dimentichi che Android usa il Java di Google, NON il Java di Oracle, è questo il motivo per cui le applicazioni girano bene.
Oracle, per motivi che esulano dalla mia comprensione, ha denunciato Google, quindi il futuro di Java su Android è quantomeno incerto.

*che io sappia* viene usato java come sintassi ma non c'è nessuna jvm sotto android, viene usata la Dalvik virtual machine che è completamente diversa da quella oracle. Oracle ha denunciato google per 7 brevetti, cosa che succede di continuo al giorno oggi (apple denuncia htc, htc denuncia motorola, motorola denuncia apple, apple denuncia samsung bla bla bla bla bla bla bla^n) quindi credo che non ci sia nulla da temere a riguardo :p

marczxc
12-11-2010, 17:54
giustamente? e perchè mai? cos'ha java che non va? android usa solo java per i suoi programmi e guarda come funziona

semplicemente Steve non vuole competitor nel suo walled garden

mai sentito parlare di JVM? :D

Gurzo2007
12-11-2010, 22:25
@marczxc

peccato che google abbia fatto una sua jvm...e infatti una cosa è il linguaggio e una cosa la sua implementazione...

AleLinuxBSD
13-11-2010, 09:26
Penso sia una notizia positiva per diversi motivi e non soltanto per quello più evidente relativo all'ambiente mac.
Intanto il progetto OpenJDK, grazie a questa decisione ed all'ingresso pure Ibm (che interessa più lato Pc), assume un ruolo di maggiore rilevanza che lascia ben sperare per il futuro.
L'idea di sviluppare basandosi su openjdk anziché sul java di oracle mi intriga non poco (penso che lo stesso pensiero sia presente in molti), resta da vedere a che punto siamo, specie in ambienti complessi con integrazione di diversi componenti ed infrastrutture basate invece sull'ambiente ufficiale.

sirus
13-11-2010, 12:38
Link alla notizia: http://www.hwfiles.it/news/open-jdk-oracle-e-apple-assieme-per-java-su-mac-os-x_34402.html

Oracle e Apple annunciano congiuntamente il progetto Open JDK che permetterà di portare Java SE7 su Mac OS X

Click sul link per visualizzare la notizia.
Tutto è bene quel che finisce bene. :)

ad ogni modo Apple ha deciso di non accettare nel Mac App Store applicazioni Java. (giustamente, aggiungerei)
Perché?!

mai sentito parlare di JVM? :D
Si, e quindi?!

Dimentichi che Android usa il Java di Google, NON il Java di Oracle, è questo il motivo per cui le applicazioni girano bene.
Oracle, per motivi che esulano dalla mia comprensione, ha denunciato Google, quindi il futuro di Java su Android è quantomeno incerto.
Stai per caso dicendo che tutte quelle applicazioni (web e non) che nel mondo (e sono una moltitudine) fanno uso di Java e della JVM non sono valide perché appunto utilizzano la JVM sviluppata prima da Sun ed ora da Oracle?! :muro:

*che io sappia* viene usato java come sintassi ma non c'è nessuna jvm sotto android, viene usata la Dalvik virtual machine che è completamente diversa da quella oracle. Oracle ha denunciato google per 7 brevetti, cosa che succede di continuo al giorno oggi (apple denuncia htc, htc denuncia motorola, motorola denuncia apple, apple denuncia samsung bla bla bla bla bla bla bla^n) quindi credo che non ci sia nulla da temere a riguardo :p
Da quanto mi è parso di capire, i brevetti che coprono Java vengono "concessi in licenza" nel momento in cui tutta la specifica di Java (non come linguaggio ma come piattaforma) viene implementata "per filo e per segno". Questo Google non lo ha fatto e quindi i brevetti non sono automaticamente "concessi in licenza" (gratuita) ma Google dovrebbe chiedere la licenza d'uso ad Oracle.

PS: temo che in questa vicenda di brevetti sia Oracle ad avere ragione.

marczxc
13-11-2010, 12:48
Si, e quindi?!

quindi sai bene che i programmi dimezzano le loro prestazioni

M3ne
13-11-2010, 12:57
Il vantaggio ad usare Java è la possibilità di usare librerie scritte per PC anche sui terminali. un esempio sono le librerie matematiche avanzate, in poco tempo si può realizzare uno strumento di calcolo molto accessoriato. Pensare di usare un linguaggio nuovo e poco usato è solo estremamente antieconomico per gli sviluppatori.

Apple non implementa la JVM solo perchè è un modo per aggirare lo store.

WarDuck
13-11-2010, 13:01
quindi sai bene che i programmi dimezzano le loro prestazioni

Questo dipende:

a) da come è fatto il programma
b) dall'implementazione della virtual machine e del compilatore JIT.

Detto ciò il vantaggio di usare Java sta proprio nel linguaggio Java, che si colloca a più alto livello rispetto a C++/ObjectiveC.

M3ne
13-11-2010, 13:08
quindi sai bene che i programmi dimezzano le loro prestazioni
Ti consiglio di seguire qualche corso universitario per capire meglio come funziona la faccenda Java... Non è tanto semplice. Per esempio, quanto crei array tutti viene inserito il valore di default ad ogni cella, questo costa tantissimo rispetto al C che non lo fa in automatico, certo è che puoi scommetterci che se devi farlo tu a mano quasi sicuramente

marczxc
13-11-2010, 13:27
Questo dipende:

a) da come è fatto il programma
b) dall'implementazione della virtual machine e del compilatore JIT.

Detto ciò il vantaggio di usare Java sta proprio nel linguaggio Java, che si colloca a più alto livello rispetto a C++/ObjectiveC.
sono assolutamente d'accordo, infatti trovo che programmare in Java sia moolto più facile rispetto al C (o all'Obj C, che però sto studiando solo da poco)
Ti consiglio di seguire qualche corso universitario per capire meglio come funziona la faccenda Java... Non è tanto semplice. Per esempio, quanto crei array tutti viene inserito il valore di default ad ogni cella, questo costa tantissimo rispetto al C che non lo fa in automatico, certo è che puoi scommetterci che se devi farlo tu a mano quasi sicuramente
ti devo postare il mio libretto universitario? :rolleyes:
non è solo la questione dell'inizializzazione, ma è proprio la JVM! alla fin fine è pur sempre una macchina virtuale con tutti i suoi pro e contro, e tra i contro il primo tra tutti è la pesantezza! su questo mi sembra che non ci sia molto da discutere

sirus
13-11-2010, 13:29
quindi sai bene che i programmi dimezzano le loro prestazioni
:rotfl:

marczxc
13-11-2010, 13:38
:rotfl:

scusa stai per caso cercando flames?

sirus
13-11-2010, 13:51
scusa stai per caso cercando flames?
Assolutamente no, sto solo cercando di dirti che quello che affermi era verissimo quando le virtual machine (e Java nella fattispecie) erano agli inizi.

Ovviamente esistono delle classi di programmi che sono tutt'ora più veloci se implementate in C/C++ (non è detto che questo non cambi nel futuro); tuttavia, potresti sorprenderti di quanto siano comuni quei programmi che possono trarre vantaggio dalla compilazione JIT messa a disposizione dalle moderne virtual machine che rendono programmi scritti in Java (ed in altri linguaggi che si appoggiano sulle virtual machine) persino più veloci del codice nativo prodotto da un compilatore C/C++. ;)

marczxc
13-11-2010, 14:00
Assolutamente no, sto solo cercando di dirti che quello che affermi era verissimo quando le virtual machine (e Java nella fattispecie) erano agli inizi.

Ovviamente esistono delle classi di programmi che sono tutt'ora più veloci se implementate in C/C++ (non è detto che questo non cambi nel futuro); tuttavia, potresti sorprenderti di quanto siano comuni quei programmi che possono trarre vantaggio dalla compilazione JIT messa a disposizione dalle moderne virtual machine che rendono programmi scritti in Java (ed in altri linguaggi che si appoggiano sulle virtual machine) persino più veloci del codice nativo prodotto da un compilatore C/C++. ;)

io parlo per esperienza in quello che ho fatto fin'ora! ho creato un'applicazione per la gestione di varie sincronizzazioni tra 2 cartelle. il codice l'ho riscritto 2 volte, prima in Java e ora lo sto realizzando in C. risultato? quello in Java è molto meno performante di quello in C.

Da Wikipedia a proposito della da te citata compilazione JIT:
"Questi accorgimenti [ovvero la compilazione just in time], a prezzo di una piccola attesa in fase di lancio del programma, permettono di avere delle applicazioni Java decisamente più veloci e leggere. Tuttavia, anche così Java resta un linguaggio meno efficiente dei linguaggi propriamente compilati come il C++, scontando il fatto di possedere degli strati di astrazione in più, e di implementare una serie di automatismi, come il garbage collector, che se da un lato fanno risparmiare tempo ed errori in fase di sviluppo dei programmi, dall'altro consumano memoria e tempo di CPU in fase di esecuzione del programma finito."

Poi sono il primo a dire che automatismi come il garbage collector, inizializzazione ecc fanno risparmiare molto tempo (e sangue) a noi programmatori, però è un dato di fatto che dobbiamo rinunciare alle prestazioni.

FabryHw
13-11-2010, 15:09
@marczxc

peccato che google abbia fatto una sua jvm...e infatti una cosa è il linguaggio e una cosa la sua implementazione...

Il lato Java di Android (perché Android è anche un OS con kernel Linux) è di fatto un Java 1.5 con un 70-80% di librerie condivise / compatibili con quelle Sun + nuove librerie di Google + una nuova vm (Dalvik) ottimizzata per dispositivi a basse risorse e con una maggiore integrazione con il nucleo linux.

Molti programmi o librerie Java possono essere semplicemente tradotti di formato (necessario solo perché Dalvik non esegue il bytecode Java ma un suo bytecode diverso) per girare su Android senza dover modificare una riga di codice (grazie a quel 70-80% di compatibilità).

M3ne
13-11-2010, 15:12
ti devo postare il mio libretto universitario? :rolleyes:


Allora sono 2 le cose possibili:

1-> google scrive il codice migliore del mondo

2-> apple, Nokia, Microsoft, i programmatori di linux, la stessa Sun(Oracle) ecc. scrivono porcheria dalla mattina alla sera...

se java è tanto lento come fai a fare un sistema tanto reattivo?

Secondo me esageri un po'... tutto qua.

FabryHw
13-11-2010, 15:19
io parlo per esperienza in quello che ho fatto fin'ora! ho creato un'applicazione per la gestione di varie sincronizzazioni tra 2 cartelle. il codice l'ho riscritto 2 volte, prima in Java e ora lo sto realizzando in C. risultato? quello in Java è molto meno performante di quello in C.

Poi sono il primo a dire che automatismi come il garbage collector, inizializzazione ecc fanno risparmiare molto tempo (e sangue) a noi programmatori, però è un dato di fatto che dobbiamo rinunciare alle prestazioni.

Hai rinunciato alle prestazioni anche usando il C, potevi farlo in assembler :D.

Questa è una provocazione solo per dire che la tua affermazione è un po' troppo forte e non sempre vera ma dualmente neanche sempre falsa.

Ci sono contesti in cui C/C++ sono più veloci (ed in alcuni casi molto più veloci), ma in genere le prestazioni dei 2 linguaggi (C++ vs Java) sono molto simili tra loro con casi non troppo rari in cui Java stesso è di gran lunga più veloce.

Se il programmatore C++ non sa perfettamente quello che fa e non conosce bene le opzioni del proprio compilatore, non mi stupirei che la versione Java nel tempo (il JIT interviene sempre più pesantemente più il programma continua a girare ed a fare le sue operazioni) diventi più veloce dell'equivalente C++

sirus
13-11-2010, 16:07
io parlo per esperienza in quello che ho fatto fin'ora! ho creato un'applicazione per la gestione di varie sincronizzazioni tra 2 cartelle. il codice l'ho riscritto 2 volte, prima in Java e ora lo sto realizzando in C. risultato? quello in Java è moltomeno performante di quello in C.

...

Poi sono il primo a dire che automatismi come il garbage collector, inizializzazione ecc fanno risparmiare molto tempo (e sangue) a noi programmatori, però è un dato di fatto che dobbiamo rinunciare alle prestazioni.
Se la versione in C è molto più veloce di quella in Java e l'unica cosa che fa il programma è sincronizzare 2 directory direi che non è normale, non è uno degli ambiti in cui un programma Java è decisamente più lento dell'equivalente in C.

Non è solo il garbage collector, è tutto quel codice che il programmatore non vede che viene inserito quando si utilizza una classe Java (banalità, un vector) e che per negligenza non viene inserito nell'equivalente programma in C; queste piccole cose che garantiscono il corretto funzionamento del programma anche in condizioni anomale fanno la differenza e non permettono di effettuare una comparazione tra un programma Java ed il suo "equivalente" in C.

PS: il garbage collector può essere più efficiente della gestione manuale della memoria non momento in cui quanto è in grado di "schedulare" le operazioni di liberazione della memoria. Giusto per citare una fonte, questo (http://www.ibm.com/developerworks/java/library/j-jtp09275.html?ca=dgr-jw22JavaUrbanLegends) articolo è un po' vecchio ma è interessante. Da notare come la situazione sia ulteriormente migliorata. ;)

manowar84
13-11-2010, 16:11
lettura datata ma interessante: http://www.idiom.com/~zilla/Computer/javaCbenchmark.html :)

marczxc
13-11-2010, 16:13
Secondo me esageri un po'... tutto qua.

probabilmente si ;) ma non parlo nemmeno a vanvera, visto che wiki dice le mie stesse cose.

sirus
13-11-2010, 16:31
probabilmente si ;) ma non parlo nemmeno a vanvera, visto che wiki dice le mie stesse cose.
Mai prendere Wikipedia troppo sul serio. ;)
Purtroppo Java (come tante altre piattaforme basate su virtual machine) paga ancora dazio per l'iniziale (ed indubbia) lentezza (all'inizio il bytecode era interpretato, non JIT-tato). Il problema è che i miti sono duri a morire anche se l'evidenza è ben diversa, oggi giorno è difficile trovare applicazioni Java che sono visibilmente più lente delle duali in C++.

II ARROWS
13-11-2010, 17:42
Qualcuno mi ha allegrato la serata con questi luoghi comuni, grazie! :D

marczxc
13-11-2010, 17:51
Mai prendere Wikipedia troppo sul serio. ;)
senz'altro, ma allora perchè nessuno ha ancora corretto? :boh:
Qualcuno mi ha allegrato la serata con questi luoghi comuni, grazie! :D
siam contenti di averti allegrato :asd: thanks for useless comment :stordita:

litocat
13-11-2010, 18:22
*che io sappia* viene usato java come sintassi ma non c'è nessuna jvm sotto android, viene usata la Dalvik virtual machine che è completamente diversa da quella oracle. Oracle ha denunciato google per 7 brevetti, cosa che succede di continuo al giorno oggi (apple denuncia htc, htc denuncia motorola, motorola denuncia apple, apple denuncia samsung bla bla bla bla bla bla bla^n) quindi credo che non ci sia nulla da temere a riguardo :p
Oracle non ha denunciato Google solo per violazione di brevetti, ma anche per violazioni di copyright. Vedi ad esempio qui (http://www.zdnet.com/blog/btl/oracle-says-google-directly-copied-java-code-heres-the-line-by-line-comparison/41025&usg=AFQjCNF1GNdD5_oXwawU7akdBGHETrf57w).

FabryHw
13-11-2010, 20:52
Allora sono 2 le cose possibili:

1-> google scrive il codice migliore del mondo

2-> apple, Nokia, Microsoft, i programmatori di linux, la stessa Sun(Oracle) ecc. scrivono porcheria dalla mattina alla sera...

se java è tanto lento come fai a fare un sistema tanto reattivo?

Secondo me esageri un po'... tutto qua.

E' anche vero che se parliamo di Java su mobile allora 8 volte su 10 parliamo di Java PRIVO di JIT.
Ed allora sii che Java è lento rispetto a C++

Anche Dalvik VM di Android era (prima di Android 2.2) SOLO interpretata.

Più che altro perché le JVM con JIT di solito richiedono molta più ram della versione interpretata e quindi si preferisce la lentezza al consumo di ram.
Inoltre una JVM interpretata di solito ha un lag di startup minore, ossia il programma gira sii più lentamente ma si avvia prima, e su alcuni dispositivi tra avere il programma che si apre, per esempio, in 3 sec e poi gira più lento ed averlo che si apre in 7 sec e poi gira più veloce si preferisce la prima soluzione.

Cmq Google ha scelto di fare la sua VM (che poi non è sua, ma di uno sviluppatore/ricercatore se non ricordo male) per vari motivi:


Molto probabilmente per cercare di aggirare le licenze di SUN che richiedono di pagare royalties per Java su dispositivi mobile.
Infatti l'unica JVM che Sun/Oracle non regala è quella per usi mobile o embedded.
Dalvik è Register Based, mentre JVM è stack based. Una VM registred based dovrebbe consumare meno memoria e fornire prestazioni migliori su dispositivi a bassa potenza computazionale e con limitate risorse.
Dalvik è ottimizzata per condividere le risorse tra le varie istanze delle VM.
Per motivi di sicurezza ogni programma java lanciato (e lo stesso vale sotto android) usa la propria VM separata. Ed ogni istanza di jvm alloca la sua ram e carica le sue librerie. Quindi per esempio se l'avvio della jvm vuota occupa 1MB di ram, eseguire 8 programmi java contemporaneamente significa occupare almeno 8MB di ram oltre alla ram che serve ai programmi stessi.
Sotto Dalvik invece il consumo è molto minore (inventiamo per esempio un 2.5MB per 8 istanze) perché tutte le parti di codice VM comuni vengono caricate una volta sola pur mantenendo il perfetto isolamento tra le varie VM.
Dalvik è molto più integrata con il kernel linux su cui Android poggia le fondamenta.
Per esempio mi pare che ogni istanza di dalvik lanciata giri con una propria utenza (user linux) quindi anche violando (grazie a bachi) la sicurezza di una VM, al più si otterrebbe l'accesso utente di quella VM e nulla di più. Le altre VM sarebbero protette cmq.
Con jvm invece tutte le istanze girano con la stessa utenza, la violi su una vm e poi puoi decidere vita o morte anche per tutte le altre vm.


A parte i motivi tecnologici da non trascurare di dalvik, penso che il motivo maggiore che ha fatto propendere a Google per la scelta verso dalvik sia quello del punto 1 :D

WillianG83
14-11-2010, 00:28
Simpatico come in italia si è affetti di questa eccessiva mentalità pro java, leggere certi commenti sembra quasi di leggere dei commenti sulle partite di calcio, gente che cerca di negare le evidenze per difendere le proprie idee, spesso nate durante l’università visto che in italia in diverse università sembra quasi che esista solo prolog e java al massimo fanno 3 mesi di corso su c++ verso la fine, e allora il programmatore medio, che è molto legato al linguaggio, cerca di tirare acqua sul proprio mulino con pochissima obiettività.
Detto ciò, resta di fatto il fatto che le performance offerte da c e c++ non sono comparabili, ovvio che se si fa un sistema che gestisce si e no qualche migliaio di dati allora la differenza non si nota ma se si parla di algoritmi che richiedono tanta potenza di calcolo il java crolla come è già sta dimostrato e tutt’ora continua ad essere dimostrato.
Resta di fatto che java ha perso tantissimo terreno a livello internazionale sia sulle università quanto sul settore professionale, appunto perché SUN si è nascosta dietro al muro della portabilità e non ha spinto gli sviluppi di java, mentre nel frattempo uno schifosissimo C# cresceva fino a diventare stabile e buono, oh dio c’è ancora da migliorare ma paradossalmente si trovano più piattaforme programmabile diverse in c# che non in java (console, cellulari, microcontrollori, ecc…) anche se è stato java a nascere per questo scopo, questa è una delle tante prove del fatto che SUN ha rovinato la crescita di java. Ora forse con Oracle java ritornerà ad essere un linguaggio veramente importante.
Come ultima frase andate a controllare un po le offerte di lavoro internazionali o i programmi delle università in giro per il mondo e troverete come il programma di java in diverse univ. è stato diminuito tantissimo anche a favore di c# e e negli ambienti di lavoro in tanti sono tornati a richiedere conoscenza di C, anche le stesse software house che fino 2 anni fa chiedevano SOLO conoscenza di java. E se proprio non avete tempo e pazienza per fare queste ricerche allora fate un po di ricerca e troverete tanti articoli che parla proprio della caduta di java e la rinascita di C negli ambienti di lavoro, soprattutto per demerito di SUN.

M3ne
14-11-2010, 00:58
Simpatico come in italia si è affetti di questa eccessiva mentalità pro java, leggere certi commenti sembra quasi di leggere dei commenti sulle partite di calcio, gente che cerca di negare le evidenze per difendere le proprie idee, spesso nate durante l’università visto che in italia in diverse università sembra quasi che esista solo prolog e java al massimo fanno 3 mesi di corso su c++ verso la fine, e allora il programmatore medio, che è molto legato al linguaggio, cerca di tirare acqua sul proprio mulino con pochissima obiettività.
Detto ciò, resta di fatto il fatto che le performance offerte da c e c++ non sono comparabili, ovvio che se si fa un sistema che gestisce si e no qualche migliaio di dati allora la differenza non si nota ma se si parla di algoritmi che richiedono tanta potenza di calcolo il java crolla come è già sta dimostrato e tutt’ora continua ad essere dimostrato.
Resta di fatto che java ha perso tantissimo terreno a livello internazionale sia sulle università quanto sul settore professionale, appunto perché SUN si è nascosta dietro al muro della portabilità e non ha spinto gli sviluppi di java, mentre nel frattempo uno schifosissimo C# cresceva fino a diventare stabile e buono, oh dio c’è ancora da migliorare ma paradossalmente si trovano più piattaforme programmabile diverse in c# che non in java (console, cellulari, microcontrollori, ecc…) anche se è stato java a nascere per questo scopo, questa è una delle tante prove del fatto che SUN ha rovinato la crescita di java. Ora forse con Oracle java ritornerà ad essere un linguaggio veramente importante.
Come ultima frase andate a controllare un po le offerte di lavoro internazionali o i programmi delle università in giro per il mondo e troverete come il programma di java in diverse univ. è stato diminuito tantissimo anche a favore di c# e e negli ambienti di lavoro in tanti sono tornati a richiedere conoscenza di C, anche le stesse software house che fino 2 anni fa chiedevano SOLO conoscenza di java. E se proprio non avete tempo e pazienza per fare queste ricerche allora fate un po di ricerca e troverete tanti articoli che parla proprio della caduta di java e la rinascita di C negli ambienti di lavoro, soprattutto per demerito di SUN.

un altro fan della propria squadra, sta volta ironizzando sugli altri nelle prime battute :D

AleLinuxBSD
14-11-2010, 09:32
Che le sw chiedano tante cose, non è nuova, ma a chiedere si fà in fretta, ma trovare qualcuno realmente esperto, specie con gli stipendi da fame offerti, non è altrettanto semplice, malgrado la pessima situazione occupazionale, perché per conoscere davvero questi linguaggi, a fondo, occorre molto tempo.
Quindi lasciamo perdere il discorso di quello che chiedono le sw house, che hanno pretese irrealistiche. :rolleyes:

Meglio scendere con i piedi per terra.

Per quanto i linguaggi siano generalisti ognuno è più adatto per svolgere certi tipi di compiti, non sono direttamente comparabili. :rolleyes:

Aggiungo, andiamo verso Natale, fate i buoni. ;)

insane74
14-11-2010, 11:39
quando la gente comincia a tirar fuori il righello per misurarselo, io posto sempre questo link: http://shootout.alioth.debian.org/

scegliete l'architettura (32 o 64 bit, mono o quad-core), scegliete un linguaggio e confrontatelo con gli altri.

ovvio che non vengono coperti tutti i possibili utilizzi, ma serve a rendere un'idea, e con numeri alla mano.

buona lettura! :D

Asterion
15-11-2010, 09:28
Ci sono diverse cose che mi piacerebbe capire: Oracle rilascerà Open JDK per Java 7, ma quali saranno le differenze tra questo JDK e quello ufficiale Oracle?
Non ho mai seguito il progetto Open JDK ma mi pare di capire che vengano solo utilizzati componenti open-source, quindi le funzionalità dovrebbero essere le stesse del JDK ufficiale, eventualmente con differenti prestazioni.

Se XCode non supporterà più Java, tuttavia, il gioco varrà poco la candela secondo me. Al di la del riutilizzo delle librerie, è anche comodo utilizzare le funzionalità specifiche per OS X che ti permettono, ad esempio, di utilizzare i menù tipici del Mac. Oltretutto, XCode crea dei pacchetti che mascherano completamente la struttura in cartelle del programma, racchiudendo tutto nell'icona(/cartella) che rappresenta il programma.
Se così fosse, si potrebbero ancora utilizzare programmi scritti in Java per OS X, ma perderebbero parecchio "appeal" secondo me.

Il Mac Store non accetta programmi Java: capisco questa scelta di Apple, i programmi sono più facili da controllare e verificare se rimangono nell'ambito dell'Objective-C studiato solo per OS X. Io non credo sia solo un problema di controllo sull'utente finale o sugli sviluppatori, è anche una questione di qualità su strumenti di sviluppo, procedure di deploy e nuove caratteristiche del linguaggio. Per il resto, ho sempre saputo che Apple è un mondo chiuso, con pregi e difetti.

Io rimango affezionato a Java, che ho studiato all'università, dopo il C. Se la mentalità non è cambiata di molto, credo che C# non entrerà mai nella università italiane, perché anche se esistono ambienti aperti come il progetto Mono, scegliere C# vuol dire legarsi di fatto a Microsoft, mentre nelle facoltà di informatica tengono molto all'open source. C si studia per capire soprattutto i puntatori :D mentre Java viene utilizzato dal secondo anno in poi. Sono uscito dall'università nel 2004, non so come siano cambiate le cose oggi.

litocat
15-11-2010, 13:09
Se la mentalità non è cambiata di molto, credo che C# non entrerà mai nella università italiane, perché anche se esistono ambienti aperti come il progetto Mono, scegliere C# vuol dire legarsi di fatto a Microsoft, mentre nelle facoltà di informatica tengono molto all'open source.
Come se Java fosse un buon linguaggio per chi e' legato all'opensource. Fino a due anni fa nemmeno esisteva una JVM completamente open. E la storia recente (dalla guerra legale contro Google all'abbandono di OpenSolaris) pone seri dubbi su quanto Oracle sia amichevole verso la comunita' opensource.

Asterion
15-11-2010, 14:41
Come se Java fosse un buon linguaggio per chi e' legato all'opensource. Fino a due anni fa nemmeno esisteva una JVM completamente open. E la storia recente (dalla guerra legale contro Google all'abbandono di OpenSolaris) pone seri dubbi su quanto Oracle sia amichevole verso la comunita' opensource.

Pensa però al risparmio per una università: ambienti di sviluppo gratuiti, SDK gratuito, documentazione in grande quantità e spesso di ottima qualità, il tutto disponibile su ogni sistema operativo.

WillianG83
15-11-2010, 17:02
Pensa però al risparmio per una università: ambienti di sviluppo gratuiti, SDK gratuito, documentazione in grande quantità e spesso di ottima qualità, il tutto disponibile su ogni sistema operativo.

Va beh c'è poco da vantarsi o essere fieri, questo dimostra solo uno stato di "povertà" e quindi l'incapacità delle università italiane di ottenere i fondi per l’acquisto dei materiali necessari, perché altre motivazioni non ci sono. Almeno in america, e non solo, utilizzano il fatto che java sia open source per fare diversi studi sul funzionamento interno da mostrare durante le lezioni, in italia al massimo fanno vedere una volta la classe string senza approfondirla. Senza contare che per le università le licenze sono molto più economiche soprattutto adesso che microsoft ha rilanciato alla grande academic alliance e quindi non ci sono scusanti che tengano.
Ribadisco quanto detto, in italia c’è un’ECCESSIVA e ingiustificata mentalità pro java, trovi tante persone alieniate dai loro professori che difendono a spada tratta java anche negando le evidenzie. Comunque per concludere quello che ha già detto un collega sopra, ogni linguaggio ha un suo ambito applicativo, java ha il suo e c/c++ ha il suo. Semmai sarebbe "più"corretto confrontare java con c# e altri appartenenti a quella categoria di linguaggio, perché se si continua così finirà che qualcuno tirerà in ballo assembly. Ma va beh di per sé un programmatore che cerca di trovare un linguaggio assoluto dimostra di conseguenza di essere un mediocre programmatore, visto che ogni linguaggio ha il suo campo, state sicuri che in certi contesti ci sono altri linguaggi nettamente più adatti di c/c++, java, c#, ecc…..

FabryHw
15-11-2010, 17:43
Comunque per concludere quello che ha già detto un collega sopra, ogni linguaggio ha un suo ambito applicativo, java ha il suo e c/c++ ha il suo. Semmai sarebbe "più"corretto confrontare java con c# e altri appartenenti a quella categoria di linguaggio, perché se si continua così finirà che qualcuno tirerà in ballo assembly. Ma va beh di per sé un programmatore che cerca di trovare un linguaggio assoluto dimostra di conseguenza di essere un mediocre programmatore, visto che ogni linguaggio ha il suo campo, state sicuri che in certi contesti ci sono altri linguaggi nettamente più adatti di c/c++, java, c#, ecc…..

Però mi pare che qui non si stava dicendo che Java va bene per tutto ma lo si stava difendendo verso critiche in un ambiente ben preciso dove invece in teoria sembrerebbe sia in grado di dire la sua (almeno secondo alcuni) e dove C++ non è necessariamente nel suo campo ideale e quindi per forza immensamente meglio.

Quindi più che di mediocre programmatore si dovrebbe parlare di mediocrità del tuo commento iniziale.

WillianG83
15-11-2010, 18:15
Però mi pare che qui non si stava dicendo che Java va bene per tutto ma lo si stava difendendo verso critiche in un ambiente ben preciso dove invece in teoria sembrerebbe sia in grado di dire la sua (almeno secondo alcuni) e dove C++ non è necessariamente nel suo campo ideale e quindi per forza immensamente meglio.

Quindi più che di mediocre programmatore si dovrebbe parlare di mediocrità del tuo commento iniziale.

Non mi pare proprio, c'è gente che ha detto di tutto per cercare di affermare che ormai java non ha niente in meno rispetto a c/c++ nel campo della performance e questa è una prova evidente dell'incompetenza come analista, programmatore, ingegnere, ecc....

marczxc
15-11-2010, 18:40
ho parlato oggi con due miei professori (sistemi operativi e laboratorio di linguaggi). entrambi mi hanno detto che le performance di un linguaggio come Java non andrebbero proprio paragonate a un linguaggio come C.
lascio una loro citazione: "java ha molti pregi, come essere multipiattaforma, ma le prestazioni non sono senz'altro uno dei suoi punti di forza"

FabryHw
15-11-2010, 18:48
Non mi pare proprio, c'è gente che ha detto di tutto per cercare di affermare che ormai java non ha niente in meno rispetto a c/c++ nel campo di performance e questa è una prova evidente dell'incompetenza come analista, programmatore, ecc....

Però è anche vero che secondo alcune fonti linkate non ha tanto di meno sul lato performance, ma sembra che oscilli in media tra 1.5x e 3x più lento.

Quindi dove ho davvero necessità di spingere al max (ma quel punto ti fai anche parti in assembler) o dove le risorse sono troppo limitate ed anche un 1.5x più lento (o l'uso di 10MB di ram in più) sarebbe troppo vado di C++

Altrimenti va benissimo Java perché farlo in C++ è facile che:

Mi costa molte più ore uomo perché è più facile fare errori e quindi ci vorrà più tempo prima di aver un prodotto veramente stabile (sopratutto se fatto da sviluppatori normali e non da gods of development)
Mi costa più ore perché c'è (forse) un parco sw già pronto in Java più vasto di quello in C++ e quindi in C++ devo perdere tempo a reinventare la ruota.
Mi costa probabilmente più soldi per ora, perché i programmatori davvero abili in C++ sicuramente non si svendono, e quelli entry level in C++ è facile che mi facciano un sw che gira peggio dell'equivalente Java


Quindi alla fine (nei casi in cui Java o altro va bene) una società con i soldi di sviluppo che risparmia (o con i soldi dei maggiori incassi dovuti all'arrivare magari un mese prima sul mercato con il proprio prodotto) si compra HW che va al doppio e compensa le deficienze di Java vs C++ e probabilmente avanzando anche dei soldi.

E senza contare che questo gap di prestazione è molto calato negli anni, quindi non è anche escluso che le JVM che ci saranno nei prossimi anni siano in grado di pareggiare sempre di più.

Esempio Java 7 dicono che sarà 2 volte più veloce su alcune librerie del framework (ora non ricordo su cosa).
Prendi il codice binario (bytecode) del tuo software oggi e lo esegui (domani) sulla Jvm7 e magari il tuo 2.5x più lento del C++ si riduce solo a 1.5x.
Senza cambiare una riga di codice e senza ricompilare nulla (nessun sviluppatore necessario e non devi neanche possedere i sorgenti dell'applicativo).

marczxc
15-11-2010, 18:55
Quindi alla fine (nei casi in cui Java o altro va bene) una società con i soldi di sviluppo che risparmia (o con i soldi dei maggiori incassi dovuti all'arrivare magari un mese prima sul mercato con il proprio prodotto) si compra HW che va al doppio e compensa le deficienze di Java vs C++ e probabilmente avanzando anche dei soldi.

:doh:

FabryHw
15-11-2010, 19:15
:doh:

Non vedo cosa ci trovi di strano.
E' sempre andato così e probabilmente tranne nei mercati di nicchia andrà sempre così.

Già negli anni 90, io che sono un estimatore delle prestazioni max possibili, venivo ribatutto con argomenti del tipo "ma chi se ne frega se la tua implementazione gira 5 volte più veloce e va bene anche sul 386. Se poi ci metti 6 mesi a finirla. Scusa ma prefisco l'altra implementazione pronta in un mese ed al più mi compro un 486 pompato o i nuovi pentium. Ricordati che quello che costa davvero nel mondo informatico è il costo del programmatore non il costo dell'HW"

Basta vedere che linguaggi come Python (che sinceramente a me piace molto), Ruby, ...ecc prendono sempre più piede.
Questo nonostante spesso siano da 20 a 50 volte più lenti del già lento per voi Java.

Solo che se raggiungono la velocità minima che serve (o al più esiste HW su cui poterli far girare abbast. velocemente) e ti permettono di essere più produttivi (leggi fare in 2 mesi quello che in java ce ne impiegheresti 6) all'azienda spesso va bene così

WillianG83
15-11-2010, 19:24
Quindi alla fine (nei casi in cui Java o altro va bene) una società con i soldi di sviluppo che risparmia (o con i soldi dei maggiori incassi dovuti all'arrivare magari un mese prima sul mercato con il proprio prodotto) si compra HW che va al doppio e compensa le deficienze di Java vs C++ e probabilmente avanzando anche dei soldi.

Avevi anche iniziato bene il tuo intervento dicendo che si deve fare un’analisi e se è necessario avere performance allora si scegli un linguaggio come c/c++ o meglio ancora supportare il tutto con delle librerie scritte direttamente in assembly, invece dove la performance non è un must allora si preferisce il linguaggio che abbassa i costi e velocizza lo sviluppo (che ribadisco in alcune aziende NON ITALIANE iniziano a preferire il c# sul java visto il vasto campo che lo coinvolge).

Però questa frase tua non è per niente bella, è una delle filosofie fortemente criticate dagli ingegneri di software e analisti. Si deve far spendere il giusto al cliente e quindi fornirgli il software giusto che deve girare sulle macchine giuste o peggio ancora in quelle già presenti che spesso, anche nelle aziende più moderne, sono macchine vecchie e lente o secondo te le aziende si mettono ad aggiornare i calcolatori così come farebbe un smanettone col computer di casa?!

Diciamo che hai parlato esattamente come un programmatore puro, che sa solo buttare codici e basta, senza un minimo di conoscenza di analisi ed ingegneria (lascio chiaro che non ti sto dando dell’incompetente ma sottolineo soltanto il tono del tuo intervento) e spesso legato a quel linguaggio che lo conosce benissimo e quindi non tantissimo bravo a programmare a prescindere dal linguaggio scelto.

FabryHw
15-11-2010, 19:40
Avevi anche iniziato bene il tuo intervento dicendo che si deve fare un’analisi e se è necessario avere performance allora si scegli un linguaggio come c/c++ o meglio ancora supportare il tutto con delle librerie scritte direttamente in assembly, invece dove la performance non è un must allora si preferisce il linguaggio che abbassa i costi e velocizza lo sviluppo (che ribadisco in alcune aziende NON ITALIANE iniziano a preferire il c# sul java visto il vasto campo che lo coinvolge).

Però questa frase tua non è per niente bella, è una delle filosofie fortemente criticate dagli ingegneri di software e analisti. Si deve far spendere il giusto al cliente e quindi fornirgli il software giusto che deve girare sulle macchine giuste o peggio ancora in quelle già presenti che spesso, anche nelle aziende più moderne, sono macchine vecchie e lente o secondo te le aziende si mettono ad aggiornare i calcolatori così come farebbe un smanettone col computer di casa?!

Diciamo che hai parlato esattamente come un programmatore puro, che sa solo buttare codici e basta, senza un minimo di conoscenza di analisi ed ingegneria (lascio chiaro che non ti sto dando dell’incompetente ma sottolineo soltanto il tono del tuo intervento) e spesso legato a quel linguaggio che lo conosce benissimo e quindi non tantissimo bravo a programmare a prescindere dal linguaggio scelto.

Si spendere il giusto ma devi fare anche i conti giusti però.

Se tu gli fai spendere 100.000E senza cambiare le macchine (che magari hanno già 3 anni) ed un'altra ditta gli fa spendere 80.000E (divisi in 50.000E di sviluppo e 30.000E di nuove macchine) chi è che gli ha fatto spendere il giusto ?
E secondo te a chi commissionano il progetto ?

E' ovvio che io non intedevo con il mio esempio casi in cui risparmi 30.000E di sviluppo ma poi hai bisogno di 50.000E di HW o di altri costi nascosti.

E cmq nessuno ti obbliga a cambiare l'HW magari per la tua applicazione anche le prestazioni più lente (diciamo 3 volte più lente) di Java sono sufficienti.

Se riesci (per ipotesi) a fare un gioco in Java che tiene 70 fps come minimo sull'hw esistente, sai cosa gliene frega alla software house che se lo fai in C++ ti fa 300 fps.
Quando nel primo caso ti paga 6 mesi e nel secondo 1 anno di lavoro.

WillianG83
15-11-2010, 19:47
Già negli anni 90, io che sono un estimatore delle prestazioni max possibili, venivo ribatutto con argomenti del tipo "ma chi se ne frega se la tua implementazione gira 5 volte più veloce e va bene anche sul 386. Se poi ci metti 6 mesi a finirla. Scusa ma prefisco l'altra implementazione pronta in un mese ed al più mi compro un 486 pompato o i nuovi pentium. Ricordati che quello che costa davvero nel mondo informatico è il costo del programmatore non il costo dell'HW"


Anche per questo esiste l'ingegneria per evitare che il programmatore inizia a comportarsi come se stesse facendo un programma per se stesso nel proprio "garage". Vale per tutti i campi, mio cognato che fa l'ingegnere civile e ha grosse costruzione ha sempre da ridire con gli architetti che fosse per loro farebbero sempre cose impossibili e improponibile nel nome del chic e della simmetria, ignorando i tempi e i costi.

FabryHw
15-11-2010, 19:48
Si spendere il giusto ma devi fare anche i conti giusti però.

Se tu gli fai spendere 100.000E senza cambiare le macchine (che magari hanno già 3 anni) ed un'altra ditta gli fa spendere 80.000E (divisi in 50.000E di sviluppo e 30.000E di nuove macchine) chi è che gli ha fatto spendere il giusto ?
E secondo te a chi commissionano il progetto ?

E' ovvio che io non intedevo con il mio esempio casi in cui risparmi 30.000E di sviluppo ma poi hai bisogno di 50.000E di HW o di altri costi nascosti.

E cmq nessuno ti obbliga a cambiare l'HW magari per la tua applicazione anche le prestazioni più lente (diciamo 3 volte più lente) di Java sono sufficienti.


Senza contare che anche il time to market è un costo (forse occulto per i più) di una azienda.

Anche ammesso di costare solo poco di più come costi di sviluppo (perché magari fai buoni prezzi) e di non richiedere cambi di HW, ma in compenso consegnare a Dicembre un progetto commissionato a Gennaio, mentre il concorrente glielo fornisce a Giugno.

All'azienda magari quei 6 mesi di NON utilizzo del nuovo sw costano molto di più che cambiarsi l'intero HW.

Poi certo che se facendo un'analisi completa viene fuori che C++ è meglio COME COSTI di una implementazione Java.
Allora dico, se hai le conoscenze per farlo vai di C++

WillianG83
15-11-2010, 20:00
ops

WillianG83
15-11-2010, 20:02
Se riesci (per ipotesi) a fare un gioco in Java che tiene 70 fps come minimo sull'hw esistente, sai cosa gliene frega alla software house che se lo fai in C++ ti fa 300 fps.
Quando nel primo caso ti paga 6 mesi e nel secondo 1 anno di lavoro.

Un gioco come dici tu deve sempre rappresentare il meglio della resa grafica e fisica e questo non vuol dire niente meno che enorme quantità di calcoli che continua sempre a crescere, difatti i giochi hanno sempre fatto fatica a mantenere anche i 60fps costanti figurati 300fps come dici tu (ovvio che se provi un gioco di 5 anni fa con una macchina attuale quello va fortissimo, ma un prodotto vecchio di 5 anni interessa soltanto ad una fetta di mercato inutile da considerare).
E se cerchi di fare altri esempi ti ricordo che man mano che la tecnologia è andata avanti sono migliorati anche i software portando con loro un incremento dei calcoli (ovviamente non ai livelli dei giochi) quindi il discorso è dinamico.


PS: non puoi voler tirare fuori adesso il discorso "ah ma facevo una ipotesi" perchè sarebbe troppo facile sparala grossa per poi ritrattare

FabryHw
15-11-2010, 20:13
Un gioco come dici tu deve sempre rappresentare il meglio della resa grafica e fisica e questo non vuol dire niente meno che enorme quantità di calcoli che continua sempre a crescere, difatti i giochi hanno sempre fatto fatica a mantenere anche i 60fps costanti figurati 300fps come dici tu (ovvio che se provi un gioco di 5 anni fa con una macchina attuale quello va fortissimo, ma un prodotto vecchio di 5 anni interessa soltanto ad una fetta di mercato inutile da considerare).
E se cerchi di fare altri esempi ti ricordo che man mano che la tecnologia è andata avanti sono migliorati anche i software portando con loro un incremento dei calcoli (ovviamente non ai livelli dei giochi) quindi il discorso è dinamico.


PS: non puoi voler tirare fuori adesso il discorso "ah ma facevo una ipotesi" perchè sarebbe troppo facile sparala grossa per poi ritrattare

Che un gioco deve essere per forza lo stato dell'arte ed innovare a tutti i costi è solo una tua considerazione.

Penso che alle software house interessi più il profitto che la fama in sé (anche se quella aiuta).
Ed in alcuni casi 4Milioni di copie vendute di un gioco di medio livello (e prezzo budget), a volte possono fare più profitto di 3Milioni di copie vendute di un gioco costoso sia come prezzo di vendita che come costi di sviluppo (e quindi meno ricavi per copia), salvo veri best seller che vengono comprati a tutti i costi nonostante il prezzo iniziale.

Io ho detto che se Java mi permette per il mio target di gioco di tenere 70 fps MINIMI (e facendo tutto quindi anche il resto oltre la grafica, alias fisica, AI, ...ecc), perdere più tempo a farlo in C++ per avere prestazioni maggiori (ma poi di quanto ? sognamoci i 10 o 20x, perché non è sempre così) NON SERVE ed è controproducente causa costi di sviluppo maggiori (che la sw house non è interessata a sostenere di solito).

Poi se tu parti dal presupposto che un gioco per essere vendibile (e molto profittevole per la società) deve avere X caratteristiche (ma alla fine non fai anche tu come gli architetti che cercano lo chic a tutti i costi ?) e quelle X caratteristiche le puoi avere solo in C++ è un altro discorso.
Ma siamo sicuri che sia del tutto vero ?

Magari hai fatto l'analisi corretta o magari parti anche tu tal presupposto "C++ è enormemente più veloce o ha altre mille fantastiche possibilità che Java non ha".
E quindi sei fan C++ come altri sono fan Java.

PS
"Ingegneria del software"

WarDuck
15-11-2010, 20:30
Non mi pare proprio, c'è gente che ha detto di tutto per cercare di affermare che ormai java non ha niente in meno rispetto a c/c++ nel campo della performance e questa è una prova evidente dell'incompetenza come analista, programmatore, ingegnere, ecc....

Prima di dare dell'incompetente a qualcuno direi di contare fino a 10.

Anche perché qualsiasi analista, programmatore, ingegnere di medio livello ti farebbe notare che le prestazioni non sono tutto, anzi in alcuni contesti sono l'ultima cosa (a meno di non avere vincoli di progetto particolari).

L'obiettività passa anche nell'analizzare pregi e difetti delle varie soluzioni e un qualsiasi analista, programmatore, ingegnere di medio livello ti farebbe notare che C++ non è di certo esente da difetti, anzi (il mio giudizio al riguardo è pessimo, in particolare vedo il C++ come un male di cui purtroppo non possiamo fare a meno).

E' chiaro che la lentezza dello sviluppo di Java possa rappresentare un problema, ma non mi sembra che lo standard C++ stia evolvendo così rapidamente, anzi.

D'altro canto non è detto che debba essere necessariamente un difetto, anche perché ad ogni nuova revisione di un linguaggio bisogna tenere conto dei tempi di apprendimento.

Per fare un esempio, credo che la maggior parte del software scritto in .NET sfrutti in maniera nulla o parziale le ultime features della piattaforma, probabilmente la maggior parte di esso è scritto tenendo a mente la versione 2.0 del framework anche e soprattutto per motivi di compatibilità.

L'ingegneria è l'arte del compromesso, tuttavia mi sento di lanciare uno spunto di riflessione: possibile che nel 2010 dobbiamo affidarci a linguaggi e compilatori vetusti e loro evoluzioni francamente poco convincenti?

Possibile che non riusciamo a fare di meglio? Ecco direi che il caso di riflettere su questo.

litocat
16-11-2010, 12:59
.

FabryHw
16-11-2010, 13:28
Per fare un esempio, credo che la maggior parte del software scritto in .NET sfrutti in maniera nulla o parziale le ultime features della piattaforma, probabilmente la maggior parte di esso è scritto tenendo a mente la versione 2.0 del framework anche e soprattutto per motivi di compatibilità.


Se ci aggiungi che MS ha fatto l'errore (secondo me) di limitare Windows 2000 a max NET 2.0 (salvo hack vari che non vai certo a fare su macchine di produzione) hai maggiori possibili conferme della tua ipotesi (almeno per applicazioni lato server).

E fino a 2 anni fa Windows 2000 Server lo trovavi ancora facilmente in molte aziende, anzi io stesso conosco aziende che fino a non molto fa lo installavano ancora su macchine nuove (rimuovendo 2003/2008 server) per essere sicuri della compatibilità con alcuni sw in loro possesso.

Ritrovandosi poi però il lato DOT.NET limitato a max v2.0, ma non avendo contemporaneamente nessun limite per il lato JAVA invece