JavaScript domyślnym językiem programowania dla aplikacji GNOME

JavaScript domyślnym językiem programowania dla aplikacji GNOME

    przez -
    16 275
    GNOME
    Podczas niedawnego GNOME Developer Experience Hackfest w Brukseli omawiano problem domyślnego języka programowania do pisania aplikacji na pulpit GNOME 3. Według jednego z deweloperów – Travisa Reittera, nie było do tej pory spójnej decyzji w tej kwestii, ale po długich rozmowach, udało się dojść do porozumienia. Postawiono, że głównym językiem aplikacji zostanie JavaScript, natomiast dla bibliotek rekomendowanym pozostanie C.

    Oczywiście inne języki nie zostaną porzucone na rzecz JavaScriptu, aczkolwiek jak mówią sami deweloperzy, ma to udoskonalić współpracę wszystkich części środowiska graficznego. Warto przypomnieć, że z JavaScriptu korzysta także HTML5.

    • Rudyf

      WWW frontend- javascript, KDE – javascript, GNOME – javascript, Server backend – Javascript.

      Jeszcze 2 lata temu umarłbym ze śmiechu słysząc że ktoś pisze kontrolkami GUI w JS ;)

      • jsta

        Nie wiem dokładnie jak w GNOME będą robić GUI, ale w KDE używa się QtQuick z językami QML i C z opcjonalnym JavaScript, piszę o tym na: http://osworld.pl/kde-planuje-polaczyc-wszystko-w

        QWidgety nigdzie nie odchodzą, a dość unikalne jest to, że Qt/KDE można te dwa światy łączyć (QWidget, QtQuick) oraz JavaScript/QML/C++ bez używania dodatkowego kleju.

        Odnośnie artykułu, QML nie korzysta z JavaScriptu (nie jest zbudowany na nim), a jedynie umożliwia wywoływanie dodawanie bloków/funkcji w JavaScript. QML ma osobną maszynę wirtualną.

      • Hmm, ale jak się patrzy na składnię, to jest ona typowo JavaScriptowa, i sporo stron opisuje go jako opartego na JS.

      • Kolek

        Java jest również trochę podobna do C++ a jednak diametralnie się różni. Ponieważ QML nie wykorzystuje silnika JS do interpretacji QML'owego kodu, nie można wieć utożsamiać go z JavaScriptem. Oczywiście można użyć JS do niektórych handlerów ale równie dobrze te handlery można również w C++/Qt napisać.

      • Kolek

        Pewnie piszesz za wikipedią, w której QML jest ,,JavaScript-based'' – tutaj nieścisłość – pewnie chodzi o składnię -JSON.
        Więcej o nim można się dowiedzieć z: http://qt-project.org/doc/qt-4.8/qml-intro.html#t

        Zaznaczone tam jest, że JS mozna użyć do logiki UI itp co w praktyce może się prowadzać do kawałków kodu takich jak:

        onButtonClicked: {
        //some javascript code should be executed when button was clicked – for example:
        someDialog.close()
        }

      • jsta

        Co więcej, jeśli napiszesz tak:

        onButtonClicked: someDialog.close()

        …nastąpi bezpośrednie połączenie sygnału do slotu, bez pośrednictwa silnika JavaScript. Takie graniczne przypadki są zoptymalizowane co się sprawdza np. gdy jest 1/60 sek. na wyliczenie klatki animacji na ekranie :)

      • jsta

        JavaScript jest językiem imperatywnym, QML deklaratywnym; jest to coś zupełnie innego. Składnia pochodzi od json-a (http://pl.wikipedia.org/wiki/JSON, podzbioru JavaScriptu), ale to nie jest kod JavaScript, w szczególności żaden jego interpreter go nie wykona. Twoje wrażenie może pochodzić stąd, że patrzyłeś akurat na plik, w którym ktoś wstawił sporo JavaScriptu. Chodzi o to, że prawidłowy komponent QML-owy jest pisany w QML-u unikając JavaScriptu jeśli go nie trzeba, by było wydajnie, ze wsparciem ze strony GPU (OpenGL). Niemalże nie używa się pętli, a warunki to najczęściej if-then-else (operator '?'). Używa się modeli, delegatów. Do malowania GUI JavaScriptu się tam nie stosuje, chyba że ktoś portuje kod dla Canvasu z przeglądarki, ale sam nie miałem takiej potrzeby.

        Jak masz ochotę, spójrz np. na implementację elementu pokrętła – http://qt-project.org/doc/qt-4.8/declarative-ui-c… – jest zaprogramowana interakcja, a mimo tego nie ma grama JavaScriptu, są jedynie jedno wyrażenie a reszta to tzw. bindings.

      • Dzięki za wyjaśnienie. Przyda się na przyszłość. Z programowaniem mam mało wspólnego, ale wiedza się przyda :)

      • sprae

        Z tym JS chyba nie trzeba aż tak dramatyzować. To chyba najwydajniejszy obecnie język dynamiczny.
        A jego wąskie gardło – DOM w tym przypadku nie istnieje.

      • Rudyf

        W gnome będzie to prawdopodobnie działało na innej zasadzie niż QML. O ile nic się nie zmieni dalej będą używali GJS czyli buindingów GObject dla SpiderMonkey.

        Uzywanie GJS jest podobne raczej do wxlua, pygtk czyli nadaje się raczej do szybkiego prototypowania. Oficjalny przykład użycia: http://pastebin.com/Md65QLnT

      • sprae

        Pygtk było ładniejsze ;-) przynajmniej w czasach przed Gobject Introspection. Bo po nich wolałem uciec.