26 stycznia 2012

Zapytany o początki z Clojure

Nie długo trwało, aby kilka maili między mną a rozmówcą zmieniło temat główny na (nieznacznie) poboczny - zalążek projektu librarian-clojure.

W ten sposób poniosło mnie (dosłownie i w przenośni) na Heroku, gdzie uruchomiłem webową wersję HelloWorld z Clojure'owym Ring.

Pewnie dla niejednego jest to o wiele za wiele, ale czego nie robi się dla zauważalnego rozwoju informatycznego, w którym nie ma miejsca dla już poznanego, a jedynie nieznacznie odświeżonego, a raczej próbuje się czegoś zupełnie nowego, np. zmiana języka obiektowego (Java, Scala) na funkcyjny (Clojure), albo zmiana języka statycznie typowanego (Java, Scala) na dynamiczny (Clojure, JRuby). Człowiek ponownie czuje się niedoświadczony i w ogóle (przesadnie) zagubiony. Podobno tylko tak można się czegoś nowego nauczyć w naszej branży.

Pożyjemy, zobaczymy. A teraz ciii...Clojure się zbliża!

Kiedy projekt trafił w ręce mojego rozmówcy, padło kilka pytań, które pomyślałem, że zadaje więcej osób, więc postanowiłem odpowiedzieć na nie w formie wpisu na blogu (a nóż widelec kogoś skusi i wejdzie w temat - byłoby cudnie - niechby chociaż komentował, jak to beznadziejnie nam idzie!) Marzą mi się regularne sesje, w których z kimś zasiadałbym przy IRC i jakoś współdzieląc ekran programował w parze zdalnie. Podobno się daje i jedynie wystarczy trochę chęci. Znajdzie się ktoś na ochotnika do librarian-clojure? Regularne sesje - stała pora, stała długość sesji i stałe miejsce mogłyby przyciągnąć innych, choćby do pooglądania. Cudo pomysł!

A teraz do pytań.

Jako IDE Eclipse?

"Jedynie" Clojure REPL (powłoka Clojure).

Jeśli jednak potrzebujesz wskazówek, to możesz skorzystać z Eclipse z wtyczką CounterClockWise (CCW) lub IntelliJ IDEA i La Clojure. Możesz spróbować Emacs.

Ja pracuję nad sobą, aby skorzystać z dobrodziejstw Eclipse CCW.

Czy project.clj to manifest?

Zależy co rozumiesz przez manifest? Ten javowy, to nie, ale manifest jako główny plik konfiguracyjny projektu, to jak najbardziej.

Innymi słowy, jest to serce projektu zarządzanego przez leiningen (odpowiednik Mavena w świecie Clojure).

Dlaczego nadałeś rozszerzenie *.md dla pliku README?

Chcę korzystać ze wspacia dla markdown przez GitHub, który rozpoznaje takie pliki jako pisane w tym metajęzyku. Daje to formatowanie tekstu bez większych udziwnień (niż te, których wymaga sam markdown).

Czy ns (namespace) to analogia dla pakietów w Javie?

Prawie. To właściwie javowy odpowiednik FQCN (ang. fully-qualified class name), czyli pakiet + nazwa klasy.

Każdy plik w Clojure to zwykle zestaw funkcji (nic jednak nie stoi na przeszkodzie, abyś potworzył przestrzenie nazw, a w nich funkcje itd.) Zachowując jednak zdrowy rozsądek, rozsądnie jest potraktować pojedynczy plik clj z ns jako klasę, w której na początku znajduje się deklaracja przestrzeni nazewniczej, w której "siedzi" również nazwa pliku (coś ala javowa klasa).

Czy :use to analogia do import w Javie?

Tak.

Czy deftest to słowo kluczowe definiujące funkcję 'testową' analogicznie do anotacji @org.junit.Test?

Tak.

Jakie wykorzystanie gita preferujesz - z poziomu powłoki systemowej, czy IDE, np. Eclipse EGit?

Powłoka. Javowe IDE wspierają gita, więc kiedy się już zdecydujesz, znajdziesz i wsparcie dla gita. Przekonuję się do Eclipse EGit.