Jak wiadomo, Google Web Toolkit to skrośny kompilator Javy do JavaScriptu, który pozwala na tworzenie ajaksowych aplikacji, nie wymagając od dewelopera jakiejkolwiek znajomości tej technologii. Po napisaniu kodu w Javie, GWT przetwarza część kliencką na JavaScript, HTML i CSS, zaś część serwerowa zostaje skompilowana do serwletu Javy, gotowego do uruchomienia na serwerze aplikacyjnym. Zaletą takiego rozwiązania jest znacznie łatwiejsze wykrywanie błędów, oraz uwolnienie się od zmory dopasowywania aplikacji do poszczególnych przeglądarek – o wszystko zadba już framework.
Możliwości GWT są naprawdę duże – zrobiono w nim aplikacje takie, jak Gmail, a ostatnio Google Wave. Czy jednak oznacza to, że deweloperzy powinni brać się za solidną naukę Javy i liczyć, że google'owe narzędzie przerobi je na aplikację uruchamianą w przeglądarce? William Shields, australijski deweloper, który specjalizuje się właśnie w Javie – więc trudno go podejrzewać o jakąś niechęć wobec języków o statycznej typizacji – uważa, że GWT w żadnym stopniu nie stanowi przyszłości dla tworzenia aplikacji webowych. Oto streszczenie jego argumentów:
-
Dynamiczna typizacja nie jest niczym strasznym. Pierwszym popularnym językiem o dynamicznej typizacji był Perl, który rozpowszechnił się wśród uniksowych administratorów w latach '90 zeszłego wieku – w czasach gdy niepodzielnie jeszcze rządziły C i Java. Choć koncepcja swobodnego zmieniania typów zmiennych, albo porzucenia konieczności ich deklarowania była wówczas herezją, to jednak przyjęła się nieźle – dzięki realnym korzyściom, jakie Perl dawał na maszynach o niewielkiej mocy. Nic strasznego wraz z proliferacją Perla, a później PHP, Pythona czy Ruby'ego się nie stało.
-
Jak chcesz napisać podręcznik po niemiecku, nie piszesz go wpierw po angielsku, a potem tłumaczysz na niemiecki. Niektórych rzeczy nie sposób przetłumaczyć – zarówno w językach ludzi, jak i maszyn. JavaScript ma wiele własności, których brak Javie – domknięcia, anonimowe obiekty, metody rozszerzenia. Skrośne kompilatory napotykają ten sam problem, co wykorzystanie ORM-ów – niezgodność impedancji. Regularnie marnuje się wiele czasu na ustalenie, która to kombinacja parametrów i własności wygeneruje odpowiednio wydajną kwerendę SQL-a. GWT „wmawia” zaś naiwnym deweloperem, że nie muszą uczyć się JavaScriptu. Co więcej, GWT traktuje JavaScript jako bug, który trzeba naprawić.
Ładowanie





