publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
40 skomentuj »

TAGI: webkit , dart , javascript , język skryptowy , google , apple , python , ruby , java , runtime

2011-12-08 14:15  |  Adam Golański

Google chce, by przeglądarki wyszły poza JavaScript: Python, Java i Dart uruchamiane bezpośrednio w WebKicie?

Google chce, by przeglądarki wyszły poza JavaScript: Python, Java i Dart uruchamiane bezpośrednio w WebKicie?

Na liście dyskusyjnej deweloperów engine'u WebKit pojawiła się ciekawa propozycja programisty Google'a, Vijaya Menona. Zauważa on, że dziś wiele języków kompilowanych jest do JavaScriptu, by pozwolić pisanym w nich programom na uruchamianie ich w przeglądarkach. A może by zrobić inaczej – i rozszerzyć ten engine skryptowy o obsługę innych środowisk uruchomieniowych?

Pomysł to niewątpliwie inicjatywa ludzi pracujących nad Dartem, językiem, który choć entuzjazmu poza Google nie wzbudził, to wciąż przez giganta widziany jest jako wartościowy następca JavaScriptu. Jednak nowe środowiska uruchomieniowe dla WebKitu nie miałyby ograniczać się tylko do Darta – Menon pisze, że mogłyby obsługiwać też Pythona, Javę, Ruby, Lua i inne języki.

Po co komu natywna obsługa Pythona, Darta czy Javy przez przeglądarkę? Programista Google'a wyjaśnia, że po pierwsze, wiele języków jest szybszych od JavaScriptu i wydajniejszych, gdy nie są wynikiem kompilacji do JS, po drugie, dostępność wielu środowisk uruchomieniowych to większy wybór dla programistów, po trzecie, jeśli języki te będą bezpośrednio obsługiwane w browserze, to profilowanie i debugowanie oryginalnego kodu będzie znacznie wygodniejsze, niż jest to w wypadku kodu wynikowego z kompilatora.

Poza słowami, ludzie z Google przygotowali już łatki: dostępne są zmiany pozwalające współistnieć wielu maszynom wirtualnym, dzielącym ze sobą ten sam DOM, oraz powiązania dla Darta. Menon wspomniał też, że pojawić by się miała nowa gałąź WebKitu multi-vm, eksperyment mający zademonstrować wartość wspomnianych wyżej założeń, i udowodnić, że nie zaszkodzi to wydajności samego JavaScriptu.

Reakcja pracujących głównie dla Apple'a deweloperów WebKitu jest zdecydowanie negatywna. Oliver Hunt otwarcie zaprzeczył stwierdzeniu, jakoby „ludzie już dziś używali wielu języków dla Webu”, twierdząc, że korzystają tylko z jednego – ECMAScriptu. Według niego, wprowadzenie bezpośredniego wsparcia dla niestandardowego języka jest działaniem przeciwko otwartej Sieci, pominięciem całego procesu uzyskiwania consensusu w rozwoju technologii webowych. Przypomniał, że już coś takiego mieliśmy od Microsoftu – i nazywało się to VBScript. Dart – i inne języki skryptowe w WebKicie – to doprowadzenie do sytuacji, w której w Sieci pojawi się kod działający tylko w jednej przeglądarce.

Oczywiście ludzie Apple'a mogą mówić co chcą, a Google i tak zrobi swoje. W czasach, gdy Safari jest niszową, nikogo prawie nie obchodzącą przeglądarką, która istnieje na rynku tylko dlatego, że domyślnie dołączana jest do OS-a X i iOS-a, a Chrome jest już być może numerem 2. na tym rynku, Google ma sporą swobodę manewru w pracach nad WebKitem.

Jeśli „odszczepieńcza” wersja engine'u renderującego, zapewniającego możliwość uruchamiania kodu w wielu językach pojawi się w Chrome, będzie to bezpośrednią zachętą dla programistów piszących w Pythonie, Rubym czy Javie, by zaczęli przygotowywać swoje aplikacje z myślą o systemie operacyjnym przeglądarce Google'a. Wówczas wystarczy tylko wprowadzić je do bijącego rekordy zainteresowania Chrome Web Store i sprzedawać – sukces gwarantowany, i dla liczących zyski programistów, i dla Google'a, mogącego zaoferować użytkownikom unikalną ofertę aplikacji.

Tylko co wówczas z otwartą Siecią? Czy Google Chrome stanie się Internet Explorerem drugiej dekady XXI wieku?

źródło: lists.webkit.org

publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
40 skomentuj »

