Autor Wątek: GCJ jak działa?  (Przeczytany 4595 razy)

Offline Stig

  • Użytkownik

# Czerwiec 17, 2009, 09:11:56
Witam, zastanawia mnie praca kompilatora GCJ a mianowicie jego końcowy efekt czyli plik binarny, mianowicie czy otrzymam plik identyczny jak podczas kompilacji statycznej w natywnym języku programowania np C++ czy plik który po uruchomieniu będzie dopiero sobie interpretował b-code na kod maszynowy bez potrzeby używania JavaVM?

Offline Mr. Spam

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

wine

  • Gość
# Czerwiec 17, 2009, 09:31:56
nie,  kompilacji C++ otrzymasz kod maszynowy gotowy do wykonania przez processor zaś z GCJ otrzymasz byte-code który jest interpretowany przez wirtualną maszynę. Program napisany w javie jest wykonywany przez virtualną maszynkę (która skierowuje polecenia do wykonania (najogólniej mówiąc) przez processor), zaś w C++ od razu przez processor.

Offline Stig

  • Użytkownik

# Czerwiec 17, 2009, 09:45:43
Właśnie kompilując z gcj otrzymuję zwykłą binarkę i nie jest potrzebna JavaVM aby ją uruchomić chodzi mi o to czy kompilacja źródła javy przez gcj jest kompilacją stałą czyli interpretacja kodu źródłowego, zamiana na kod maszynowy, optymalizacja czy po prostu po użyciu gcj otrzymam plik który po uruchomieni dopiero będzie interpretował sobie kod źródłowy czy tam b-kod na kod maszynowy bez optymalizacji za pomocą gij ?

Offline grrr

  • Użytkownik

# Czerwiec 17, 2009, 09:45:51
@DOWN: http://pl.wikipedia.org/wiki/GNU_Compiler_Collection - też nie boli... poczytaj dział "Budowa i działanie GCC" - wtedy wynioskujesz, że Z OPTYMALIZAJC¡.
« Ostatnia zmiana: Czerwiec 17, 2009, 09:49:36 wysłana przez grrr »

Offline Stig

  • Użytkownik

# Czerwiec 17, 2009, 09:47:48
Tak do postaci kodu maszynowego to wiem ale z optymalizacją czy bez?

Offline JCoder

  • Użytkownik

# Czerwiec 17, 2009, 12:37:37
Z optymalizacją. Tyle, że te optymalizacje GCJ są niewiele warte.  Java na VM Suna śmiga dużo szybciej niż przekompilowana GCJ. Na Twoim miejscu bym się raczej modlił, żeby projekt się w ogóle poprawnie tym GCJ skompilował i poprawnie działał.
Jak chcesz mieć dobrą kompilację Javy do kodu natywnego, to się musisz zaopatrzyć w Excelsior JET. Komercyjne ale dobre, a nie opensourcowy syf, który częściej nie działa niż działa i jest 2 wersje Javy wstecz.

Offline vashpan

  • Użytkownik
    • Strona

# Czerwiec 17, 2009, 14:47:02
Niestety racja, GCJ to raczej ciekawostka niz realna alternatywa tym bardziej ze jest wolniejszy niz VM Sun'a :) A jak dziala ? Java to zwykly jezyk programowania, ktory mozna sobie kompilowac do natywnego kodu, jednakze ze wzgledu na wiele roznych cech Javy, nie jest to proste ani wydajne...

Aczkolwiek co do sformuowania "opensourcowy syf", to bym polemizowal, zwykle najnowszy GCC tworzy wydajniejszy kod niz "nie-opensourcowy" MSVC ... Poza tym sama Java tez jest obecnie open-source, wiec troche przeczysz sam sobie... ;)

Offline JCoder

  • Użytkownik

