Newsgroup: it.comp.java
Titolo: Domanda di curiosità

Ciao a tutti. La domanda che vi pongo non è tecnica, ma solo filosofica.
Programmo in java da ormai 3 anni, ma ancora adesso mi domando una cosa:
come mai non esiste un compilatore in codice eseguibile? Conosco ovviamente
il significato della parola portabilità, quindi non rispondetemi che è per
avere il codice portabile (anche se a voi sembrerà essere l'unica risposta
plausibile!!). Quello che voglio dire è: una persona che programma in c++, a
seconda del sistema operativo che sfrutta, utilizza particolari librerie e
quindi non solo l'eseguibile, ma anche il sorgente, è platform-dependent. In
java sia sorgente che bytecode sono invece platform-independent. Questo però
a scapito di buone prestazioni in alcuni tipi di applicazioni. Ma allora mi
domando: il sorgente poteva continuare a rimanere platform-independent
(continuando a sfruttare le stesse API come si fa adesso, qualunque fosse il
sistema operativo sul quale poi lo si faceva girare, diversamente dal c++),
ma almeno lo si poteva fare un bel compilatore che compilasse in codice
macchina in maniera da aumentare le prestazioni. In fondo quello che
apprezzo di java è anche il fatto che è il linguaggio che meglio implementa
la filosofia della programmazione ad oggetti. Ed ha mille altre buone
caratteristiche, tra cui quella di fornire le stesse API per qualsiasi (o
meglio per i quattro implementati) sistema operativo. E allora perchè non
permettere di programmare in maniera elegante, pulita, ben strutturata come
si fa oggi con java, ma allo stesso tempo avere prestazioni elevate?
Il fatto di implementare un benedetto compilatore per generare un
eseguibile, non significherebbe dover togliere di mezzo il bytecode.
Entrambe le soluzioni potrebbero essere lasciate a discrezione del
programmatore. Così se voglio scrivere un applet o un applicativo che giri
su diversi sis. op. mi basterebbe generare il bytecode. Ma se volessi creare
un applicazione che giri solo sotto windows o solo sotto Linux, perchè
magari so già a priori che verrà fatto girare solo su una macchina con un
ben preciso sis. op., be ecco, almeno potrei compilare in eseguibile e
ottenere alte performance.. Se qualcuno di voi ha avuto la pazienza di
leggere fin qui e magari mi potesse dire la sua in merito, mi piacerebbe
davvero sentire i vostri pareri. In particolar modo quelli dei tanti
professionisti del java che si trovano in questo newsgroup e che certamente
mi saprebbero illuminare sul perchè non esista un compilatore in codice
macchina.
Preciso due sole cose: so che visual cafè aveva (forse ce l'ha ancora, ma
non lo so) la possibilità di generare un exe, ma allora resta sempre in
piedi la domanda: come mai non esistono mille compilatori in exe per java
oltre a quello? L'altra cosa che voglio precisare è che io adoro java e lo
reputo personalmente un eccezionale linguaggio di programmazione, ma spesso
ho visto cose orrende in visual basic, rubare il si di un cliente, solo
perchè la stessa versione in java, non sarebbe stata abbastanza performante
(e questa cosa che il visual basic ha avuto la meglio, mi brucia ancora
parecchio!!)
Ciao e aspetto presto i vostri commenti (spero non insulti da parte dei
puristi di java!)
Alberto.

dei puristi di java!
Non lo sono di certo ;-)
-- 
Rhymes
rhy...@NOSPAMmyself.com

 ma allo stesso tempo avere prestazioni elevate?
[cut]
L'erba voglio non cresce neanche nei giardini dei re.

 ha scritto nel messaggio
news:b4339l$r2v$1...@news.flashnet.it...


Rhymes ha scritto:
    <domanda inesperto="on">
    Probabilmente (di sicuro direi) sei più esperto di me ma anche qui
    avrei da obiettare. Senza nulla togliere a Java come si fa a
    determinare se un linguaggio è meglio (non più o meno) OO di un altro?
    Io di linguaggi OO non ne conosco tanti e non sono in grado di
    valutare una tua affermazione ma con le mie poche conoscenze rimango
    comunque dubbioso
    </domanda>
Io credo che java sia meglio OO del c++ soprattutto a causa della robustezza
che deriva dalla sintassi del java e dal meccanismo di controllo delle
eccezioni.
In c++ devi controllare un casino di cose... ad esempio il passaggio degli
argomenti (per valore, per puntatore, per riferimento... costante, non
costante... puntatore costante, puntatore a costante, puntatore costante a
costante)... tutte queste cose  (come ad esempio il doppio meccanismo di
inizializzazione dei parametri nel costruttore di una classe), non fanno
altro che inevitabilmente finire con lo sporcare il codice e renderlo meno
leggibile.
Quando mi avvicinai per la prima volta al java non mi piaceva non avere il
controllo di tutto. Bestemmiai sull'assenza dei tanto amati puntatori e
dell'eredità multipla. Solo adesso apprezzo invece queste mancanze in
java... perchè mi accellerano notevolmente il porcesso produttivo.
Per concludere credo che java sia meglio OO del c++ perchè aumenta la
possibilità di scrivere del codice bug-free... che è meglio SEMPRE di un
codice con bugs...
Ciao a tutti.

 macchina.
