Newsgroup: it.comp.programmare
Titolo: Java: a che punto siamo?

Ciao,
visto che in questi giorni si flamma tanto su Java
mi ci metto anche io :-D
Non ne so praticamente nulla, ma ne ho sentito
tanto parlare e poi tutto il dibattito dei thread
scorsi mi ha stimolato e insomma... sono curioso :-)
Quello che vorrei sapere č: ma un programma in Java
deve PROPRIO essere compilato SOLO in bytecode?
Non esiste un tradizionale compilatore che prenda un
sorgente Java, qualche .lib qualche .obj e tiri fuori
un caro vecchio .EXE??? Non dovrebbe essere poi tanto
difficile, in linea di principio.
Sarebbe eseguibile solo sulla piattaforma su cui č
tato compilato, č vero, ma d'altra parte avrebbe
prestazioni decenti e dimensioni ragionevoli.
E comunque il codice resterebbe sempre portabile,
molto piů del C/C++.
Inoltre gli sviluppatori Java avrebbero finalmente
accesso anche alle aree di sviluppo (come i device
driver) che ora sono precluse a Java interpretato.
Cosě una grossa limitazione del linguaggio cadrebbe
e un programmatore Java potrebbe fare proprio tutto.
E a me potrebbe anche venire voglia a questo punto di
imparare a programmare in Java :-)

 difficile, in linea di principio.
Non solo esiste, non solo è Open Source, non solo è GNU...
The GNU Compiler for the Java(tm) Programming Language
http://gcc.gnu.org/java/
ma supporta anche Windows:
http://gcc.gnu.org/install/specific.html#windows
- --
"Usually at least once a school year a student will write a game good
enough that school-wide "craze" erupts, with as much as half the student
body playing the game. [...] It may be only briefly, but geeks CAN be
cool."  Vern Ceder, Nathan Yergler
Nicola Larosa - nico...@m-tekNico.net
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)
iD8DBQE/Mp+4Xv0hgDImBm4RAmhpAKCD5roA04uzOO+9hh+roeXOuJIR2wCgkwu3
UTU1Kd5eHZEmPZvGj1u+1gY=
=H4Mf
-----END PGP SIGNATURE-----

 Non solo esiste, non solo è Open Source, non solo è GNU...
... e non solo non fa quello che chiede l'OP. 
Infatti,
"Compiled applications are linked with the GCJ runtime, libgcj, which 
provides the core class libraries, a garbage collector, and a bytecode 
interpreter. libgcj can dynamically load and interpret class files, 
resulting in mixed compiled/interpreted applications."
Insomma: siamo ancora interpretati! :^)
-- 
---
*************** | Have you ever retired a human by mystake?
*** Azathot *** |
*************** | To contact me, ask me gently. Thanks.

 Insomma: siamo ancora interpretati! :^)
Bè, non proprio... se leggi bene, la libgcj è uno stub
che entra in azione nel caso che usi file esterni (.jar?)
e non codice compilato con il programma: se invece compili
tutto e non fai ricorso ad altra roba a runtime allora la
libgcj non viene usata e il programma è 100% compilato.
AZZ mi sta venendo la curiosità :-)

 AZZ mi sta venendo la curiosità :-)
A me la nausea. :^)


 Non solo esiste, non solo è Open Source, non solo è GNU...
... ma è anche la dimostrazione che:
 - GCC *non* è un compilatore che va bene per qualsiasi linguaggio
 - Java *non* è un linguaggio che va bene per la compilazione nativa
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.2. C, C++ and ASM developers
                               and beta testers are welcome!

  - Java *non* è un linguaggio che va bene per la compilazione nativa
Perchè? Se è per via della libgcj, ho gia visto che
non mette necessariamente in esecuzione codice interpretato,
è una cosa che si può evitare se non si creano/usano file
.class esterni.

 .class esterni.
Il problema, IMHO, è che molte volte la semantica di Java impedisce ad un 
compilatore di effettuare conversioni dirette verso codice, dovendo 
delegare di fatto alcuni aspetti dell'esecuzione al motore run-time, 
inficiando il vantaggio della conversione verso codice nativo.
Ciao.


 inficiando il vantaggio della conversione verso codice nativo.
Ah... sarebbe un meccanismo simile alla RTTI del C++?
Mi fai un esempio di codice impossibile da compilare?

 Mi fai un esempio di codice impossibile da compilare?
Java non aveva primitive per la scrittura di codice generico, prima. Si 
pensava che fosse compito del compilatore generare su domanda il codice 
ottimizzato, riciclando codice già pronto nel caso di classi derivate o 
applicando speciali ottimizzazioni per i tipi non-classe. Non è granchè 
come esempio, perchè alla fine si sono arresi e ora Java ha i generics, 
ma dovrebbe farti capire in che spirito è stato progettato Java


 Perchč?
perchč č Java. Stack infinito non indirizzabile, linguaggio pensato per 
la compilazione JIT (quasi. Sun, alla fine, s'č ricreduta e ha aggiunto 
i template), modello di sicurezza intrinseco e, soprattutto, reflection


 Mi fai un esempio di codice impossibile da compilare?
        import java.io.*;
        public class SuperClass {
            public static void main(String[] args) {
                    SuperClass mySubbie = new SubClass();
                    mySubbie.aMethod();
           }
            public SuperClass() {
            }
            public void aMethod() {
               System.out.println("Printed in the superclass");
            }
        }
Questo non è compilabile se il codice di "SubClass" (SubClass.java) non è 
disponibile al momento della compilazione, benché sia perfettamente legale 
e "traducibile" in bytecode.


 ma dovrebbe farti capire in che spirito è stato progettato Java
Incredibile, per la prima volta sono d'accordo con Juliet! :-)


ma dovrebbe farti capire in che spirito è stato progettato Java
Tra l'altro (ovviamente la fonte è di parte) l'implementazione dei
generics in Java è stata fatta senza modificare di una virgola la VM
mentre in in C# la modifica è stata anche "nativa"...
-- 
Lawrence "Rhymes" Oluyede
http://loluyede.blogspot.com
rhy...@NOSPAMmyself.com

 difficile, in linea di principio.
non ha NESSUN senso!
Java č fatto per essere multipiattaforma, non vedo che cosa serve creare un
"caro vecchio .EXE".
ti consiglio di leggere i messaggi che regolarmente appaiono su it.comp.java
galliva

 un "caro vecchio .EXE".
Per avere un eseguibile più performante su l'unica piattaforma dove 
probabilmente verrà eseguito?


 probabilmente verrà eseguito?
Bè allora lo scrivi in C++!
Non vedo perchè scrivere un'applicazione Java per farla girare solo sotto
Windows!
E comunque gli .EXE creati con i programmi citati nel thread non rendono
(molto) più performante un programma scritto in Java.
Ri-invito comunque a lurkare un pò it.comp.java
Saluti, galliva.

 Windows!
Forse perché non conoscono (ancora) il C++?
Ciao!