Komentarze

  • lol

    #1 lol 2011-12-08 15:58:58 0

    Widać, że jest w Google grupka nieudolnych programistów zakochanych w Javie, która nie potrafi pojąć JSa i chce usilnie wprowadzić cokolwiek innego do webu. Co za czasy, nie lubie pisać w C ale chciałbym czasem napisać coś na jakiegoś AVRa, czy mam robić bojkot i domagać się wprowadzenia tam JSa, tylko dlatego, że nie umiem się nauczyć C? Ludzie ogarnijcie się, jeden język do tego, drugi do tego itp. itd.

    IP: 94.246.130.[...] Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • adi_82

    #2 adi_82® 2011-12-08 16:13:49 0

    Napisz mi bardziej skąplikowaną aplikacje w JS, nie prostego validatora sprawdzajacego w locie , lub wyskakujący alert, ale złożoną z obsluga historii itd. którą będziesz w przyszłości rozwijac, wymaga dobrego debagera, refaktoryzacji etc.

    W JS jest to prawdziwy masochizm.

    IP: 77.253.223.[...] Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • tron

    #3 tron 2011-12-08 16:22:46 1

    @adi_82 A co to za problem? Na jakie trudności się natknąłeś?

    IP: 62.87.168.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • holyboy

    #4 Holyboy® 2011-12-08 16:56:41 0

    @lol

    Dobrze ujęte.

    @adi_82

    Jak się nie umie to się nie zabiera za pisanie aplikacji "skąplikwanych".

    Dobrze zaprojektowana aplikacja jest "łatwa" w rozwoju, niezależnie od języka.

    IP: 213.180.137.[...] Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.0 Safari/535.11

  • adi_82

    #5 adi_82® 2011-12-08 17:39:43 0

    @tron to daj linka do dobrych fajnych narzedzi (najlepiej pod eclipse) lub tez frameworki (JQuery dla mnie nie wystarczy) wtedy jak bede mial czas przetestuje i ocenie. W czystym JS juz nie pamietam nawet kiedy pisalem. Ale nawet chodzby z faktu ze w js nie okresla sie jawnie typow przez to wypada gorzej juz na poziomie kompilacji.

    @Holyboy W javie pisze mi sie wygodniej, w szczególnosci jeśli nie pracuje się samemu.

    IP: 77.253.223.[...] Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • jacek2v

    #6 jacek2v® 2011-12-08 17:53:26 0

    Mi pomysł się podoba, a python w przeglądarce brzmi rewelacyjnie. Ale jeśli ma to wpłynąć negatywnie na prostotę i "kompatybilność sieci" to mogę jeszcze pożyć z JS :)

    IP: 178.36.31.[...] Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • MP73

    #7 MP73 2011-12-08 18:22:45 3

    JavaScript nie jest dobrym językiem programowania. Próba obrony go za wszelką cenę przypomina próby obrony PHP. "Miliardy much..."

    Dziwię się, że przez tak wiele lat język ten był "standardem" w WWW, podczas gdy na rynku jest mnóstwo języków lepiej przemyślanych, pozwalających tworzyć czytelniejszy kod i wydajniejszych od tego... czegoś.

    Google próbuje popchnąć WWW w przyszłość dając elastyczność i otwartość, przeciwnicy próbują zdusić tę koncepcję. Nic nowego.

    One size does not fit all, trzeba się z tym pogodzić.

    Nie zapominajmy też, że WebKit to już nie tylko silnik webowy, ale po prostu framework do pisania uniwersalnych aplikacji. Nie rozśmieszajcie mnie, że JavaScript wystarczy wszystkim. To tak samo, jak św. pamięci Sun twierdził kiedyś, że Java jest do wszystkiego. Nie jest.

    IP: 80.175.162.[...] Mozilla/5.0 (Ubuntu; X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0

  • przemelek

    #8 przemelek 2011-12-08 18:36:04 2

    @lol - developer jest w stanie dobrze znać jeden, góra dwa języki. Zwykle to jest tak, że jeden zna perfect, drugi w miarę znośnie, czyli potrafi pisać bez podpowiedzi z IDE i zna biblioteki, ale nie zna ich na wylot. Problem jest jeżeli developer musi pisać w obu tych językach przez co bardzo często musi pisać ten sam kod raz w jednym języku raz w drugim. No bo np. weryfikację tego co wpisał user warto zrobić po stronie klienta, ale po stronie serwera też ją trzeba zrobić. W przypadku pisania w zestawie Java/JavaScript (czyli najpopularniejszym w Enterpise) oznacza to, że nie można nawet łatwo przenieść kodu. Stąd Google ma np. GWT, które trochę sprawę rozwiązuje, ale od całkiem innej strony. Dart to coś co może im łatwo pomóc przeskoczyć to pisanie 2 razy tego samego kodu. Przeniesienie kodu z Java'y do Darta jest dużo prostsze po prostu. Architektem bibliotek Darta jest od wczoraj Josh Bloch czyli ojciec kolekcji w Java'ie (które zostały później można powiedzieć "przeniesione" do C#), czyli gwarantuje to dość dobrą konstrukcję tych bibliotek. Dla porównania w JS nie ma kolekcji, mapy się buduje przez oszukiwanie Object'u, choć nikt tak naprawdę nie wie (z osób używających) czy tam jest np. wykorzystywana hash tablica, czy drzewo czy co tam jeszcze).

    Nie wiem jakie piszesz aplikacje, ale przy 60 tysiącach linii kodu w JavaScript (a tyle mam w tej aplikacji którą piszę w pracy) JavaScript po prostu nie wystarcza, znaczy da się pisać ale przyjemne to nie jest i powoduje, że wielu programistów woli np. kod JS wrzucać do strony niż do oddzielnego pliku bo tak się nad tym jeszcze (w chwili tworzenia niestety tylko) daje zapanować. JavaScript nie ma żadnego mechanizmu pozwalającego na tworzenie wygodnych bibliotek, nie ma tak naprawdę możliwości sterowania dostępem, nie ma możliwości budowy API w oparciu o interfejsy i nie ma wielu innych rzeczy. Da się w tym pisać? Da, w Basicu też się da, ale sam JS bardzo siedzi w czasach gdy był tylko dodatkiem do stron.

    Robiłem testy na kolegach z zespołu i choć znają JavaScripta to wszystkim od razu spodobał się Dart bo jest po prostu bardziej przewidywalny niż JavaScript. Kod z cukierkami składniowymi można czytać bez zbytniego zastanowienia i człowiek od razu wie co czyta, w JavaScript jak się zaczyna używanie prototype, bazowanie na Truly i Falsy to ludzie zaczynają głupieć. No i JavaScript ma z DOMem problem, np. kolekcje zwracane z DOMa nie są do końca kolekcjami JavaScript'u i trzeba je specjalnie traktować. Do tego takie for (coś in cośInnego) w JavaScript działa jak lubi (tzn. teraz już w większości miejsc działa podobnie, ale drzewiej różnie bywało).

    JavaScript jest niezły, ale Dart od strony produkcji oprogramowania zapowiada się lepiej.

    IP: 80.238.67.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.0 Safari/535.11

  • tron

    #9 tron 2011-12-08 19:23:04 0

    @adi_82 Ależ ja nie muszę ci niczego szukać - zwłaszcza, że wiem tylko tyle, że robisz ultrazaawansowaną aplikację z miliardem linii kodu i JQuery ci nie wystarcza, czyli zwykłe baju, baju... Ajć, zapomniałem, że jest tak profesjonalnie zaprojektowana i napisana, że bez dobrego debuggera i refaktoryzacji nie dasz rady ruszyć dalej. A jak zaawansowany i rozbudowany framework by ci wystarczył? .NET byłby OK, czy dla ciebie jest zbyt prymitywny i nie spełnia twoich wymagań? Myślisz, że w takim Pythonie, Javie, czy jakimkolwiek innym języku izolowanym przez przeglądarkę i komunikującym się z DOM przez API, które ci do tego udostępni ta przeglądarka, zrobisz coś więcej-szybciej-lepiej niż w JS? LOL

    IP: 83.25.14.[...] Mozilla/5.0 (Ubuntu; X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0

  • slawek22

    #10 slawek22 2011-12-08 19:39:29 0

    @lol

    No i tu jest problem. Grupka nieudaczników ledwie dobrze nie wdrożyła drewnianego Darta, już zauważyła, że jest do kitu. Przypomina to mentalność gimnazjalnych "programistów". Żadnego języka nie umieją pojąć, więc każdy jest do kitu i co 2 tygodnie biorą się za kolejny. Już same skrypty po stronie serwera zupełnie się różnią od programowania UI klienta. Język nic tu nie da, nawet jeśli będzie taki sam jak Java.

    @adi: To że nie umiesz zainstalować firebuga czy blackbirda znaczy, że z ciebie z dupy programista a nie, że z językiem jest coś nie tak. Jak nie umiesz liczyć to znaczy, że nie umiesz liczyć, a nie że jest problem z rozmiarem tabliczki mnożenia :)

    @MP73: Google to próbuje pchnąć web do tyłu dlatego, że na świecie jest pełno debili którzy używają jQuery a JS to dla nich taki jakby php bez class i z mniejszą ilością this.

    @przemelek: co ty za brednie wygadujesz. JS ma objekty, składowe publiczne, zabezpieczone i prywatne. Ogólnie jeden z najlepszych modeli objektowych z wszystkich obecnie używanych języków. W JS praktycznie wszystko jest obiektem, z resztą bardzo prosto można tworzyć nowe i zmieniać już zdefiniowane. Chociaż jeśli znajomość JS waszych programistów ogranicza się do słowa kluczowego "function" to faktycznie praca z tym kodem to musi być makabra, bo w takim wypadku równie dobrze moglibyście to pisać w jakiejś odmianie Visual Basic.

    IP: 83.27.69.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • slawek22

    #11 slawek22 2011-12-08 20:04:19 0

    Jeszcze taka mała dygresja. Chyba "programistom" którzy dzisiaj "piszą" w JS metodą "kopiuj-wklei i się nie zastanawiaj" się wydawało, że dart nauczy ich programowania. Oczywiście tak się nie stało.

    Profesjonaliści widzą jakie to drewno i że to sobie można w dxxę za przeproszeniem wsadzić. Po tym artykule widać, że widzą to nawet sami twórcy. Nowy genialny język do wszystkiego. A nawet, żeby robił wcześniej to co JS to najlepiej byłoby dokoptować do VM-a jeszcze Pythona i Javę :) Śmiech na sali.

    Więc tak czy siak to się nie przyjmie. Gimnazjum będzie miało to gdzieś - tak samo dobrze się kopiuje i wkleja w jednym jak i w drugim, pros też bo po co mają coś robić w czymś co jest cholernie źle zaprojektowane, skoro oni umieją używać JS.

    Więc dart się nie przyjmie - może dostanie parę pochlebnych opinii na forum. To mi przypomina biadolenie programistów assemblera, że C jest wolne. No sorry, świat się zmienia a oprogramowanie jest coraz bardziej skomplikowane. Trzeba iść z duchem czasu. Może w przyszłości jakiś zaawansowany język z elementami programowania funkcyjnego (prolog)... na pewno nie powrót do drewnianych języków wzorowanych na C.

    Nie rozumiem po cholerę pisać na przykład 30% linijek kodu więcej. To daje jedynie 30% więcej szans na popełnienie błędu.

    IP: 83.27.69.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • przemelek

    #12 przemelek 2011-12-08 20:14:06 1

    @slawek22 - a czy ja napisałem gdzieś, że nie ma obiektów? Bo jak dyskutujesz ze mną używając jako argumentu twierdzeń, których nie zgłosiłem to mamy problem ;-)

    Tak, jest możliwość tworzenia prywatnych zmiennych i metod, ale albo są prywatne w obiekcie albo dostępne wszędzie, no chyba, że robisz obiekt w obiekcie i jeszcze raz w obiekcie. Nie ma w ogóle widoczności pakietowej, czyli tworzenie większych bibliotek polegać musi na tym, że masz jeden wielki obiekt, który i tak się posypie jak ktoś inny użyje tej samej nazwy globalnie.

    Nie możesz zbudować API przez interfejsy, nie masz pilnowania czy czasem nie używasz czegoś czego nie ma. Najprostszym przykładem jest jak ktoś zrobi literówkę i nazwie członka obiektu np. isProcessed, a ktoś używający tego będzie używał kodu if (isProcesed) i jest problem bo tutaj miało być zabezpieczenie by czegoś drogiego czasowo nie liczyć czy przetwarzać, ale przez urocze potraktowanie Unknown jako Falsy będzie liczenie ponownie. Co "najzabawniejsze" takie coś przejdzie przez testy i się dopiero w pewnym momencie okaże, że jakiś user użył tego na bardzo wolnej maszynie z wolnym IE i wtedy będzie płacz bo 20 sekund potrzeba przy każdej zmianie selekcji (załóżmy, że to jest w obsłudze eventa). W Dart'cie w trakcie komplikacji dostaniesz chociaż warning, że coś jest nieteges.

    Język programowania powinien stosować się do zasady najmniejszego zdziwienia, w JavaScript zasadą jest raczej maksymalne zdziwienie. Np. taki kwiatek, że w JavaScript nie ma liczb całkowitych, jak ktoś na szybko przeniesie kod z innego języka (np. z C czy Java'y) z używaniem > do przyśpieszenia mnożenia czy dzielenia przez potęgi dwójki to się mocno zdziwi, że mu się kod będzie wolniej wykonywał bo genialny JS najpierw dokona konwersji na liczbę całkowitą (kompletnie niejawnie), później dokona przesunięcia i znów to wszystko zrzutuje na Number. Albo taka zabawna rzecz jak rzucanie wyjątków w kodzie uruchamianym przez eventy... mogą sobie lecieć i tak się o nich nie dowiesz, a w JavaScript wyjątek może rzucić nawet głupie wywołanie metody bo metody może nie być.

    Dokąd nie ma alternatywy dla JavaScript to się go używa, ale JavaScript nigdy nie pozbędzie się swojego dziedzictwa, no chyba że postanowią złamać kompatybilność albo dodać sztuczne pomysły takie jak strict mode, którego i tak nie będzie nikt używał (kolejny XHTML będzie, czyli technologiczny ideał, ale nie do użycia), a to dziedzictwo mu ciąży i czyni go językiem który budzi wśród wielu ludzi nienawiść. A może budzić nienawiść skoro można w nim sobie nogę odstrzelić na miliony sposobów. Dlatego choć JavaScript był moim ulubionym językiem tak od 1999 roku to bardzo chętnie zamieniłbym go na Darta.

    IP: 80.238.67.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.0 Safari/535.11

  • slawek22

    #13 slawek22 2011-12-08 21:22:11 0

    >JavaScript nie ma żadnego mechanizmu pozwalającego na tworzenie

    >wygodnych bibliotek, nie ma tak naprawdę możliwości sterowania

    >dostępem, nie ma możliwości budowy API w oparciu o interfejsy i nie ma

    >wielu innych rzeczy.

    Jeśli piszesz takie głupoty to myślałem, że nie wiesz, że w JS są w ogóle obiekty. Bo to wszystko ma, tylko ty nie umiesz. No dobra, coś tam dzwoni. Dziedziczenia i scope nie rozumiesz totalnie i to co napisałeś świadczy po prostu, że język traktujesz jak C... No bo niby jak składowa obiektu może być widoczna poza nim? Tylko tak, że zapomniałeś wstawić var i przez to zamiast składową prywatną objektu zdefiniowałeś funkcję globalną.

    To może najpierw poznaj takie zagadnienie jak dziedziczenie... przykład dla bardzo początkujących.

    function a()

    {

    this.a = function x() { alert('x');}; // public

    var b = function y() {alert('y');}; // private

    };

    dziedziczenie

    function aa()

    {

    $ob = new a();

    $ob.x = function c() {alert('x');};

    return $ob;

    }

    var _aa = new aa();

    Jak chcesz coś bardziej zaawansowanego to:

    http://www.crockford.com/javascript/inheritance.html

    http://javascript.crockford.com/prototypal.html

    To jest zrobione porządnie, tzn. tak, że nic nie jest widziane w globalnej przestrzeni nazw. Tzn. jak się umie to się da. I ani nie ma 20 klas w klasie ani składowych widocznych globalnie. Akurat enkapsulacja to coś co w JS jest realizowane dużo lepiej niż w Javie i C... no chyba, że się nie umie w nim pisać :P

    IP: 83.27.69.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • slawek22

    #14 slawek22 2011-12-08 21:31:46 0

    Aha, może napisz co jest nie tak z tym modelem.

    To, że w twoim kodzie dziedziczenie robisz tak, że zagnieżdżasz 10 klas w klasie a w globalnej przestrzeni nazw masz burdel bo nie umiesz nawet zdefiniować składowej publicznej to już wiemy :)

    Więcej! Nie wiesz do czego służy "var". Po prostu błądzisz po omacku. Definiujesz coś i nawet nie znasz scope, nie wiesz gdzie to będzie widoczne. To tak samo jakbyś w C nie wiedział do czego służy function i marudził, że masz burdel w zmiennych.

    >ale albo są prywatne w obiekcie albo dostępne wszędzie, no chyba, że

    >robisz obiekt w obiekcie i jeszcze raz w obiekcie.

    Może tak: nie rozumiesz takiej podstawy podstaw jak dziedziczenie... zakres zmiennych, a gadasz jakbyś wszystkie rozumy pozjadał :)

    Zatrudnijcie tam u was w firmie kogoś kto cokolwiek w JS pisał i choć trochę ten język rozumie bo sobie cholerną krzywdę robicie. To znaczy programistę a nie magika od jQuery :) Teraz rozumiem... jeśli tak piszecie kod to pewnie JS to najbardziej przez was znienawidzona technologia... a wystarczyło przecztać 2 strony dobrej książki.

    Rację (częściowo) masz jedynie co do zmiennych numerycznych. W JS wszystko to float.

    IP: 83.27.69.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • lol

    #15 lol 2011-12-08 22:33:03 0

    @slawek22

    Dobrze, że ktoś taki jak Ty potrafi jeszcze zabrać głos w portalu poświęconym tematyce webowej.

    JS potrafi dużo i będzie potrafił jeszcze więcej. Ostatnimi czasy rozwija się niesamowicie szybko, a właściwie jest odkrywany na nowo, doceniany przez coraz większą rzeszę ludzi i jakoś nie zapowiada się żeby grupka "gimnazjalistów", którzy skończyli czytać o JS na wikipedii czy też innym posklejanym kursie, mogła mu zaszkodzić. Informacje na stronach Mozilli, Opery, Crockforda potrafią pokazać, że JS potrafi na prawdę dużo i nie ma powodu żeby się wstydzić przed jakąś tfu Javą. Nawet MS wpakował się z nim do swojego nowego systemu, a nie sądzę żeby Ci kolesie robili coś takiego gdyby to nie było wg nich dobre.

    Prawdziwe programowanie w JS zaczyna się gdy zaczynasz kombinować jak uzyskać/zrobić coś, co widziałeś u kumpla na pulpicie, ale do tej pory nie śniło Ci sie jak to zrobić webowo. Ktoś nawet kiedyś napisał: "jeżeli można coś zrobić w JS to zostanie to zrobione w JS".

    I to, że ktoś go nie ogarnia, nie oznacza, że język jest do bani. Zostawcie webdeweloperom to w czym lubią pisać, a desktopowcom swoje klocki.

    IP: 94.246.130.[...] Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • przemelek

    #16 przemelek 2011-12-08 22:57:19 1

    @slawek22 - ta, widzę, że znów naszło Cię to co masz zawsze jak argumentów brakuje, czyli próba obrażania przeciwnika, odpowiadania na pytania których nie postawił i "dyskusji" z argumentami, których nie postawił. Co do tego, że nie znamy JavaScript. Nie wiem czy znasz ale taka biblioteka jak Rico u nas zaczęła, później ją firma otwarła.

    A teraz do meritum. Tak, jest obiektowy, jest dziedziczenie, ale możliwe, że nie wiesz, ale są 4 poziomy widoczności. Private, protected, default/friendly i public. W JavaScript zrobienie default/friendly przypomina łatwość lizania się po łokciu, przez co nie jesteś w stanie łatwo zbudować biblioteki, którą możesz rozwijać przez dodawanie kolejnych plików bo zabawa z namespace'ami jest tak skomplikowana jakby się co najmniej rakietę w kosmos wysyłało. Przez to zresztą większość, jeśli nie wszystkie biblioteki dla JS są monolityczne, masz jeden gigantyczny plik JS, albo jakieś porąbane zależności, że najpierw trzeba załadować plik A, później B, później C i tak dalej. Albo biblioteka używa plomby w postaci tworzenia w locie elementów SCRIPT by udawać ładowanie modułów. Ta, nie ma to jak sobie życie ułatwić.

    A wystarczyłoby wprowadzić package/library.

    Ale nawet wprowadzenie łatwych i przyjemnych pakietów nie likwiduje problemu z Falsy i Truly, które są gigantycznym nieporozumieniem gdy nie masz narzędzia pozwalającego na weryfikację kodu przed wykonaniem.

    Rację mam w ciut większej ilości rzeczy, ale jak taki świetny jesteś to powiedz mi jak JavaScript realizuje dostęp do właściwości w Object? To jest hash tablica, drzewo, czy co jeszcze?

    A na koniec bo dyskutować z Tobą nie warto ;-) tak wiem, że JavaScript jest potężnym narzędziem (przykład tutaj http://www.przemelek.pl/file/fastJSGourad2newFPS1.html np. zabawka którą sobie kilka lat temu stworzyłem, czyli cieniowanie Gourada liczone w real time w JavaScript, albo rozwiązywarka Sudoku http://www.przemelek.pl/file/sudokuF.html) , ale jego użycie jest nieprzyjemne jak cholera.

    IP: 80.238.67.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.0 Safari/535.11

  • adi_82

    #17 adi_82® 2011-12-09 10:10:10 0

    @tron

    ".NET byłby OK, czy dla ciebie jest zbyt prymitywny i nie spełnia twoich wymagań? "

    Tak nie twierdze. Przyznaje że nie wiem jak to wyglada w Net, więc nie bede tu się sprzeczał. Nie wiem co uzywasz na back-end pewnie C#, ale wydaje mi się to czasem jest ciężej jeżeli używasz JS i na przykład C#. Po prostu wygodniej jest wszystko w jednym. Tym bardziej jeżeli Front-end w JS jest rozbudowany.

    Ale to mniejsza o to bo zaszlo pewne nieporozumienie:

    " Myślisz, że w takim Pythonie, Javie, czy jakimkolwiek innym języku izolowanym przez przeglądarkę i komunikującym się z DOM przez API, które ci do tego udostępni ta przeglądarka, zrobisz coś więcej-szybciej-lepiej niż w JS?"

    No właśnie. Miałem na myśli to że jeśli nie piszesz bezposrednio w JS to wcale nie znaczy ze jego nie uzywasz i nie jestes ograniczony do DOM itd. Chodziło mi o kompilacje do JS https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS

    A w przypadku JAvy mialem na mysli GWT. Gdzie można również korzystac z API DOM i pozniej kompilowane wszystko do JS. Korzystasz z Development mod http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html i kompatybilnosc z przegladarkami Cie w ogole nie obchodzi. A jak komus sie nie podoba budowanie interfejsu na wzor Swinga to robi to w Uibinder.

    I masz wygodniej, nie trzeba mieszac i lawirowac pomiedzy JS a Java tylko robisz wszystko w jednym. I można bardziej logicznie i wygodniej projektowac wzorzec i robi to sie w MVP nie MVC.

    IP: 77.253.223.[...] Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • vincent

    #18 vincent 2011-12-09 11:35:57 0

    @slawek22

    Tak, coś jest nie tak z tym modelem:

    >>> _aa instanceof aa

    false

    IP: 89.75.108.[...] Mozilla/5.0 (Ubuntu; X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0

  • jacek2v

    #19 jacek2v® 2011-12-09 13:23:52 0

    @slawek22

    Za "durzo" wiesz i jesteś za "mondry" dla swoich interlokutorów :D

    Ale to nie dziwi, bo jak się wie wszystko najlepiej to nie ma mądrzejszego :P

    IP: 79.189.5.[...] Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • janqu

    #20 janqu® 2011-12-09 14:42:52 0

    Technologie internetowe, które wprowadzane są teraz w przeglądarkach internetowych, a nie są jeszcze standardami, sprawiają, że webdeveloperzy i użytkownicy stają się królikami doświadczalnymi. Jeżeli Dart się przyjmie, to się przyjmie, jeżeli nie, to nie - proste. Google ma pieniądze na implementację i eksperymenty, więc niech to robi, przecież nie zastępuje javascriptu w ten sposób. Jeśli webdeveloper ma dotrzeć do jak największej liczby użytkowników, to i tak wybierze javascript, jeśli będzie chciał w wolnym czasie 'pogrzebać' w darcie czy javie, to jego biznes. Nie jestem może miłośnikiem Google, ale to ta firma ruszyła sieć do przodu, a nie Microsoft ze swoim VBScriptem czy innymi pomysłami.

    IP: 92.40.253.[...] Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0

  • slawek22
  • janqu

    #22 janqu® 2011-12-09 19:41:37 0

    A może taka sytuacja:

    Ktoś zaczyna przygodę z programowaniem w ogóle. Tak wyszło, że trafia na Chrome z obsługą języka Python czy Java. Poznaje składnie, zaczyna 'bawić' się w małe aplikacje. Po jakimś czasie jednak stwierdza: 'strony internetowe po stronie klienta, to nie dla mnie - może po stronie serwera?'. Dobrze się składa - tam m.in. Java i Python. Jednak później pokochał grafikę 3D i Blendera, a tam... Python. Pokochał Linuksa (może się trochę zapędziłem ;) - tworzy aplikacje desktopowe w Javie czy Pythonie. Nagle z niewiadomych przyczyn jego dziewczyna zachodzi w ciążę (to nie historia o mnie) - postanawia zarobić pieniądze tworząc gry na telefony komórkowe. Znajomość Javy w takiej sytuacji jest lepsza niż brak tej znajomości.

    IP: 92.40.253.[...] Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0

  • slawek22

    #23 slawek22 2011-12-09 21:34:30 0

    Tylko, że jak jest coś do wszystkiego to jest do niczego. Jak znasz Javę to możesz pisać bardzo dobre aplikacje serwerowe, ale tylko kiepskie gry i bardzo kiepskie aplikacje na desktop.

    Myślisz, że na świecie jest jedna aplikacja desktopowa i jedna gra do napisania dlatego trzeba wszystko umieć?

    Inny problem jest taki że programista serverside nigdy nie będzie pisał gier. Na SS masz dużo zabezpieczeń w grach dużo matematyki. Jak na rok wypadniesz z obiegu to koniec, ciągle trzeba się szkolić. W zupełnie innym zestawie umiejętności.

    I tu jest problem. Nowi programiści chcą złapać wszystkie sroki za ogon a później kończą w 3 osobowych agencjach interaktywnych, robiąc w pojedynkę grafikę, kod i backend do bardzo kiepskich stron internetowych.

    Python na desktopie w ogóle nie istnieje. Tak jak PHP. Był w Pythonie kiedyś bardzo kiepski i zabudowany klient bittorrenta. Dzisiaj to jedynie .NET pod Windows albo multiplatformowo C++. Od biedy jakiś VB, CB czy Java dla biznesu.

    Ja ci opowiem inną historię. Kumpel lubił linuxa i tylko tym się zajmował. Jednej linijki w C by nie napisał. Dzisiaj jest head adminem w dużej firmie i ma pod sobą 20 ludzi. Inny gość "od zawsze" siedział w Visual C, disiaj tworzy oprogramowanie do modelowania w niemieckiej firmie. Oni nawet jak firma padnie to w tydzień znajdą robotę. Reszta roku robiła małe strony, bawiła się trochę w Javę tydzień później w Pythony, odpalali openGL i rysowali teksturowane sześciany. Bo wcześniej pewnie nic nie robili to im się wydawało, że obracający się kwadrat jest fajny :)

    Dzisiaj tną HTML-a i robią strony piekarni w dżumli, narzekają, że rynek IT jest do dupy bo więcej by zarobili układając kafelki.

    Jak masz 14-15 lat, albo nawet w liceum to możesz się tak bawić. Ale jeśli już jesteś na studiach to tracisz jedynie czas. Skończysz to będziesz umiał pociąć prosty layout z photoshopa i napisać hello world w 15 językach programowania. Wiem to wynik tresury w dzisiejszym systemie szkolnictwa który wmawia ludziom, że muszą wszystko wiedzieć i wszystko umieć. Tylko zobacz gdzie kończą ludzie którym się wydaje, że ten system się sprawdza :)

    Istnieje prosty powód dlaczego dobry lekarz wybiera specjalizację i jest całe życie dobrym lekarzem danej specjalności. Nie neurochirurgiem a tydzień później dermatologiem. To tak nie działa.

    IP: 83.27.75.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • janqu

    #24 janqu® 2011-12-09 23:59:41 0

    @slawek22

    Proszę, nie traktuj mojej historyjki tak poważnie. Miałem właśnie na myśli nastolatka, którego utrzymują jeszcze rodzice (najlepiej bogaci) i nie musi się jeszcze martwić, jak tu zarobić na chleb. Osoba, która ma czas i chce popróbować kilku języków programowania. Może to właśnie będzie dobry start dla niektórych.

    Rozumiem, gdyby projekt był tworzony za pieniądze publiczne - można by było się wtedy spytać po co. Tutaj mamy firmę, która sama ryzykuje i wykłada na to pieniądze. Jeśli projekt ruszy, w internecie pojawią się artykuły, jak to działa. Jeśli odzew na projekt będzie pozytywny, to inicjatywa przetrwa, jeśli po jakimś czasie okaże się jednak, że pomysł był nietrafiony, to projekt przekształci się w coś innego lub zostanie w części lub w całości porzucony. Sądzę, że znajdzie się pewna grupa osób, która będzie zainteresowana tym pomysłem.

    IP: 92.40.253.[...] Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0

  • eimi

    #25 eimi® 2011-12-10 10:49:40 0

    @Sławek, python na windowsowym desktopie nie istnieje. Poza nim - często się z nim spotkać można... nawet z grami w Pythonie. Jedna z moich ulubionych, Kiki the Nanobot to właśnie pythonowy projekt http://kiki.sourceforge.net/

    A co do tego, co warto robić... to przede wszystkim to, do czego mamy serce. No i warto ogólnie znać się na technice. Też kafelkach i robotach budowlanych. Jak branża IT w końcu upadnie i będziemy odbudowywali świat po nuklearnej apokalipsie, to warto wiedzieć, jak zrobić maszynę parową i jak korzystać ze spawarki :D.

    IP: 90.156.32.[...] Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/17.0.942.0 Safari/535.8

  • blackbear

    #26 BLACK BEAR® 2011-12-10 11:12:25 0

    eimi, jesteś pewien że "python na windowsowym desktopie nie istnieje"?

    Zacytuję stronę o Pythonie (http://www.python.rk.edu.pl/w/p/python-co-jest-i-do-czego-mozna-go-uzyc/):

    Do czego można użyć Pythona?

    Aplikacje desktopowe działające pod kluczowymi systemami operacyjnymi (MS Windows, OS X, Linux) można bez problemu pisać także w Pythonie za pomocą bibliotek takich jak PyQt4, PyGTK, wxPython, czy wbudowanej biblioteki tk. Za pomocą aplikacji py2exe można stworzyć gotowe aplikacje (exe) dla systemów MS Windows, a za pomocą py2app gotowe aplikacje dla OS X.

    Skrypty i aplikacje Pythonowe przydają się także w zastosowaniach naukowych, czy finansowych gdzie potrzebne jest przetwarzanie danych i generowanie wykresów, zestawiań, plików PDF, arkuszy Excela, czy ODT/ODS. Za pomocą Reportlab wygenerujemy pliki PDF i sformatujemy wszelakie raporty w nim zawarte. Matplotlib oferuje generowanie wykresów różnego typu. Scipy oferuje implementacje różnych algorytmów do skomplikowanych obliczeń w Pythonie. PIL zapewnia obróbkę grafik (jak skalowanie, wyostrzanie, obracanie itd.), a xlwt i xlrt zapis i odczyt arkuszy Excela.

    Gry i aplikacje wykorzystujące 3D też można stworzyć z wykorzystaniem Pythona. Częstym rozwiązaniem jest udostępnienie w Pythonie API silnika gry napisanego w C/C++. Takim przykładem jest np. Świątynia Pierwotnego Zła. W Pythonie mamy dostęp do kilku silników umożliwiających obsługę grafiki 3D, 2D i pozostałych komponentów potrzebnych do aplikacji tego typu - PyGame, PyCrystal (API na CrystalSpace), Python-Ogre (API na Ogre 3D), pyopengl (API na OpenGL).

    Ja od siebie dodam że spotkałem się z rozszerzeniami do GIMPa i do Scribusa także pisanymi w Pythonie.

    Przyglądam się jakiś czas temu językowi i zastanawiam nad jego nauką...

    IP: 77.254.13.[...] Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0

  • vincent

    #27 vincent 2011-12-10 11:30:15 0

    @slawek22

    Nie bardzo wiem jak duck typing miałby mi pomóc w rozpoznawaniu typu, miałbym sobie ustawiać jakiś atrybut np: o.__class__ = "Person" ? Zmienna _a powinna być typu "a" (var _a = new a();), nie widzę powodu dla którego miała by być typu "a+" albo "b". A może operatora "new" też nie powinienem stosować w js na rzecz (var _a = powerConstructor({});) ? A może wygodniej mi jest pisać w pythonie gdzie nie mam tego typu wątpliwości.

    IP: 62.244.129.[...] Mozilla/5.0 (Windows NT 6.0; rv:8.0) Gecko/20100101 Firefox/8.0

  • janqu

    #28 janqu® 2011-12-10 13:18:13 0

    Jeżeli Microsoft nie zaakceptuje pomysłu, a jest prawdopodobieństwo, że tak właśnie będzie, to inne języki w aplikacjach webowych nie będą stosowane. Jeśli nie w otwartej sieci, to może w zastosowaniach korporacyjnych, gdzie Chrome pełniłby rolę interfejsu między użytkownikiem a systemem? A może wykorzystać w aplikacjach webowych przeznaczonych na Androida?

    Lata szkolne są już dawno za mną, zastanawiam się więc, czego uczą się dzisiaj uczniowie na zajęciach z informatyki zorganizowanych dla tych, którzy chcieliby nauczyć się czegoś więcej. Może Chrome dobrze by się sprawdził jako środowisko związane z zadaniami z programowania. Mielibyśmy jedno środowisko, w którym starałoby się rozwiązywać problemy w różnych językach, poznając ich cechy jednocześnie.

    Zastanawiam się też, jak mogłyby wyglądać projekty, w których składowe napisane są w różnych językach, jak wyglądałaby warstwa komunikacji między poszczególnymi modułami.

    Czy Chrome może stać się drugim IE? Nie sądzę. Programy te reprezentują dwa inne światy, firmy, które je stworzyły, to dwa inne światy. Stan technologii internetowych, kiedy IE totalnie dominował rynek, to nie to samo, z czym będziemy mieli do czynienia za parę lat.

    VBScript przypinał nas do jednego 'słusznego' systemu, a z tego co pamiętam, to nadawał się tylko do detekcji Flasha w IE. ;)

    IP: 94.197.127.[...] Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0

  • dziobas

    #29 dziobas® 2011-12-10 14:28:36 1

    @slawek22: Ja się na JS nie znam, ale przecież tam niema normalnych klas (class). Cały model obiektowy opiera się na prototypach. Z takim podejściem pisanie symulacji fizycznych (lub gier), z setkami rożnych obiektów, to mordęga. A może się mylę? Chrome według Googla ma przecież być konsolą do gier. Żeby to osiągnąć trzeba przyciągnąć DOBRYCH programistów gier którzy wcześniej tworzyli w C++. Po to wprowadzają NativeClienta. Java to taki C++ z odśmiecaniem pamięci, jak ktoś pisał w C++ to łatwo przejdzie na Javę. Python natomiast to łatwy w nauce język, wystarczy przeczytać 'Przewodnik po języku Python' o JS tego powiedzieć niemożna. Do tego Python idealnie nadaje się do oskryptowania gier. Np. Unity game engine ma własny dialekt Pythona zwany Boo.

    Druga sprawa, że często osoby piszące serverside piszą też po stronie przeglądarki. I tego nie zmieni twój tekst, że każdy powinien się specjalizować w czymś innym. Java i Python to strategiczny wybór Googla, Google app engine też działa na Javie i Pythonie.

    Zresztą w pisaniu gier i tak będzie się odchodzić od C++, tylko engine będzie napisane w c++ przez ekspertów, reszta w jakimś języku skryptowym. Teraz często firmy wykupują engine gdzie siedzi cała fizyka i matematyka i większość programistów gier nawet tego nie ogląda tylko wywołuje funkcje.

    Natomiast programowanie po serverside to wpisanie i wybranie czegoś z bazy danych. Co do zabezpieczeń to trzeba tylko wiedzieć żeby haseła trzymać za pomocą ich hashy i że trzeba użyć mysql_real_escape_string na danych otrzymanych od użytkownika. Tyle dla 99.8% programistów starczy.

    Piszesz że java i python nie przyjęły się na deskopie. Cuż na deskopie nie przyjęło się nic co wymaga środowiska uruchomieniowego, poza oczywiście C#. Wirtualna maszyna Javy Suna była zbyt ociężała i trzeba było ją zwykle oddzielnie pobierać, py2exe to niestety jakieś nieporozumienie. Google rozwiąże problem dystrybucji dostarczając środowisko uruchomieniowe wraz z Chrome. Więc te języki będą mały większą szanse się przyjąć. Przypominam że JS zdobył tylko popularność wyłącznie w przeglądarkach i to tylko dlatego że nie było wyboru.

    Piszesz, że w javie można pisać tylko słabe gry. Wszystko można pisać we wszystkim. Dawno temu pewien homoseksualista udowodnił, że każdy algorytm można napisać za pomocą maszyny Turinga. Języki z kompilowalne z silnym typowaniem (Java) będą zawsze szybsze od interpretowanych. Prędkość przy grach się przydaje.

    Dziobas

    IP: 80.239.242.[...] Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.8.131 Version/11.11

  • slawek22

    #30 slawek22 2011-12-11 04:39:37 0

    @vincent

    Jest takie coś jak zbiór dobrych praktyk programistycznych. W JS się pobieranie informacji o typach przyjmuje za złą praktykę. Tak samo jak np. w .NET odwoływanie się do dll-i. Z resztą jeśli musisz znać typ obiektu to w każdym języku OOP oznacza to, że kod nie jest dobrze zaprojektowany. Od tego jest polimorfizm albo interfejsy.

    Mi może być wygodnie pisać w AC Logo, co nie znaczy, że to dobry język. Jeśli chcesz używać klasycznego modelu OOP to JS nie jest dla ciebie. Tak samo, jeśli chcesz mieć bezpośredni dostęp do pamięci to używasz C a nie Java.

    Już ci dałem przykład na to, że w JS model obiektowy jest tak elastyczny, że znajomość typu i tak nic ci nie daje. Polecaną i używaną praktyką (wszędzie i to ładny kawał czasu) jest po prostu sprawdzanie czy obiekt zawiera właściwości albo obsługuje metodę.

    @dziobas

    Jasne, że się mylisz. To inny model OOP bardzo trudno się przestawić, ale jest dużo przyjemniejszy w użyciu bo odpada wiele przestarzałych koncepcji z C i Java. Dawniej też był płacz, że w Windows nie ma bezpośredniego dostępu do pamięci karty graficznej, gdyby ludzie się nie przestawili to do dziś gry byłyby pisane w MSDOS. No ale możliwe że dzisiaj ludzie się nie przestawią i web będzie "pisany" w C/Java bo to dużo poważniejsza zmiana. Szczerze to wolałbym .NET... przynajmniej jest C# w którym szybko się pisze a język nie jest z drewna jak Java (pewnie dlatego, że Sun próbował zachować kompatybilność a MS mógł zacząć od 0).

    JS to nie C ani Java... tylko język który ma składnię C i na tym podobieństwa się kończą. Masz rację, że nawet bardzo dobry programista w C jeśli będzie JS próbował traktować jak C to nic w tym nie napisze, bo przy 200-300 linijkach będzie miał taki burdel, że przestanie ogarniać kod.

    >Piszesz że java i python nie przyjęły się na deskopie. Cóż na deskopie

    >nie przyjęło się nic co wymaga środowiska uruchomieniowego

    Każda wersja Visual C++ wymaga środowiska uruchomieniowego. Tak samo jak Delphi i BCB. Więc praktycznie każda gra i każde większych rozmiarów oprogramowanie ma dołączone VCRedist (bo np. winXP nie zawiera nowszych wersji). .NET też się ma dość dobrze na desktopie, jakoś z dołączaniem redist nie ma problemów.

    Alternatywą dla JS zawsze był VBscript (dawniej oba były równorzędne).

    > Wszystko można pisać we wszystkim.

    Grubasy też mogą grać w koszykówkę, tylko jakoś ich nie widać w NBA :)

    IP: 83.10.80.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • vincent

    #31 vincent 2011-12-11 10:12:05 0

    @slawek22

    Nie widzę bezpośredniego związku pomiędzy używaniem biblioteki "X", a stosowaniem pewnej koncepcji występującej w różnych językach programowania "instanceof". To jest Twoje uzasadnienie poprawności przedstawionego przez Ciebie modelu "dziedziczenia". To że według Ciebie niezbyt dobrą praktyką programowania jest sprawdzanie typu obiektu ? Rozumiem że fabryki i obserwatorzy są nie dla Ciebie bo najczęściej tam można się natknąć na sprawdzanie typu, wolisz programowanie funkcyjne.

    IP: 62.244.152.[...] Mozilla/5.0 (Windows NT 6.0; rv:8.0) Gecko/20100101 Firefox/8.0

  • slawek22

    #32 slawek22 2011-12-11 15:32:47 0

    Nie biblioteki X ale każdej biblioteki. Chyba wiesz co to znaczy koncepcja? I nie według mnie, gdybyś przeczytał linki to byś wiedział. Czyli według Crockforda. Gdybyś czytał stackexchange to wiele osób uważa tak samo, że to taki "hack" na źle zaprojektowany kod.

    Żeby zaimplementować oba wzorce nie potrzebujesz instanceof. Z resztą dalczego w JS mają one nie działać?

    Na przykład przy implementacji równości nie potrzebujesz sprawdzania typu instancji. Porównujesz właściwości i implementowane metody.

    http://www.javapractices.com/topic/TopicAction.do?Id=31

    "Anytime you find yourself writing code of the form "if the object is of type T1, then do something, but if it's of type T2, then do something else," slap yourself.

    IP: 83.10.80.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • vincent

    #33 vincent 2011-12-11 18:09:00 1

    @slawek22

    Myślisz że nazwę "powerConstructor" sam sobie wymyśliłem czy może wyciągnąłem to z linku który wstawiłeś ? Wiele osób wraz z panem Crockfordem może i tak uważa, może nadużywali tego w młodości i mają teraz złe skojarzenia. Jak to nie potrzebuje instanceof, właśnie że czasami potrzebuję. A Twój model uniemożliwia mi jego wykorzystanie. A ja bym naprawdę bardzo chciał się dowiedzieć z czy to pająk, ryba a może zwierz.

    IP: 62.244.152.[...] Mozilla/5.0 (Windows NT 6.0; rv:8.0) Gecko/20100101 Firefox/8.0

  • slawek22

    #34 slawek22 2011-12-11 21:24:02 0

    powerconstructor to pewna koncepcja, raczej związana z emulacją starego modelu OOP jeśli umiesz w JS pisać to tego nie potrzebujesz. Po prostu operujesz na wyższym poziomie abstrakcji, tak samo jak poziom abstrakcji C jest wyższy niż assemblera i nie musisz wiedzieć, czy liczby int to little czy big endian. Więc new jest jak najbardziej polecane. Jeśli chcesz wiedzieć czy to ryba czy to pająk możesz sobie zadeklarować metodę albo właściwość.

    Tutaj nie piszesz spaghetti, które za pomocą ogromnego bloku if-elsów, sprawdza, czy coś jest rybą czy kotem ale wszystko (w dobrze zaprojektowanym kodzie) komunikuje się za pomocą callbacków.

    Już tłumaczyłem (chyba 3 albo 4 razy) dlaczego instanceof w JS nie ma sensu. Powtórzę jeszcze ostatni raz: bo nie możesz określić typu objektu w przyjętym modelu dziedziczenia, gdzie możesz dany obiekt modyfikować na każdym etapie działania skryptu. M.in. dodawać i usuwać metody.

    Jak masz pająka i dodasz mu metodę biegnij to to dalej pająk czy nie? A jeśli dodasz metodę leć? A jeśli miał wcześniej właściwość cena... i tą właściwość usuniesz? A jeśli skasujesz nogi i dodasz skrzydła?

    Ty próbujesz się dowiedzieć, jak z JS zrobić Javę. No równie dobrze możesz z C++ próbować zrobić Visual Basic a odpowiedź to "nie da się"... do pewnego stopnia się da, ale to bardzo niewygodne, więc po co sobie głowę zawracać, lepiej zostać przy rozwiązaniu które najlepiej nam leży :)

    Po prostu próbujesz udowodnić słuszność z góry postawionej tezy, tzn. że JS jest do kitu bo nie działa jak Java.

    IP: 83.10.80.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • vincent

    #35 vincent 2011-12-12 00:10:04 0

    Zdaje się że utartą praktyką w js stosowaną przez różne framemworki (extjs/prototype/mootools) jest dodawanie metod do istniejących typów string, object, array. I co string przestaje być stringiem ? Ja takiej tezy nie stawiam. Twierdze że przedstawiony przez Ciebie model dziedziczenia jest zły. Jeżeli instanceof nie ma sensu, to może napisz jak w takim modelu wygląda przeciążanie i wywoływanie przeciążanej metody na rodzicu ?

    IP: 62.244.152.[...] Mozilla/5.0 (Windows NT 6.0; rv:8.0) Gecko/20100101 Firefox/8.0

  • slawek22

    #36 slawek22 2011-12-12 06:26:48 0

    No widzisz a ty dalej o tym samym. W tym wypadku nie przestał być stringiem ale mógł przestać nim być ze względu na właściwości modelu obiektowego o których już 5 razy pisałem. Co prowadzi do powstawania trudnych do wykrycia błędów, bo instanceof nie może działać poprawnie w tak dynamicznym modelu. Jak walisz głową o ścianę to też zwykle nic złego się pewnie nie stanie chociaż nie jest to mądre. Na pewno to zła praktyka. W Java każda klasa potomna ma właściwości rodzica a w JS nie koniecznie. Każdy język ma zbiór dobrych i złych praktyk, Java też go ma... na prawdę :)

    Chyba miałeś na myśli overridding a nie overloading:

    function ch()

    {

    var p = new parent();

    var __fn = p.fn;

    p.fn = function() {



    __fn();

    };

    return p;

    }

    Chociaż znowu pewnie źle bo znowu nie wygląda jak Java :)

    Overloading nie jest obsługiwany przez język. Tzn. nie możesz mieć takiej samej funkcji z różnymi argumentami. Zwykle albo przekazujesz wymagane argumenty a resztę w ostatnim parametrze jako składowe objektu, albo po prostu sprawdzasz typ przekazanych danych.

    IP: 83.27.75.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • vincent

    #37 vincent 2011-12-12 18:18:32 0

    Tak, miałem na myśli nadpisanie metody. Tak też później pomyślałem, że można sobie metodę podstawić pod jakąś zmienną i później ją wywołać. Zmyliło mnie var _aa = new aa(); bo w obrębie funkcji "aa" nie możesz użyć "this" tylko musisz się odwoływać do "$ob", a samo _aa jak instanceof pokazało nie ma nic wspólnego z prototypem aa. Tak więc, da się :) Ale ja dziedziczeniem to bym tego nie nazwał.

    IP: 213.195.189.[...] Mozilla/5.0 (Windows NT 6.0; rv:8.0) Gecko/20100101 Firefox/8.0

  • slepiec

    #38 slepiec 2011-12-14 23:14:40 0

    tak czy owak

    uruchomienie pythona czy javy w webkicie pomoglo by w debugowaniu.

    niech release idzie jako JS,

    ale w trybie debug webkit to chwyta jako java

    IP: 82.146.243.[...] Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.10 (KHTML, like Gecko) Chrome/17.0.948.0 Safari/535.10

  • jacek2v

    #39 jacek2v® 2011-12-15 18:47:24 0

    @slepiec:

    Tylko nie to :) Debugowanie czegoś innego niż zostanie oddane do produkcji to proszenie się o kłopoty.

    IP: 178.36.31.[...] Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

  • windziarz

    #40 windziarz 2011-12-28 23:00:48 0

    @slawek22

    Każda wersja Visual C++ wymaga środowiska uruchomieniowego. Tak samo jak Delphi i BCB.

    Trochę się zagalopowałeś. Czego niby potrzebuje soft napisany w Delphi lub BCB?

    IP: 89.75.115.[...] Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0.1) Gecko/20100101 Firefox/8.0.1

Uwaga! Możesz zarejestrować się w serwisie i w ten sposób zarezerwować swój nick oraz ominąć konieczność ciągłego odczytywania wyrazów.

Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka (słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.

Polecane książki

Czytaj Webhosting

Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.

Zarejestruj domenę

Sprawdź dostępność swojej domeny:

.pl: 0 zł   .com: 19.90 zł
.com.pl: 0 zł   .eu: 19.90 zł