Dziś mało kto koduje w asseblerze (nie mówię tutaj o sterownikach ale zwykłych aplikacjach), a coraz więcej aplikacji desktopowych napisanych jest w Java lub C#.
GWT to rewelacyjna biblioteka. Moim zdaniem pozwala ona na kolejny duży skok. Przekształcenie statycznych stron WWW z odrobiną JavaScriptu w prawdziwe złożone aplikacje. Wystarczy porównać wygodę obsługi dynamicznej aplikacji jaką jest GMail z klientami pocztowymi z przed kilku lat o obcją 'odśwież' etc.
Myślę że dzięki GWT wchodzimy w nowy etap: 'aplikacje webowe' zamiast 'strony www'. GWT to kluczowa technologia by idea systemu internetowego Google Chrome OS miała sens. Java pozwala na stworzenie zdecydowanie bardziej rozbudowanych aplikacji niż to jest możliwe w JavaScript (problem z opanowaniem dużych ilości kodu).
Nie trzeba chyba nikomu mówić że pod Google Chrome (a dokładniej pod silnikime V8) aplikacje wygenerowane przez Google GWT działają kilkukrotnie szybciej niż pod innymi silnikami jak TraceMonkey (Firefox). Google posiada idealny zestaw. Kompilator piszący i optymalizujący kod JavaScript oraz silnik który go wykonuje. Tym samym Google Chrome staje się niejako maszyną wirtualną dla kodu Java (z JavaScript po drodze jako warstwa pośrednia)
Google GWT + Google Chrome V8 :)
Browser: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0
Napisanie bardzo dużej aplikacji w samym javascripcie wydaje mi się (prawie) niemożliwe. Niewiele firm podjąłby się takiego ryzyka biznesowego.
Z rozwiązań w javie polecam doskonały framework wicket. W przeciwieństwie do GWT nie ma kompilacji, a javascript generowany jest "w locie"
http://wicket.apache.org/
Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4
Chodzi mi o kwestię programowania zorientowanego obiektowo w PHP, czy rzeczywiście lepiej posługiwać się paradygmatem skryptowym (+ funkcyjnym) w tym języku.
Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4
Jeśli ktoś jednak zakosztował rozwiązań typu jQuery, Prototype, albo całych frameworków takich jak Ruby on Rails, czy Django, nigdy nie będzie twierdził, że kod w Javie jest na wyższym poziomie abstrakcji - bo jest dokładnie przeciwnie. I taka jest teza artykułu. Jeśli ktoś wątpi, nich napisze aplikację korzystającą z Google Maps API bezpośrednio w JS (z wykorzystaniem np. Prototype + Ruby on Rails) vs. w GWT - stawiam skrzynkę piwa, że w tym pierwszym wypadku kodu będzie o 30% mniej.
Swoją drogą dziwi mnie fakt, że Google, którego pierwsza wersja wyszukiwarki powstała w Pythonie, postawił na Javę, język bardzo nieobiektowy i nieelegancki.
Browser: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090914 Gentoo Firefox/3.5.2
Browser: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090914 Gentoo Firefox/3.5.2
Jak się domyślam, głównym celem GWT jest nie elegancja i minimalizm kodu JavaScript ale możliwość budowania skomplikowanych aplikacji webowych z wykorzystaniem dopracowanych narzędzi dla Javy do analizy, refactoringu czy debugowania kodu.
Chyba z podobnych powodów Lift (komponentowy, webowy framework napisany w Scali) czyni podobnie. Cała warstwa klienta, włącznie z Ajaksem, odwrotnym Ajaksem (Commet) i w ogóle wywołaniem HTTP jest zasłonięta przez framework umożliwiając pracę z aplikacją webową (bezstanową z definicji) tak jak ze stanową, aplikacją desktopową. Podobne podejście jest też w smalltalkowym frameworku Seaside.
http://blog.zabiello.com
Browser: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; pl; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4
" postawił na Javę, język bardzo nieobiektowy i nieelegancki"
Chodziło ci pewnie nie o Javę która jest oczywiście w pełni obiektowa a o Java Script (ludzi często to mylą).
Przyznam się że też mnie dziwi dlaczego Google postawiło na JavaScript pisząc własną przeglądarkę i system operacyjny. JavaScript to język nieobiektowy, nieprzejrzysty i o praktycznie zerowej wydajności. Kompilacja JavaScript to trochę jak wyciąganie trupa z szafy. Moim zdaniem Google powinno zintegrować swój system oraz przeglądarkę z JVM i dodać api Javowe do modyfikacji struktury DOM.
Wykorzystywanie w tym celu JavaScriptu zmusza firmę do napisania własnego interpretera z kompilacją w locie do C, bibliotek GWT do kompilacji normalnych programów do JavaScript etc. Mnóstwo pracy dla idei.
Browser: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0
Browser: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0
Dla mnie to właśnie java to taki dzisiejszy assembler. Okropnie toporna, z mnóstwem często powtarzanych konstrukcji przeznaczonych do wykonania najprostszych czynności. Głupi odczyt pliku w javie można zrobić chyba na kilkadziesiąt sposobów.
To ma się nijak do lekkości javascriptu, dziedziczenia prototypowego, automatycznej konwersji typów, domknięć czy modyfikacji metod na każdym etapie działania skryptu.
Kiedy widzę jak łatwo w JS operować stringami, tablicami asocjacyjnymi czy nawet całymi klasami to napisanie czegokolwiek w Javie to prawdziwa katorga.
Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0
Browser: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.3 (KHTML, like Gecko) Chrome/4.0.223.11 Safari/532.3
Głupota na głupocie. Wg. autora OOP jest tylko modnym sloganem o.O Albo, że PHP nie jest językiem zorientowanym obiektowo. Zorientowany obiektowo to może być kod, a język może tylko dostarczać odpowiednich struktur do tworzenia obiektowo zorientowanego kodu. I PHP (przynajmniej od wersji 5) takich dostarcza.
Jeszcze sprawa dynamicznej typizacji, która to przyczyniła się do optymalnego działania aplikacji w perlu na komputerach o słabej mocy.? Kurde ja to zawsze myślałem, że dynamiczna typizacja wymaga więcej zasobów..chyba szybciej można porównać dwie zmienne wiedząc z góry, że obie to liczby chociażby..
Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.15) Gecko/2009101601 Firefox/3.0.15 GTB6 (.NET CLR 3.5.30729)
Nie chodzi o to, że program szybciej ma się wykonywać, tylko o to, że dużo szybciej można go napisać, a dynamiczna typizacja nie spowalnia w znaczący sposób jego działania.
Na serwerach wydajność nie jest taka ważna. Za godzinę pracy dobrego programisty czy admina możesz wydzierżawić serwer na cały miesiąc. Teraz odpowiedz sobie na pytanie: lepiej pisać o 2 ms szybsze skrypty w C poświęcając na to 2 tygodnie, czy w 10 minut zrobić to samo w Perlu?
>Głupota na głupocie PHP nie jest językiem
>zorientowanym obiektowo.
A co powiesz na to, że w niektórych językach prawie wszystko jest obiektem a cała biblioteka standardowa jest zrobiona na klasach? W PHP nie masz ani jednego ani drugiego. Nawet tak podstawowa sprawa jak obsługa stringów to luźne funkcje.
Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0
2. tak naprawde javascript jest jezykiem niesamowicie zwinnym i poza c++ poki co nie spotkalem niczego co by dawalo wieksze poczucie ze "inteligencja jest potrzebna" :).
3. java to jezyk "biznesowy" - a wiec umozliwiajacy pisanie duzych aplikacji przez zespoly o zroznicowanym poziomie kwalifikacji. i dlatego zdziwilbym sie gdyby jakakolwiek duza firma (a taka jest google) pozwolila sobie go zignorowac.
4. python w google jest uzywany jako "jezyk frontu" - zas engine to c++. i tak bylo od poczatku.
5. innowacyjny kod powstaje w c++. w javie pisze biznesowa infrastrukture - nie odkrywcza ale przynaszaca powazne zyski - chyba juz latwo zgadnac gdzie na rynku pozycjonuje sie gwt - duze ale schematyczne aplikacje ajaxowe pisane przez slabo zmotywowane hordy programistow w korporacjach ;)
Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)
Browser: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4