2010-11-12 13 views
13

La domanda potrebbe inizialmente sembrare sciocca, ma forse non lo è affatto.Che cosa è esattamente Java?

  • Java non è il linguaggio Java, la maggior parte delle persone sanno che, dal momento che è possibile programmare Java con lots of other langauges come Scala o Groovy

  • Java non è un'implementazione concreta VM poiché ci sono altre implementazioni là fuori, non solo SUN, Microsoft o IBM.

  • Java non è il framework di classe poiché molte implementazioni aggiungono o tralasciano le classi a piacimento.

  • non è nemmeno che una specifica macchina virtuale comune o addirittura bytecode Java deve essere utilizzato, vedi Dalvik VM

  • Forse è solo un insieme di principi che condividono, qualunque esso sia. Sicuramente non è "Scrivi una volta, corri ovunque" poiché non è il caso di almeno Dalvik e Microsoft VM/J #.

Quindi la domanda è, che cos'è esattamente Java? Esiste anche una definizione esatta?

EDIT Un sacco di gente sembra avere l'opinione che java significhi solo il linguaggio di programmazione. Quindi un telefono cellulare abilitato a java deve essere un telefono che consente all'utente di utilizzare programmi composti da file di classe creati solo con la lingua java. Se ciò fosse vero, il java virtual machine/java runtime environment/java development kit sarebbe realizzato solo per java e altre lingue jvm avrebbero il proprio xvm/xre/xdk corrispondente.

+6

+1 Sicuramente nessuna domanda stupida. – helpermethod

+2

Per quanto riguarda la domanda su nessuna specifica VM comune, questo è falso come ho collegato ad esso nel mio commento sulla risposta di Andrzej. La VM di Dalvik non sta affermando di essere una JVM. (Concesso Oracle sta facendo causa a Google su questo punto.) – Poindexter

+0

http://www.jwz.org/doc/java.html: Il fatto è che ci sono quattro cose completamente diverse che vanno sotto il nome di '' Java ' ': Una lingua; Un'enorme biblioteca di classe; Una macchina virtuale; Un modello di sicurezza. –

risposta

39

Java è il linguaggio Java, in realtà. Groovy, Scala e altri compile fino al codice byte equivalente che può essere eseguito sulla JVM, ma essi non sono Java.

Formalmente, direi che Java è lo JLS.

+7

+1 Questa è assolutamente la risposta corretta. La specifica è tutto per una lingua. Tutto il resto sono solo dettagli di implementazione. – Poindexter

+0

@Poindexter: la tua affermazione vale solo se Java è una lingua. :) – MicSim

+3

@McSim: Direi che il termine "Java" si riferisce alla lingua. La "Java Virtual Machine (JVM)" è un'entità correlata ma completamente separata. La JVM ha un linguaggio separato (il bytecode) e ha una specifica separata: http://java.sun.com/docs/books/jvms/ – Poindexter

6

Java è un linguaggio di programmazione. La parte della sintassi.

+5

Non la parte semantica? – Ishtar

5

Secondo me è la lingua. Non penso che la gente dica che stanno programmando Java con Groovy, o se lo fanno, sono inesatte.

1

La maggior parte delle persone vede Java come linguaggio di programmazione (come definito dalla specifica del linguaggio Java). Ma ce ne sono molti altri che lo dividono nel linguaggio di programmazione, le varie macchine virtuali e l'ecosistema più grande.

ci sono anche le definizioni giuridiche di ciò che può essere chiamato Java (per esempio il marchio di fabbrica), ma penso che ho intenzione di lasciare che uno solo al momento :-)

3

In realtà, dipende dal contesto dove viene usata la parola. È tutto: sintassi, tecnologia, framework, linguaggio di programmazione.

Come sidenote, Oracle risponde a questa domanda come segue: What is Java?

+0

Interessante. Sembra che Oracle sia la lingua e la "piattaforma" (VM?) – justkt

5

A rigor di termini Java è solo un linguaggio di programmazione. Ma è un linguaggio di programmazione che include molti, molti standard: ad esempio molte specifiche API e JVM. Ecco perché SUN e altri si riferiscono ad esso come una piattaforma.

Altri linguaggi come Scala, Ruby, ecc. Sono non Java, si limitano a compilare il codice byte eseguito in una Java Virtual Machine. Sono solo costruiti sulla piattaforma Java, ma non sono essi stessi Java.

La JVM è altamente standardizzata e molte aziende possono offrire e offrire le proprie implementazioni per le proprie piattaforme hardware. Questo non è nemmeno Java, queste sono solo implementazioni di una parte della piattaforma Java.

Le specifiche della VM Java sono standardizzate al 100% e vengono applicate da Oracle in quanto rivendicano il copyright su Java. Ecco perché Android (Dalvik VM) è attualmente oggetto di un procedimento giudiziario di Oracle contro Google.

2

Non si può dire che Scala sia Java più di quanto si possa dire che una forchetta è un pettine solo perché ti capita di lavarti i capelli con essa. Oppure, se riesco a tirar fuori l'analogia classica, guidare le unghie con la tua chiave inglese non lo rende un martello.

È possibile creare un compilatore che compila COBOL in C++ se si desidera, ma ciò non significa che COBOL è C++.

Molte lingue hanno il codice macchina x86 come lingua di destinazione, quindi vuol dire che sono tutte la stessa cosa?

Non importa se altri linguaggi possono essere compilati con il bytecode della JVM, né importa che sia possibile compilare Java nel codice macchina di un'architettura specifica. La JVM è ancora la piattaforma Java; altri linguaggi capita di condividerli, e Java capita di essere in grado di compilare su target diversi dal bytecode JVM. Allo stesso modo in cui una forcella è in grado di pettinarsi a seconda di come la gestisci.

Penso che questa sia una domanda stupida (e non ha nulla a che fare con la programmazione in più). È possibile che qualcuno agisca come un filosofo del Rinascimento e cerchi di sostenere che la tua forchetta è in realtà un pettine perché non l'hai mai usata mai come una forchetta e la usi sempre solo nei capelli? Certo, vai avanti e discuti, e forse avrai anche un punto, ma speriamo che nessuno sprechi il loro tempo ad ascoltarlo. Questo è tutto un gioco di semantica, e una volta che inizi a discutere di semantica, tutti perdono.

(modifica) Bah! Ho appena realizzato che sto discutendo sulla semantica!

+0

Oh no, se COBOL si trasforma in codice nativo e C++ si trasforma in codice nativo significa COBOL è C++, quindi HipHop trasforma C++ in PHP !! – JAL