Kiedy zacząłem używać Javy w latach dziewięćdziesiątych, od samego początku było wszystko: „ Napisz raz, biegnij gdziekolwiek! ”. To prawdopodobnie wtedy było prawdą i ja też byłem częścią chóru.
Nie jestem już pewien, co o tym myśleć, biorąc pod uwagę wszystkie inne języki używające środowisk uruchomieniowych na wielu platformach (python, flash, perl, html, php ...). Ale wciąż widzę wiele argumentów, które mówią, że powinieneś używać Javy, ponieważ podobno jest lepsza do programowania na różnych platformach.
Tak, jest to nadal prawdziwe dzisiaj? Czy Java jest nadal preferowanym językiem dla rozwoju wielu platform?
- Bądź konkretny, koncentrując się na aspektach wieloplatformowych.
- Nie proszę o ogólne porównanie funkcji języka.
Aktualizacja: Jak dotąd świetne odpowiedzi! Większość odpowiedzi wydaje się sprzyjać Javie lub sieci. Wszelkie uwagi od tłumu skryptów?
źródło
Odpowiedzi:
Języki w stylu skryptowym, takie jak Python, ułatwiają także tworzenie platform. To, czy lubisz Python (lub inne tego typu języki), zależy od Ciebie i prawdopodobnie nie musimy tutaj rozpoczynać tej debaty.
Java próbuje zmusić Cię do napisania kodu, który będzie działał przenośnie, podczas gdy Python pozwala pisać kod przenośny. Sam język Pythona będzie działał przenośnie, ale biblioteki zewnętrzne mogą, ale nie muszą. Dodatkowo, python swobodnie zapewni dostęp do usług specyficznych dla platformy.
Czy Java ma tam przewagę? Myślę, że w obu przypadkach możesz napisać przenośny kod z podobną łatwością. Oznacza to, że możesz pisać kod i zwykle będzie on działał na różnych platformach. Ale nie można oderwać się od pisania kodu i zakładania, że będzie on działał wszędzie. Pracowałem nad projektem Pythona, który produkował wersję dla systemów Windows, Linux i Mac i napotkaliśmy bardzo niewiele problemów na różnych platformach. (Jedyne, co pamiętam, było spowodowane błędem w bibliotece, w której korzystaliśmy z pygame, co spowodowało problemy z rysowaniem w systemie Linux. Zostało to naprawione przez uaktualnienie używanej wersji pygame)
Kolejnym problemem jest wdrożenie. Jeśli chcesz dystrybuować samodzielne programy, które uruchamiają Twój kod, będziesz musiał stworzyć różne wersje dla różnych platform. W przypadku Javy możesz rozpowszechniać jedną wersję i zakładać, że użytkownik ma zainstalowaną Javę lub może ją zainstalować. W tym przypadku Java prawdopodobnie wygrywa w prostocie działu wdrażania.
Ostatecznie myślę, że sprowadza się to do tego, z jakim językiem lubisz pracować i jakiego rodzaju wdrożenia musisz wykonać.
źródło
Choć Java nie może być lub jedynym realnym narzędziem cross-platform, to ma pewne zalety:
i niektóre słabości:
Mówiąc konkretnie o platformie Java , jest jeszcze jeden punkt:
źródło
To jest tak prawdziwe dzisiaj jak wtedy - to znaczy nie do końca. Java pisz raz, testuj i debuguj wszędzie. Pewnie, że jest to o wiele mniej pracy niż całkowicie nowy port, ale generalnie jest to więcej pracy, niż początkowo nam się wydawało.
Nasz produkt ma serwer Java, który będzie działał w systemie Windows lub Linux, ale widzieliśmy z nim specyficzne problemy z systemem operacyjnym i upewnijmy się, że w razie potrzeby mamy do dyspozycji zarówno serwery Linux, jak i Windows. Interfejsy użytkownika Java mają zwykle więcej problemów niż serwery (choć wiele z nich ma charakter kosmetyczny i dlatego można je zignorować w zależności od aplikacji).
Chociaż nie jest to dla mnie język, sieć jest platformą z wyboru wielu platform. Interfejs HTML / JavaScript oznacza, że twoja aplikacja będzie działać na prawie każdej platformie klienckiej, a w większości przypadków to był prawdziwy cel - nie musisz się martwić, czy to Mac, czy PC, która wersja systemu operacyjnego i tak dalej.
Oczywiście nadal będziesz dyktować platformę serwerową, ale kiedy ludzie stają się bardziej elastyczni, szczególnie w czasach, gdy większość firm już obsługuje wiele serwerów Windows i Linux.
źródło
Osobiście powiedziałbym, że Java jest nadal preferowanym językiem międzyplatformowym i prawdopodobnie pozostanie tam przez pewien czas (obok aplikacji internetowych). Napisałem więcej na ten temat w tym poście na Javie jako platformie z wyboru , ale w szczególności na wielu platformach:
Tak długo, jak jesteś ostrożny ze swoimi zależnościami (np. Unikając bibliotek, które używają JNI do łączenia się z kodem natywnym), Java może być napisana bez zmian na wszystkich głównych platformach JVM
Beacuse Java jest zwykle dystrybuowana jako niezależny od maszyny kod bajtowy, można uruchomić bez ponownej kompilacji na dowolnej maszynie JVM (ponieważ lokalna maszyna JVM obsługuje kompilację JIT na rodzimy kod). Na przykład udało mi się uzyskać rozsądną złożoną aplikację GUI do pierwszego uruchomienia na komputerze Mac po opracowaniu w systemie Windows - z tym samym plikiem jar . Porównaj to z większością innych języków wieloplatformowych, które zazwyczaj wymagają różnych bibliotek lub rekompilacji dla innej platformy.
Wiele podstawowych bibliotek, których potrzebujesz (GUI, sieci, IO itp.), Stanowi część standardowego środowiska wykonawczego i jest napisanych na wiele platform. Dzięki temu nie musisz szukać i testować bibliotek między platformami, masz gwarancję, że prawie wszystko, czego potrzebujesz, znajduje się już w środowisku wykonawczym.
źródło
Myślę, że masz te możliwości:
1) użyj albo
2) Jak spakujesz i dostarczysz swój kod?
Wybory te wpływają na wydajność, widoczność kodu i dystrybucję.
Czy masz coś przeciwko rozdawaniu kodu źródłowego? Skompilowane języki mogą być dla Ciebie. Wydaje się, że skompilowane języki osiągają lepsze wyniki w mikro-testach niż języki interpretowane (nawet JIT). Również jeśli zależysz od środowiska wykonawczego, takiego jak Java, Python, Ruby itp., Kod może być trudniejszy do rozpowszechnienia.
Odkryłem, że najpopularniejsze wieloplatformowe aplikacje komputerowe używają „jednego frontonu, wielu plików binarnych” przy użyciu C / C ++ i biblioteki widżetów międzyplatformowych, np. Audacity, Blender, Firefox, Google Earth, OpenOffice, Skype, Songbird, Stellarium, VLC.
źródło
Powiem nie. Python i Ruby są często używane, podobnie jak javascript zarówno po stronie klienta, jak i serwera. Osobiście używam .NET i nie mam problemów z uruchomieniem go na Macu i Linuksie (podczas programowania na Windowsie)
-edit- słyszę, że LLVM staje się popularny, ale wciąż jest bardzo mały. To pozwoli ci używać wieloplatformowego C ++ w jednym pliku binarnym. Najwyraźniej zostanie wykonany w przeglądarce, ale nie widziałem żadnego przykładu, w którym pozwala on modyfikować dom lub wywoływać javascript.
źródło
Jeśli włączysz platformy mobilne do miksu, musisz także dołączyć rekompilację. Np. Android, j2me.
źródło