Autor Wątek: Java - w czym problem?  (Przeczytany 7985 razy)

Offline dynax

  • Użytkownik

# Lipiec 14, 2012, 15:17:38
Dynax plecie glupotki ;) Jest to normalny natywny kod maszynowy ARM wykonywany przez procesor. Ze wzgledu na architekture systemu czasem po prostu trzeba troche z poczatku Javy uzyc zeby zrobic pare rzeczy.

Nah, nigdzie nie napisałem, że natywny dla platformy deweloperskiej kod (C/C++) jest kompilowany do bytecodu Javy. Takie coś nie byłoby w ogóle możliwe. Chodzi mi o to, że kod natywny jest kompilowany do czegoś w stylu dynamicznej biblioteki która jest wciskana do słoika aplikacji. Przy uruchamianiu aplikacji wykonuje się System.loadLibrary i dalsza część aplikacji jest kontrolowana przez API tej natywnej biblioteki. Jednak piję do tego, że dalej mamy tutaj do czynienia z narzutem Javy przy uruchamianiu aplikacji. Biblioteka i funkcje w niej zawarte nie ładują się i wykonują same. Dalej nad startem całego activity czuwa maszyna Dalvik.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline lukasyno

  • Użytkownik

# Lipiec 14, 2012, 15:24:16
Do Swinga też ktoś zrobił :) A to, co tu jest w SWT, to, z tego co widzę, rozwiązanie korzystające z WinAPI, a więc na Linuksie czy Macu nie zadziała :)

/* Edit: "normal Office ribbon can access and override Windows API which SWT cannot" - ah, chyba jednak zadziała :P */

Generalnie Swing w ogóle nie integruje się z systemem... Głównie za sprawą tego, że nie używa natywnych widgetów, tylko rysuje własne. Nie ma wsparcia dla quicklist, jumplist, czy innych wynalazków, jak progressbary na taskbarze/docku/unity launcherze. A poza tym jest okropnie wolny, co można odczuć np. porównując szybkość Eclipse'a (SWT) i NetBeansa (Swing), zwłaszcza na Linuksie... :)

Powiedzial bym ze Eclipse jest wolniejsze od NetBeans...

Offline lukasyno

  • Użytkownik

# Lipiec 14, 2012, 15:33:10
Nah, nigdzie nie napisałem, że natywny dla platformy deweloperskiej kod (C/C++) jest kompilowany do bytecodu Javy. Takie coś nie byłoby w ogóle możliwe.

Hmm było by mozliwe, kod Javy jest i tak kompilowany do bytecode interpretowane przez JVM,  dobrym przykladem jest jezyk SCALA ktory jest innym jezykiem niz JAVA ale ostatecznie jej kompilator generuje zrozumiany dla JVM kodposredni i to jak najbardziej działa, mniej wiecej tak dziala kompilator c/c++ dla flasha czyli Alchemy..

Offline Xender

  • Użytkownik

# Lipiec 14, 2012, 15:39:15
Nah, nigdzie nie napisałem, że natywny dla platformy deweloperskiej kod (C/C++) jest kompilowany do bytecodu Javy. Takie coś nie byłoby w ogóle możliwe.
Czemu nie? Po pierwsze, sam kod C/C++ nie jest natywny dla niczego, dopiero skompilowany jest. Po drugie, istnieje sporo języków kompilowanych do JVM, więc C/C++ też by się dało, w najgorszym wypadku rezygnując z jakichś elementów języka.

@up, ach, uprzedziłeś mnie.

Offline dynax

  • Użytkownik

# Lipiec 14, 2012, 15:48:10
Zawsze miałem wrażenie, że kod natywny (nie kod C++ tylko bytecode powstały po skompilowaniu czegoś w C++ !!!) jest bardzo różny od tego co powstaje po kompilacji Javy do tego jej własnego bytecodu. Ten kod natywny to instrukcje bezpośrednio dla procesora a ten bytecode Javy to coś podobnego tylko bardziej przypominającego jakiś obfuscate'owany skrypt dla maszyny wirtualnej i jednego w drugie nie idzie przemienić. Ale dzięki za informację. Zaraz sobie przeczytam o SCALA i Alchemy :)

Offline m4tx

  • Użytkownik
    • m4txblog

# Lipiec 14, 2012, 15:50:58
Powiedzial bym ze Eclipse jest wolniejsze od NetBeans...
Na Linuksie testowałeś? :>

Jest kompilator C => bytecode Javy:
http://en.wikipedia.org/wiki/List_of_JVM_languages#JVM_implementations_of_existing_languages

Offline Xender

  • Użytkownik

# Lipiec 14, 2012, 16:14:19
@dynax - to do czego skompiluje ci się C++ zależy od backendu kompilatora. Standard nic o tym nie mówi, definiuje jedynie podstawowe cechy maszyny na której wykonuje się kod. I o ile kompilowanie C++ do JVM nie jest popularne i pewnie stosuje się je tylko w specyficznych przypadkach, to dość popularny jest LLVM...

BTW, w temacie dziwnych kompilacji to był kiedyś wątek (tylko nie mogę go odnaleźć) o kompilowaniu LLVM do javascript - możnaby uruchomić przeglądarkę w przeglądarce (tak, padło w tym wątku coś o incepcji i "Yo dawg" :P ).