Newsgroup: it.comp.java
Titolo: 2 chiacchiere su java in nativo (domanda seria e non ulra f.a.q.)

Ciao a tutti,
Mi ritengo un programmatore Java ancora alle prime armi ma comunque un
programmatore Java.
Volevo fare due chiacchiere, con chiunque sia interessato, sulla
possibilità e/o necessità di convertire un programma Java in codice
nativo. Senza voler tirare fuori una stra f.a.q. o un luogo comune, a
mio avviso ci sono molti pro e molti contro a questa possibilità.
Vi faccio un piccolo esempio: ho realizzato un applicazione semplice con
un po’ di grafica e qualche collegamento in tcp/ip ... nulla di
trascendentale. Adesso, se non mi interessa avere la portabilità Java,
se non voglio che gli utilizzatori siano costretti a scaricare un
allegato JRE di 8 o più mega di roba, le deve girare solo sulle
maledette piattaforme windowz, perché non convertire il tutto in
linguaggio nativo? La cosa è fattibilissima con Linux, non so con quali
risultati ma con gcc si compila Java in nativo e vai. Per windowz non ho
trovato nulla di valido se non applicazioni a pagamento e alquanto
sconosciute.
In oltre visto che Java e’ un linguaggio di programmazione perchè le mie
applicazioni devono essere sempre più lente di un programma scritto in C
o Delphi o altro? La JVM di Sun secondo me è lenta, non so quella di IBM
o di terze parti e comunque il pacchetto JRE deve essere sempre
installato.
A volte mi sembra che Java si fantastico, semplice, veloce da
programmare e da utilizzare altre mi sembra sempre di essere un
programmatore di serie B.
Voi che ne dite, che consigli mi dareste?
Ciao Federico
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 che consigli mi dareste?
Di pensare a cosa devi fare/cosa ti serve PRIMA di cominciare a
scrivere del codice.
Davide


premessa: non conosco le problematiche della compilazione in codice
nativo, funziona veramente tutto bene?
supponendo che funzioni tutto bene:
java per certe applicazioni e' molto comodo da usare, ha le librerie
giuste nel posto giusto e facili da utilizzare (es. URL). la cosa non
e' altrettanto vera quando si usa il c o il c++ (perlomeno bisogna
andarsi a cercare delle librerie, esiste URL per il C o il C++?)... 
me ne frego della portabilita', pago un po' in prestazione ma almeno
non mi sbatto troppo a capire il perche' di un segmentation fault o a
fare una operazione che in java richiede 2 righe di codice. e se poi
un giorno vorro' fare in modo che la mia app giri anche su windows...
beh, avro' gia' il codice bello pronto per funzionare col jre.
il discorso di Federico Rico non mi sembra sbagliato. anzi, siccome
esiste la possibilita' di compilare java in codice nativo  e' quasi
riduttivo pensare di utilizzarlo solo per progetti che richiedono
portabilita'... e' completo, e' bello, e' divertente, e' potente...
perche' devo tornare a usare il C?
ciao
-- 
Seti@Home Java Applets
http://maruko.cjb.net/
http://maruko.cjb.net/bofh.jsp

 in C/C++/Delphi/QuelCheTiPare ?
E inoltre, con Java e' possibilissimo costruire applicazioni efficienti 
tanto quanto quelle C/C++. Ad esempio, Eclipse e' scritto in Java. ;-9 
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

tanto quanto quelle C/C++. Ad esempio, Eclipse e' scritto in Java. ;-9 
infatti penso che il problema principale di Federico fosse la mole del
jre necessario a far girare anche il piu' semplice dei programmi e non
tanto le potenziali limitazioni di java quanto a efficienza.
8 mega di jre a mio avviso ne limitano la diffusione, soprattutto se
vuoi distribuire una semplice applicazione via internet.


 perche' devo tornare a usare il C?
Velocita', accesso diretto all'hardware/risorse di sistema, non devi
installare la JRE, accesso ad un numero pressoche' infinito di librerie
e codice gia' scritto, compattezza del codice, applicazioni che 
devono funzionare su dispositivi particolari (palm, PLC...).
Le ragioni sono tantissime ma si possono ridurre ad una: non usare
lo strumento sbagliato per un lavoro.
Davide


la compilazione in codice nativo renderebbe java lo strumento giusto
per molti lavori.
IMHO