# Czerwiec 18, 2009, 12:46:51
Ech, pisząc "opensourcowy" miałem na myśli bardziej model rozwoju oprogramowania, niż czy są dostępne źródełka. Java faktycznie jest otwarta, ale nie do końca - tzn. nadal Sun trzyma łapę na specyfikacji i decyduje co i jak będzie zaimplementowane w oficjalnym wydaniu JDK. OpenJDK jest tylko poligonem doświadczalnym. Poza tym nie jestem przekonany, czy to otwarcie akurat wyszło Javie na dobre.  Społeczności gorzej nadają się do rozwijania zaawansowanych technologicznie produktów niż korporacje (a te z kolei często gorzej niż małe / średnie firmy).

Tymczasem większość projektów z GNU jest rozwijana metodą ewolucyjną - każdy sobie coś tam dłubie i efekty są ogólnie słabe jak w GCJ.  GCC wreszcie po bardzo wielu latach zaczął kompilować nieco lepiej niż MSVC i zdaje się ostatnimi laty zaczął sobie też radzić porządnie z wzorcami, niemniej nie jestem przekonany, czy jest się z czego cieszyć. GCC ze wszystkich projektów GNU społeczność poświęca najwięcej uwagi. MS nie rozwija swojego kompilatora C++ już od dość dawna, natomiast Intelowski kompilator jest nadal poza zasięgiem GCC. Poza tym GCC od środka jest paskudnie zabałaganiony, okrutnie powolny i nie raz robiono już forka (kiedyś EGCS, teraz LLVM). A najgorsze są zmiany w ABI i brak wstecznej kompatybilności, co powoduje, że np. nie mogę sobie przekompilować kernela i sterowników innymi wersjami GCC (poniekąd trochę to wina standardu C++, że ABI nie jest ustandaryzowane w żaden sposób).
« Ostatnia zmiana: Czerwiec 18, 2009, 12:50:22 wysłana przez JCoder »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Czerwiec 18, 2009, 14:32:23
Cytuj
(poniekąd trochę to wina standardu C++, że ABI nie jest ustandaryzowane w żaden sposób)
Poniekąd to zaleta. Gdyby ABI miało być ustandaryzowane, w C++ mógłbyś pisać tylko dla jednej konkretnej platformy i pod jeden konkretny typ procesora (prosta przyczyna: endianess i calling conventions).

Offline skoti

  • Użytkownik

# Czerwiec 18, 2009, 20:16:19
MS nie rozwija swojego kompilatora C++ już od dość dawna, natomiast Intelowski kompilator jest nadal poza zasięgiem GCC.
Zależy od zadania - czasami Gcc pokonuje Icc - btw nie tak dawno intel postanowił wesprzeć rozwój gcc programistami pracującymi nad Icc, więc jest się z czego cieszyć w dłuższej perspektywie.

Offline Esidar

  • Użytkownik

# Czerwiec 19, 2009, 14:39:16
intel postanowił wesprzeć rozwój gcc programistami pracującymi nad Icc, więc jest się z czego cieszyć w dłuższej perspektywie.
Zawsze mnie bawiły stwierdzenia w stylu "w projekcie bierze udział IBM albo Microsoft" a tak naprawdę to tylko jakiś koleś w czasie wolnym coś tam pisze :)
Równie dobrze mógłbym coś pisać w gierce warsztatowej i potem można by napisać "Gra powstała przy udziale firmy CD Projekt" ;D

[Edit] Zapewne chodzi o to :) http://www.h-online.com/open/Intel-wants-to-co-develop-the-GCC--/news/113065
« Ostatnia zmiana: Czerwiec 19, 2009, 14:41:11 wysłana przez Esidar »

Offline yarpen

  • Użytkownik

# Czerwiec 19, 2009, 15:01:46
intel postanowił wesprzeć rozwój gcc programistami pracującymi nad Icc, więc jest się z czego cieszyć w dłuższej perspektywie.
Zawsze mnie bawiły stwierdzenia w stylu "w projekcie bierze udział IBM albo Microsoft" a tak naprawdę to tylko jakiś koleś w czasie wolnym coś tam pisze :)
Równie dobrze mógłbym coś pisać w gierce warsztatowej i potem można by napisać "Gra powstała przy udziale firmy CD Projekt" ;D
Alez tak tez sie robi. W Bydgoszczy robia jakas gre na UE3, pracuje tam jedenz naszych bylych skrypterow i juz w kilku newsach prasowych widzialem, ze "tworcy Wiedzmina" robia nowa gre :)

