Java (ancora) è la lingua preferita della piattaforma? [chiuso]


20

Quando ho iniziato a usare Java negli anni Novanta, era tutto " Scrivi una volta, corri ovunque! " Dal primo giorno. Probabilmente era tutto vero allora e anch'io facevo parte del coro.

Non sono più sicuro di cosa pensare, considerando tutte le altre lingue usando runtime multi-piattaforma (python, flash, perl, html, php ...). Ma sto ancora vedendo molti argomenti che dicono che dovresti usare Java perché è presumibilmente migliore per lo sviluppo multipiattaforma.

Quindi, è ancora vero oggi? Java è ancora la lingua preferita per lo sviluppo multipiattaforma?

  • Si prega di essere specifici con particolare attenzione agli aspetti multipiattaforma.
  • Non sto chiedendo confronti con le caratteristiche della lingua generale.

Aggiornamento: ottime risposte finora! La maggior parte delle risposte sembra favorire Java o Web. Qualche input dalla folla della sceneggiatura?



3
Questo commento non affronta il nocciolo della domanda, ma è un fattore da considerare: le app Web basate su Java destinate agli utenti di Windows sono qualcosa da cui stare alla larga. Ultimamente Oracle JVM per Windows ha avuto molti problemi di sicurezza. Come tale, potresti scoprire che gli utenti esperti non useranno app Web basate su Java perché hanno disinstallato JVM.
colpì il

La tua domanda si basa sul presupposto che all'inizio era persino la lingua preferita della multipiattaforma.
Lucas Ramage,

Risposte:


10

linguaggi di stile di scripting come Python facilitano anche lo sviluppo multipiattaforma. Ora, se ti piace Python (o altri linguaggi simili) dipende da te, e probabilmente non avremo bisogno di iniziare questo dibattito qui.

Java tenta di forzarti a scrivere codice che verrà eseguito in modo portabile, mentre python ti consente di scrivere codice portatile. Il vero linguaggio python verrà eseguito in modo portabile, ma le librerie esterne possono o meno. Inoltre, python darà liberamente accesso a servizi specifici della piattaforma.