Be’ a giudicare dai post l’argomento ha attirato l’attenzione.. e la
cosa non mi dispiace.
In effetti Marco ha colto una parte molto rilevante del mio pensiero.
E poi, a mio avviso c’e’ una contraddizione di fondo in Java: 
se lo strumento e’ portatile, facile da usare, etc etc, proprio 
perche’ e’ flessibile perche’ non includere di default la 
possibilita’ di compilare in nativo e liberarsi del JRE.
Pochissimi degli utilizzatori standard di computer sa cos’e’, 
come si installa e nessuno di essi e’ disposto a scaricare.
Altro discorso e’ quello di valutare se Java si lo strumento 
giusto per realizzare questa o quella applicazione. 
Pochi si possono permettere il lusso di conoscere (e bene) 2 o + 
linguaggi di programmazione seri. Io conosco Java e voglio usare Java,
 la sua lentezza e il JRE e’ un gap grave per l’ultimo nato tra i 
linguaggi di programmazione.
Cristiano afferma che java possa essere anche veloce. 
Non ho dubbi ma la mia piccola applicazione col JRE 1.3.1 di 
sun fa venire il latte alle ginocchia e come dicevo non ho fatto 
nulla di eccezionale.
Quindi immagino che anche la scelta della JVM si fondamentale.. 
se e’ cosi’ e’ un altro gap anche se almeno ti permette di sceglie 
quale jvm tra molte si per te la migliore.


 proprio per dispositivi tipo palm, cellulari, etc.?
Questo non vuole dire che tutti i dispositivi la supportano...
Davide


No, se il codice e' scritto decentemente. Certo, alcune JVM offrono performance
leggermente migliori, ma raramente queste lievi differenze sono i fattori determinanti nel
successo di un sistema.
Ci vuoi descrivere brevemente cosa fa la tua piccola applicazione?
Ciao,
    Bruno.
---
| Bruno Bossola
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola

Questo non vuole dire che tutti i dispositivi la supportano...
infatti mi riferivo alla dimensione del codice che, a naso, dovrebbe
essere ridotta anche con java. pero' non ho esperienza nel settore.


> perche' devo tornare a usare il C?
Perchè JDeveloper che è scritto in Java ha dei tempi di esecuzione che
snervano anche i santi.
Perche Forte, NetBeans e JBuilder sono molto più lenti, onerosi,
pachidermici e snervanti di JDeveloper, perchè spesso devi ricorerre a
librerie fatte in C per fare cose + spinte.
Perchè i programmi Java non sono esenti da errori o da blocchi di sistema,
perché non è del tutto vero che un programma fatto in Java ti assicuri al
100% che funzioni senza nessun intoppo su tutti i sistemi.
Perchè puoi scivere programmi che non dipendano dai servizi del tuo sistema
Operativo e che ti permettano di fare qualunque cosa con il tuo HW.
Perché puoi scrivere applicazioni gestionali che girano con 4 MB di RAM (in
modalità testo) e che girano a velocità impensabili anche su vecchi
sistemi.(vedi le banche anche se loro usano Cobol da quello che so)
I pro e i contro esistono su qualunque cosa. Sta poi alla nostra persona
scegliere lo strumento + adatto per fare una determinata cosa.
Java è uno strumento fantastico, ma come tutte le cose ha dei compromessi da
ccettare.

prima ringrazio Bruno che si e' offerto di cercare di migliorare
l'applicazione. Ma non e' questo su cui volevo discutere (cmq. se vuoi
ti mando anche tutto il sorgente per e-mail non c'e' nulla di top-secret
;-) ).
Cocordo su quanto dice Bruno, e' un investimento imparare un liguaggio
di programmazione, e il JRE come tutti dicono scassa un po' le balle.
Davide, a quanto leggo, mi suggerisce di usare un linguaggio a seconda
delle necessita' ma questo e' il NG di Java e io conosco solo questo e
per il momento non ho intenzione di impegnarmi ad imparare altro ( oh,
non ti offendere e' bello parlare).
Volevo solo discutere sulla base della filosofia di Java che mi dice che
fa un sacco di cose, le fa su tutti i sistemi, le fa bene, sono semplici
ma se decido di ottimizzare su una piattaforma non lo posso fare... o
tutto o nulla.
Altra cosa chi di voi ha compilato java in nativo su windowz?
ciao Federico



e allora chiedo, tornando all'origine del thread, se compilo in codice
nativo risolvo almeno una parte dell'elenco che hai fatto ampliando,
di fatto, il campo di utilizzo di questo strumento?


 Ciao Federico
--
--------------------------------
Andrea Musumeci
java programmer free lance
work:           
www.javalab.it
--------------------------------

 Io dico solo che 8 Mb da scaricare non sono molti con le connessioni
[ZAPPP...]
Mi associo a tutto quanto detto da Andrea.
Fausto.

 programmatore di serie B.
Anche se delle volte java è più lento del C  (per la mia esperienza)
me ne accorgo solo quando lavoro su pochi dati e piccole applicazioni.
Quando gestisco molti dati  le differenze non si notano molto, ed in 
alcuni casi ho anche riscontrato che Java è + veloce ( non sono
molto bravo in C quindi probabilmente le cose non sono veritiere ma 
spostano il problema dal linguaggio di programmazione
al suo utilizzo corretto... ).
Ciao
--gio


 nulla di eccezionale.
Dipende da cosa fai, e come lo fai. Per dire, Eclipse butta a mare Swing - 
che fa tantissima differenza. Ma la compilazione JIT da' performance in 
genere comparabile.
Nota: e' _certamente_ possibile quasi sempre scrivere codice nativo in 
C/C++ equivalente e piu' performante (con maggiore e minore difficolta' 
rispetto a quante features di Java si usano). Semplicemente, non sempre 
accade.


 molto bravo in C quindi probabilmente le cose non sono veritiere ma