Offline skoti

  • Użytkownik

# Czerwiec 19, 2009, 15:27:32
Zawsze mnie bawiły stwierdzenia w stylu "w projekcie bierze udział IBM albo Microsoft" a tak naprawdę to tylko jakiś koleś w czasie wolnym coś tam pisze :)
Równie dobrze mógłbym coś pisać w gierce warsztatowej i potem można by napisać "Gra powstała przy udziale firmy CD Projekt" ;D
Mogłoby być to zabawne jeśli robiliby to poza godzinami pracy, a nie w pracy konkretnie zajmować się rozwojem projektu i za tą prace od intela dostawać wynagrodzenie.

Nie jest to też pierwszy projekt taki intela, bo intel opłaca programistów, których obowiązkiem jest praca nad jądrem linuksa
« Ostatnia zmiana: Czerwiec 19, 2009, 15:31:05 wysłana przez skoti »

Offline Esidar

  • Użytkownik

# Czerwiec 19, 2009, 15:47:27
Nie jest to też pierwszy projekt taki intela, bo intel opłaca programistów, których obowiązkiem jest praca nad jądrem linuksa
Możesz podać link w którym jest to potwierdzone ? Tzn, że intel płaci za rozwój GCC ? Oraz ten że płaci za rozwój jądra Linux ? Najlepiej na stronie Intela.

A tak w ogóle, to nad jądrem linuxa trzeba jeszcze pracować ? Ja słyszałem że on jest już super stabilny i wydajny.

Offline skoti

  • Użytkownik

# Czerwiec 19, 2009, 15:57:49
Nie jest to też pierwszy projekt taki intela, bo intel opłaca programistów, których obowiązkiem jest praca nad jądrem linuksa
Możesz podać link w którym jest to potwierdzone ? Tzn, że intel płaci za rozwój GCC ? Oraz ten że płaci za rozwój jądra Linux ? Najlepiej na stronie Intela.

A tak w ogóle, to nad jądrem linuxa trzeba jeszcze pracować ? Ja słyszałem że on jest już super stabilny i wydajny.

Jak tylko bede przy pc to poszukam i wkleje tu (na telefonie nie chce mi sie szukac)

//edit: chciałeś na stronie intela to masz listę projektów OS które intel pomaga rozwijać http://software.intel.com/sites/oss/projects/
Nie nie płaci twórcom gcc na rozwój, a dołączył się do projektu i programiści pracujący dla intela pracują nad gcc (czyli tak płaci na rozwój poprzez płacenie swoim programistą za tą pracę).
To samo robi w jądrze linuksa czyli pracuje nad elementami dla nich ważnymi jak wirtualizacja (i rozwiązaniach wirtualizacji w ich prockach), sterowniki, które udostępnili na GPL i włączyli do jądra (wifi, grafika...) czy cała przebudowa w jądrze API graficznego dla sterowników która ma nadejść to też intela robota.
Ogólnie szacuje się, że tylko około 15% programistów pracujących nad jądrem robią to za darmo - reszta robi to w ramach pracy w firmach takich jak Red Hat, Novell, Intel czy IBM.

Nie wiem dlaczego Cię to tak dziwi, bo intel od zawsze jest znany z tego, że preferuje linuksa (własna dystrybucja na netbooki "Moblin", rozpoczęty właśnie projekt mobilnego systemu razem z nokią opartego na linuksie, ICC za darmo tylko na linuksa, tworzenie otwartych sterowników na linuksa...)
« Ostatnia zmiana: Czerwiec 19, 2009, 23:12:49 wysłana przez skoti »