Posts Tagged ‘google’

Google Dart – pierwsze wrażenie

Posted in javascript, php, programowanie on October 10th, 2011 by Wojciech Soczyński – 13 Comments

Dzisiaj Google zaprezentował na blogu chromium pierwsze informacje na temat swojego nowego języka “Dart”. Dart prezentowany jest przez firmę z Mountain View jako język do “strukturalnego programowanie webowego”, mający docelowo zastąpić Javascript w roli głównego narzędzia do pisania aplikacji webowych po stronie przeglądarki. Postanowiłem przyjrzeć się szybko jak język ten wygląda i podzielić się pierwszymi wrażeniami jakie mi przyszły do głowy. W dalszej części artykułu, będę się opierał na jednym z artykułów, który jest mini tutorialem do Darta i przedstawia dość obszernie kod, który zwykle jest używany przez programistów jak i różne Dartowe smaczki.

Na pierwszy rzut oka Dart wygląda na kolejny klon Javy / C# z większym podobieństwem do C#. Jak każdy w miarę nowoczesny język posiada funkcje anonimowe i domknięcia. Jest oparty na klasach więc większość osób łatwo się w nim odnajdzie. Jest to główna i fundamentalna różnica pomiędzy Dartem a Javascriptem, oprócz oczywiście składni. Poza tą różnicą Dart wspiera DSL (domain specific languages), dzięki temu, że podobnie jak w Scali, operatory są tak naprawdę zwykłymi metodami, czyli mamy możliwość wywoływania metod bez użycia kropki. Dart wspiera też opcjonalne typowanie – możemy zadeklarować typ zmiennej i będzie on sprawdzony w czasie kompilacji.

Jeżeli porównamy Darta do PHP, to oprócz wcześniej wymienionych ficzerów jedyną w zasadzie różnicą będzie obsługa funkcji akcesorowych znanych z C# (metod prefiksowanych przez get/set).

Dart posiada jeszcze kilka mniej znaczących smaczków, które są głównie lukrem składniowym i mogą być z łatwością odtworzone przy użyciu innych konstrukcji językowych. Pierwszym z takich smaczków są nazwane konstruktory – czyli googlowy sposób na przeciążanie konstruktora w języku dynamicznie typowanym nieobsługującym przeciążania metod. Drugi sposób to metody fabryczne, czyli metody klasy poprzedzone słowem kluczowym “factory”, ich zastosowanie jest dla mnie generalnie mało zrozumiałe. Ostatnim “ficzerem” jaki zauważyłem są “krótkie konstruktory”, które oszczędzają nam trochę pisania – zamiast:

class Point {
    num x, y;
    Point(num x, num y) {
        this.x = x;
        this.y = y;
    }
}

można napisać tak:

class Point {
   num x, y;
   Point(this.x, this.y);
}

Podsumowując – szału nie ma. Co jak co, ale po Google spodziewałem się więcej. Czego mi brakuje ?

  1. Większego nacisku na programowanie funkcyjne – np. łatwego sposóbu na tworzenie immutable data types, chociażby a’la Scala:
     case class User(firstName: String, lastName: String, birthday: Date) 
  2. Anonimowe klasy
  3. Wsparcie dla przetwarzania równoległego / wielowątkowego – jest w postaci aktorów (podziękowania dla wookieba)
  4. Przestrzeni nazw / modułów
  5. “Odwróconych” interfejsów a’la GO, czyli coś w rodzaju:
    class Test {
        Integer foo(){
            return 1;
        }
    }
    
    interface Foo {
         Integer foo();
    }
    
    Foo someFoo = new Test(); /* ok! - nie ma błędu -
    klasa Test nie deklaruje, że implementuje interfejs Foo,
    ale sygnatura jej metod jest zgodna z nim */
    

    Więcej na stronie 8tlight

Jestem ciekaw jaka jest Wasza opinia ?