È Java (ancora) il linguaggio a scelta multipiattaforma? [chiuso]

20

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

Non sono più sicuro su cosa pensare di questo, considerando tutti gli altri linguaggi che usano i 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 il linguaggio di scelta per lo sviluppo multipiattaforma?

  • Si prega di essere specifici con particolare attenzione agli aspetti multipiattaforma.
  • Non sto chiedendo paragoni tra le lingue generali.

Aggiornamento: grandi risposte finora! La maggior parte delle risposte sembra favorire Java o Web. Qualche input dalla folla di script?

    
posta Martin Wickman 19.11.2010 - 11:43
fonte

7 risposte

10

I linguaggi di scripting style come python rendono anche più facile lo sviluppo multipiattaforma. Ora, se ti piace Python (o altri linguaggi simili) dipende da te, e probabilmente non abbiamo bisogno di iniziare il dibattito qui.

Java cerca di forzare a scrivere codice che verrà eseguito in modo portabile, mentre python ti permette di scrivere codice portatile. Il vero linguaggio Python funzionerà in modo portabile, ma le librerie esterne possono o meno. Inoltre, python darà libero accesso ai servizi specifici della piattaforma.

Java ha un vantaggio lì? Penso che in entrambi i casi è possibile scrivere il codice portatile con facilità simili. Cioè, puoi scrivere codice e di solito funziona su piattaforme diverse. Ma non puoi farla franca solo scrivendo il codice e assumendo che funzionerà ovunque. Ho lavorato su un progetto Python che ha prodotto la versione per Windows, Linux e Mac e ci siamo imbattuti in pochissimi problemi multipiattaforma. (L'unico che ricordo era dovuto a un bug nella libreria che stavamo usando pygame, che ha causato problemi di disegno su Linux, risolto aggiustando la versione di pygame che abbiamo usato)

Un altro problema è la distribuzione. Se vuoi distribuire programmi standalone che eseguono il tuo codice, dovrai produrre versioni diverse per piattaforme diverse. Per Java è possibile distribuire una versione e assumere che l'utente abbia installato Java o possa installarlo. In questo caso, Java probabilmente vince nella semplicità del dipartimento di implementazione.

Alla fine, penso che dipenda dalla lingua con cui ti piace lavorare e dal tipo di distribuzione che devi eseguire.

    
risposta data 20.11.2010 - 22:55
fonte
18

Anche se Java potrebbe non essere lo o l'unico strumento vitale multipiattaforma, ha alcuni punti di forza:

  • È estremamente veloce.
  • È estremamente robusto.
  • È estremamente portabile (ad esempio il bytecode compilato 10 anni fa in Windows 95 funziona correttamente in OS X oggi).

e alcuni punti deboli:

  • Le librerie della GUI di base (Swing ...) mostrano la loro età (l'aggiunta di terze parti aiuta qui).
  • La lingua stessa potrebbe essere meno dettagliata (ad esempio, eccezioni controllate ...).
  • Il tempo di avvio potrebbe essere più rapido (sebbene stia migliorando sempre).

Quando parli specificamente di Java sulla piattaforma , c'è un punto in più:

  • Ci sono alcuni linguaggi che vengono eseguiti su JVM e interoperano con Java.
risposta data 19.11.2010 - 14:01
fonte
12

È vero oggi come allora - cioè non del tutto. Java è una volta scritto, testato ed eseguito il debug ovunque. Certo, questo è molto meno lavoro di una porta completamente nuova, ma in generale è più lavoro di quanto non lo fosse la pubblicità iniziale.

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

Anche se non è propriamente una lingua per me, il web è la piattaforma multipiattaforma scelta. Un front-end HTML / JavaScript significa che l'applicazione verrà eseguita praticamente su qualsiasi piattaforma client e nella maggior parte dei casi è stato il vero obiettivo: non doversi preoccupare se si trattasse di un Mac o PC, quale versione del sistema operativo e così via.

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

    
risposta data 19.11.2010 - 11:53
fonte
9

Personalmente, direi che Java è ancora il linguaggio di scelta multipiattaforma, 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 sul fronte multipiattaforma in particolare:

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

  • Beacuse Java viene solitamente distribuito come codice byte indipendente dalla macchina, è possibile eseguire senza ricompilazione su qualsiasi JVM (poiché la JVM locale gestisce la compilazione JIT nel codice nativo). Ad esempio, sono riuscito a ottenere un'applicazione GUI complessa e ragionevole da eseguire la prima volta su un Mac dopo lo sviluppo in Windows - con lo stesso file jar . Contrariamente alla maggior parte degli altri linguaggi multipiattaforma, che in genere richiedono diverse librerie o una ricompilazione per una piattaforma diversa.

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

risposta data 14.02.2011 - 17:58
fonte
2

Penso che tu abbia queste scelte:

1) usa un

  • compilato o
  • interpretato lingua.

2) Come impacchettate e consegnate il vostro codice?

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

Queste scelte influiscono sulle prestazioni, sulla visibilità e sulla distribuzione del codice soure.

Ti dispiace dare il tuo codice sorgente? Le lingue compilate potrebbero essere per te. Le lingue compilate sembrano avere un rendimento migliore nei micro-benchmark rispetto alle lingue interpretate (anche JIT). Inoltre, se si dipende 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, più file binari" utilizzando C / C ++ e una libreria di widget cross-platform, come ad esempio Audacity, Blender, Firefox, Google Earth, OpenOffice, Skype, Songbird, Stellarium, VLC.

    
risposta data 19.11.2010 - 13:51
fonte
0

Dirò di no. Python e Ruby sono molto utilizzati, così come JavaScript per lato client e server. Io personalmente uso .NET e non ho problemi a farlo girare su mac e linux (durante lo sviluppo su Windows)

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

    
risposta data 24.11.2010 - 21:53
fonte
-1

Se porti nel tuo mix piattaforme mobili, avrai almeno bisogno di ricompilare. Per esempio. android, j2me.

    
risposta data 19.11.2010 - 12:23
fonte

Leggi altre domande sui tag