confermo, qualche volta java e' piu' veloce del c o c++.
ad esempio recentemente cold fusion e' stato riscritto in java (gira
all'interno di jrun come applicazione j2ee). sembra che gli utilizzatori
di questo linguaggio abbiano criticato la cosa (java e' lento!) eppure
alcuni benchmark dimostrano che la versione java e' addirittura
piu' veloce (l'ho letto da qualche parte, non verificato personalmente)
probabilmente siccome il c e' piu' difficile da padroneggiare, puo'
darsi che la versione c non utilizzasse le feature piu' avanzate che
un s.o. mette a disposizione, in modo da non "complicarsi" la vita.
in java le parti complicate sono nascoste nella jvm ,quindi scrivendo
in java le usiamo automaticamente (piu' o meno...)
poi confermo anche che spesso il codice java e' lento perche' scritto
male. sul sito developerWorks di ibm ci sono degli articoli su come
ottimizzare programmi java, in modo da velocizzarli. leggeteli!
si tratta di utilizzare algoritmi piu' furbi, capire quali classi java usare
e quali no (se possibile) etc.  molto utile!
inoltre sul sito della sun c'e' un libro in html completo che parla di
varie tecniche di ottimizzazione (java platform performance o simile...)
infine usate il jdk 1.4.0_01 !!! e' piu' veloce del jdk 1.3.1 !!!!
soprattutto per quanto riguarda le swing !!!   provatelo!
nota: per compilare in nativo sotto windows ho testato la versione
eval. di jet (
www.excelsior-usa.com
). il risultato dipende dall'applicazione
che stai compilando: alcune vanno piu' veloci (ma di poco!) mentre altre
vanno addirittura piu' lente! senza dubbio ci saranno applicazione che
potranno migliorare molto usando il jet, ma io non ne ho...
secondo me la morale e' che non basta scrivere un programma che
funzioni e poi dire: java e' lento! le tecniche di ottimizzazione esistono
e vanno usate! avete usato dei profiler? molti non sanno nemmeno
che cosa sia un profiler....
naturalmente sostenere che java e' in ogni situazione piu' veloce del c
e' una sciocchezza, ma per me java e' veloce quel tanto che basta.

 perlomento un modo semplice per distribuire la propria applicazione con il
JRE embedded:
Hey... Esiste install Anywhere! Ti fa un autoinstallore per tutte le
piattaforme che vuoi e ti permette anche di includere il jre necessario!
La versione gratuita è comunque abbastanza configurabile e professionale!
Figurati che io lo uso anche in progettini di piccole dimensioni soprattutto
per la comodità.
Il link al downoload è 
http://www.zerog.com/downloads_01.html
 e la versione
gratuita è la Now!
Ciao


 allegato JRE di 8 o piů mega di roba, le deve girare solo sulle
Questa + che una limitazione di java mi sembra una limitazione di Windows
dovuta ad presa di posizione di Microsoft. Ad esempio su linux e Mac OS X
java e tool di sviluppo vengono installati di default e sul secondo basta un
doppio clic per far partire un qualsiasi .jar o .class

 Questa + che una limitazione di java mi sembra una limitazione di Windows
Parole sagge, davvero sagge...


Se leggi bene la licenza la versione free non e' usabile a scopi commerciali :-)
Effettivamente ho omesso che questa funzionalita' dovrebbe essere fornita (gratis) da
mamma Sun, visto che qui e la la cita(va) come una feature disponibile.
Ciao,
    Brumo.