Esistono, ma non sono particolarmente diffusi proprio perché i presunti
vantaggi di performance sono, appunto, presunti! O meglio, in certi casi si
possono ottenere, ma spesso il gioco non vale la candela. Recentemente c'è
stato un gran discutere, ad esempio, delle potenzialità di java come
linguaggio per il calcolo numerico: ebbene, le performance di codice java
compilato con gcj ottimizzato, non erano migliori di quelle di java
"interpretato" (in realtà non si tratta di interpretazione,ma di forme di
compilazione a run time) con virtual machine IBM (note per le performance
nel campo del calcolo numerico). Comunque, ti consiglio di leggere i report
di Osvaldo Doederlein pubblicati su 
www.javalobby.org
, a questo riguardo,
sono spesso illuminanti, non solo sulle prestazioni relative delle varie
implementazioni di virtual machine, ma anche su quelle relative di java
rispetto a linguaggi compilati, altre piattaforme, ecc.

 [CUT]
Assolutamente d'accordo con tutto ciň che hai scritto.
pole
-- 
Note: Some input words use a deprecated author.
Note: Read with -deprecation to understand.

 [...]
Dove si firma? :)
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 pole
E io aggiungo che spero che sia proprio così, visto che sto studiando java 
per questioni che non sono per nulla accademiche: ci vorrei lavorare (cmq 
non solo con java).
Anzi se finalmente prendesse piede che la "storia" che java è lento è solo 
dovuto a cattiva programmazione, la cosa farebbe comodo a chi programma con 
serietà ( e chi ha studiato altrettanto bene , sding! :-) ).
Seguo sempre con molta attenzione questo tipo di 3d, perchè mi permette di 
misurare il polso della "situazione" java in Italia ..... e di abboandonare 
la barca fino a quando sono in tempo (scherzo):-).
-- 
Ciao. Fabrizio.
icq: 241182067

 abboandonare la barca fino a quando sono in tempo (scherzo):-).
Beh, se si parla di "mercato del lavoro", certo con Java non vai incontro 
all'ignoto :)


 all'ignoto :)
E' proprio quello che spero, ma ne riparlerò con maggiore cognizione tra qlc 
annetto: adesso sono nella fase di studio (in tutti i sensi).


 Dove si firma? :)
n.b.: il messaggio l'ho scritto io, anche se l'ho mandato dal pc di un'altra
persona, quindi mi considero il primo firmatario. :)

 di Osvaldo Doederlein pubblicati su 
www.javalobby.org
, a questo riguardo,
Appunto: i vari java performance report di Osvaldo Doederlein si trovano
qui: 
http://www.javalobby.org/members/jpr/index.jsp
 (richiede registrazione
al sito).

al sito).
Ottimo, mi piace anche il sito...non lo conoscevo, grazie
-- 
Rhymes
rhy...@NOSPAMmyself.com

> bytecode non può essere modificato, che io sappia. Inoltre una delle cose
uhm. Questo non è vero: non solo può essere modificato, ma è anche
particolarmente semplice da decompilare. Se vuoi fare delle prove ti
consiglio questo: 
http://members.fortunecity.com/neshkov/dj.html


Dove posso trovarne una documentazione?
Thanks
Nicola Grippaldi

 meglio per i quattro implementati) sistema operativo ...
Cinque, IBM OS/400.
Saluti

Olè, ho ottenuto più o meno quello che speravo. Ecco i miei commentini
finali:
- che le buone performance dipendano almeno al 50 % da come si programma, è
indubbiamente vero. Ma forse bisognerebbe vedere da chi dipende l'altro 50!
Io purtroppo non ho modo di vedere grandi (nel senso di progetti complessi e
importanti) prodotti professionali scritti in java, ma se prendo "semplici"
software come JBuilder e li paragono alle relative versioni per c++, mi
sembra che ci sia un bel pò di differenza in termini di prestazioni
(occupazione di memoria e consumo di cpu).
- a ingegneria informatica (mio primo incontro con java, momento
importante!) mi hanno detto che java è un linguaggio interpetato e non
compilato. E già da questo mi sembra di capire che si dovrebbe perdere un pò
di performance.
- da ultimo SANTO DIO, I LOVE JAVA!!! E credo (spero, imploro, sogno) che
davvero le performance di java siano così eccellenti come dite voi, rispetto
a prodotti creati con ambienti di cui non voglio più fare il nome! Perchè
personalmente, e questa è un opinione personale, capito;) , ritengo che il
codice java sia sempre quello meglio strutturato. Ma a volte le performance
inferiori rispetto ad altri linguaggi, mi fanno un pò sospirare! E a chi
volesse insinuare che programma male, beh...non è così!! (eheheh!)
Per concludere davvero, credo che tutti i vostri commenti siano più che
veritieri. Li ho trovati tutti parecchio interessanti e confortanti per me,
che già programmando ormai solo ed esclusivamente in java da qualche
annetto, iniziavo ad accusare qualche colpo relativamente alla necessità di
prestazioni maggiori.
Grazie a tutti!

 a prodotti creati con ambienti di cui non voglio più fare il nome!
Una GUI nativa sara' pero' sempre piu' "responsive" di una Java 
portabile, a meno che non usi qualcosa come SWT
ciao
uL

legato alla GUI nativa
Che intendi per altri idiomi tipici di Java?
-- 
Rhymes
rhy...@NOSPAMmyself.com

 
idioma = pattern calato in un contesto di un linguaggio.
Quindi "tipico di java" era una info ridondante, gia' compresa nella 
parola idioma.
Ma tu che volevi sapere?
uL

Ma tu che volevi sapere?
Quali erano questi idiomi...ma credo che tu intenda "design patterns"
giusto?
-- 
Rhymes
rhy...@NOSPAMmyself.com