Java ha un vantaggio lì? Penso che in entrambi i casi puoi scrivere il codice portatile con facilità simile. Cioè, puoi scrivere codice e di solito funzionerà su piattaforme diverse. Ma non puoi cavartela semplicemente scrivendo codice e supponendo che funzionerà ovunque. Ho lavorato su un progetto Python che ha prodotto la versione per Windows, Linux e Mac e abbiamo riscontrato pochissimi problemi multipiattaforma. (L'unico che ricordo era dovuto a un bug nella libreria che stavamo usando pygame, che causava problemi di disegno su Linux. Ciò è stato risolto aggiornando la versione di pygame che abbiamo usato)

Un altro problema è la distribuzione. Se si desidera distribuire programmi autonomi che eseguono il codice, è necessario produrre versioni diverse per piattaforme diverse. Per Java puoi distribuire una versione e presumere che l'utente abbia Java installato o possa installarlo. In questo caso Java probabilmente vince nella semplicità del dipartimento di distribuzione.

Alla fine, penso che dipenda da quale lingua ti piace lavorare e che tipo di implementazione devi eseguire.


18

Sebbene Java non sia l' unico o l'unico strumento multipiattaforma praticabile , ha alcuni punti di forza:

  • È estremamente veloce.
  • È estremamente robusto.
  • È estremamente portatile (ad es. Bytecode compilato 10 anni fa in Windows 95 funziona bene su OS X oggi).

e alcuni punti deboli:

  • Le librerie GUI di base (Swing ...) mostrano la loro età (le aggiunte di terze parti aiutano qui).
  • La lingua stessa potrebbe essere meno dettagliata (ad esempio, eccezioni controllate ...).
  • Il tempo di avvio potrebbe essere più scattante (sebbene stia migliorando continuamente).

Quando si parla specificamente di Java la piattaforma , c'è un altro punto:

  • Esistono alcune lingue in esecuzione sulla JVM e che interagiscono con Java.

19
Estremamente veloce? Rispetto a cosa?
HardCode,

18
@HardCode: rispetto a qualsiasi linguaggio interpretato o alla maggior parte delle lingue compilate. C e C ++ possono essere resi più veloci in alcuni casi, ma è difficile e diventa sempre più difficile quando il numero di core cresce. Con la concorrenza Java (utilizzando questi core multipli in modo efficiente) è molto più facile da raggiungere in pratica.
Joonas Pulakka,

5
@HardCode, a quanto pare il JVM è il runtime più veloce disponibile per quasi qualsiasi linguaggio interpretato (a differenza di quelli che gli hacker della lingua si sono fatti da soli)

14

È vero oggi come lo era allora - vale a dire non del tutto. Java viene scritto una volta, testato ed eseguito il debug ovunque. Certo, è molto meno lavoro di una porta completamente nuova, ma è generalmente più lavoro di quanto l'hype iniziale ci facesse credere.

Il nostro prodotto ha un server Java che funzionerà su Windows o Linux, ma abbiamo riscontrato problemi specifici del sistema operativo e ci assicuriamo di avere sia server Linux che Windows disponibili per supporto / test, se necessario. Le UI Java tendono ad avere più problemi dei server (anche se molti sono cosmetici e quindi potenzialmente possono essere ignorati a seconda dell'applicazione).

Sebbene non sia strettamente una lingua per me, il web è la piattaforma multipiattaforma preferita. Un front-end HTML / JavaScript significa che l'applicazione funzionerà praticamente su qualsiasi piattaforma client e nella maggior parte dei casi quello era il vero obiettivo - non doversi preoccupare se fosse un Mac o un PC, quale versione del sistema operativo e così via.

Ovviamente dovrai sempre dettare la piattaforma del server, ma quando è solo che le persone diventano molto più flessibili, in particolare in questi giorni in cui la maggior parte delle aziende supporta già un mix di server Windows e Linux.


8
Buona risposta. Naturalmente, assicurarsi che la tua app funzioni correttamente in tutte le varie versioni del browser può anche essere un mal di testa.
Tim Goodman,

5
@Tim: buon punto. Credo che le app del browser siano molto più "test e debug ovunque" rispetto alle app desktop Java.
Joonas Pulakka,

5
@Tim: +1. Fare in modo che un'app Webapp funzioni allo stesso modo su tutti i principali browser è difficile quanto far sì che un'app Java funzioni allo stesso modo su più sistemi operativi.
Yevgeniy Brikman,

3
"scrivere una volta, debug ovunque" non è vero nella mia esperienza. fintanto che sei sensibile ed evita dipendenze specifiche della piattaforma, non ho avuto problemi con lo stesso codice Java su più piattaforme (comprese quelle della GUI). Sì, certo, dovresti testarlo, ma penso che in quasi 15 anni di programmazione di Java ho avuto solo una volta un vero problema di portabilità (che era colpa mia per i separatori di directory di Windows con codifica rigida piuttosto che usare l'utile file.pathSeparator multipiattaforma di Java !)
Mikera,

2
@mikera - Abbiamo riscontrato problemi tra Linux e Windows che non avevano nulla a che fare con il nostro codice. Sono rari ma esistono.
Jon Hopkins,

9

Personalmente, direi che Java è ancora la lingua preferita della piattaforma e probabilmente rimarrà lì per un po 'di tempo (insieme alle applicazioni web). Ho scritto un po 'di più sull'argomento in questo post su Java come piattaforma di scelta , ma soprattutto sul fronte multipiattaforma:

  • Fintanto che stai attento alle tue dipendenze (ad esempio evitando librerie che usano JNI per interfacciarsi con il codice nativo), allora Java può essere scritto eseguito senza modifiche su tutte le principali piattaforme JVM

  • Poiché Java è generalmente distribuito come bytecode indipendente dalla macchina, è possibile eseguire senza ricompilazione su qualsiasi JVM (poiché la stessa JVM locale gestisce la compilazione JIT in codice nativo). Ad esempio, sono riuscito a ottenere una app GUI abbastanza complessa da eseguire per la prima volta su un Mac dopo lo sviluppo in Windows, con lo stesso file jar . Contrastalo con la maggior parte delle altre lingue multipiattaforma, che in genere richiedono librerie diverse o una ricompilazione per una piattaforma diversa.

  • Molte delle librerie di base necessarie (GUI, networking, IO ecc.) Fanno parte del runtime standard e sono scritte in modo multipiattaforma. Quindi non è necessario cercare e testare librerie multipiattaforma, si garantisce che praticamente tutto ciò di cui si ha bisogno è già presente nell'ambiente di runtime.


3

Penso che tu abbia queste scelte:

1) utilizzare a

  • compilato o
  • linguaggio interpretato.

2) Come impacchetterai e consegnerai il tuo codice?

  • Un "front-end", un binario / script?
  • Un "front-end", più binari / script?
  • Più "front-end", più binari / script?

Queste scelte influenzano le prestazioni, la visibilità e la distribuzione del codice soure.

Ti dispiace regalare il tuo codice sorgente? Le lingue compilate potrebbero fare al caso tuo. Le lingue compilate sembrano avere prestazioni migliori nei micro-benchmark rispetto alle lingue interpretate (anche JIT). Inoltre, se dipendi da un ambiente di runtime come Java, Python, Ruby ecc, il codice potrebbe essere più difficile da distribuire.

Ho scoperto che le applicazioni desktop multipiattaforma più popolari vanno per "Un front-end, binari multipli" utilizzando C / C ++ e una libreria di widget multipiattaforma, ad esempio Audacity, Blender, Firefox, Google Earth, OpenOffice, Skype, Songbird, Stellarium, VLC.


Hai fatto un errore interessante elencando Skype nei tuoi esempi, ma questa applicazione molto popolare è stata effettivamente avviata con Delphi / Pascal su Windows e trasferita con C / C ++ su Linux e Objective-C su MacOS / iPhone
Maksee

Penso che la dicotomia compilata / interpretata sia un po 'fuorviante - Java in un certo senso non è né perché è compilato in bytecode indipendente dalla macchina per la distribuzione (cioè non più in forma sorgente), e poi JIT compilato in un secondo momento in codice nativo su qualunque macchina tu stia funzionando. È completamente multipiattaforma, ma offre anche prestazioni native, inoltre non è necessario distribuire la fonte se non si desidera. win / win / win.
Mikera,

0

Dirò di no. python e ruby ​​sono usati molto, così come javascript sia per il client che per il lato server. Personalmente uso .NET e non ho problemi a farlo funzionare su Mac e Linux (mentre sviluppo su Windows)

-edit- sento che LLVM sta diventando popolare ma è ancora estremamente piccolo. Ciò ti consentirà di utilizzare il C ++ multipiattaforma in un singolo binario. Apparentemente verrà eseguito sul browser ma non ho mai visto un esempio in cui ti permette di modificare il dom o chiamare javascript.


LLVM non riguarda l'esecuzione su un browser ... Stai parlando di emscripten?
Camilo Martin,

controlla la data. 4 anni fa emscripten non esisteva. Si supponeva che NativeClient funzionasse (e che avesse un destino in corso) ma non lo fece.

Ora vedo la data, ma LLVM non parlava mai specificamente dei browser, giusto?
Camilo Martin,

1
No. Anche se vorrei poter scrivere C ++ o qualche altra lingua supportata da LLVM invece di JS ...


-1

Se porti le piattaforme mobili nel mix, dovresti almeno includere la ricompilazione. Ad esempio Android, j2me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.