Smalltalk, Squeak, Seaside - druga strona tęczy



Szumny tytuł - szumna technologia. Dużo ekscytujących rzeczy dzieje się ostatnio na rynku. Sporo mówimy i słyszymy o Rubym, Scali, JRubym, GAE wspierające teraz Jave i daje nam kosmiczne możliwości itd itp. Co do Scali możliwe, że spory wpływ na rosnące nią zainteresowanie miał też Twitter, ale myślę, że nie tylko, to po prostu fajny i bardzo przyszłościowy język, ale nie o tym. Gdyby ktoś chciał poczytać o Scali, Jarek Zabiełło napisał krótki, fajny artykuł.

Ostatnio z ciekawości wpisałem Seaside i Smalltalk w google na Polskę, no i odpowiedzi nie było miażdżąco dużo. Dlatego może ja coś napiszę o języku najstarszym z wymienionych, a mającym naprawde wspaniałe możliwości.

Tytuł taki dlatego, że to tak naprawdę inna bajka, inny sposób organizacji, wszystko jest inne krótko mówiąc. Mówiąc o frameworkach Lift, RubyOnRails, Merb, Django, niewiele je tak naprawdę różni po za językiem. Jeśli o nim mowa, to trzeba stwierdzić jasno - Smalltalk to nie jest brand new cool język, tylko technologia rozwijana już w latach 70 - 80. Teoretycznie można stwierdzić - sprawdzone ! Tyle, że smalltalk podbijał trochę inne krainy technologiczne niż np. Java, pewnie dlatego mało o nim mówimy.

To naprawde świetny w pełni obiektowy język, który doczekał się wielu implementacji: Squeak, VisualWorks, VisualAge, czy też prężnie rozwijany młody Pharo Project (pełną listę można znaleźć tutaj). Ja swoje życie związałem ze Squeakiem, dlatego, że jest po pierwsze darmowy, opensource (mimo, że z tym były problemy, bo wywodzi się z Apple). Po drugie ma wspaniałe IDE, które jest jego główną zaletą, a bez którego trudno mówić o Squeaku jako takim.



Co do samej organizacji. Squeak bazuje na obrazach (image based, po angielsku jednak lepiej to brzmi). Chodzi w skrócie o to, że nie muszę martwić się o miliardy plików, które zawiera mój framework, wszystko koncentruję się w okół obrazu na którym wszystkie moje klasy, projekty są skupione. Tylko on, czyli jeden plik tak naprawdę mnie interesuje. Zaletę tego odkrywam za każdym razem, kiedy próbuję skopiować moje Railsowe projekty na inny dysk. Wówczas to miliardy małych plików powoli uśmiercających mój dysk są kopiowane z prędkością porostu trawy na pustynii. Coś strasznego. W przypadku Squeaka kopiuje jeden plik, JEDEN ! Który mogę przenosić z łatwością między platformami, pracować na Windowsie, później przenieść obraz i odpalić go na linuxie i wszystko działa ! Każdy ten obraz jest "czytany" przez środowisko uruchomieniowe, Squeak VM po prostu. Co więcej, obraz ten można zamieścić i uruchomić np. na amazon AWS i mieć Smalltalk in the cloud. Genialne.

Tak jak wspomniałem, całą moc Squeak opiera na swoim IDE i to IDE dużymi literami ! Nie jest to tylko kolorowanie składki z jakimś pseudo debbugerem. To coś jak mój ukochany iPod, który jest niewiarygodnie prosty, zwarty, mały, a ma w sobie wszystko co tylko potrzebuje to tworzenia aplikacji - taki jest właśnie Squeak. Troche szkoda miejsca i czasu na opisywanie wszystkiego po kroku, lepiej spróbować, a najlepszym sposobem jest na to Squeak By Example.

Squeak został wymyślony by tworzyć multimedialne treści, po części z rąk Apple, później Disneya, przekształcany i rozwijany. Warto posłuchać jaka jest przyszłość Squeka w wywiadzie m.in. z Randalem Schwartzem - Link. Jednak Squeak, ze swoim potencjałem został przeniosiony tam gdzie przemieszcza sie cały świat - do sieci. Powstało coś i można to powiedzieć śmiało - cool ! Seaside - webowy framework oparty na tej własnie implementacji Smalltalka (ale istnieje także dla VisualWorks i nie tylko). Co wnosi on w nasz webowy świat. Sprawa jest prosta, oprócz zalet, które zostały wymienione,niesione przez samo środowisko Squeak, został zbudowany w oparciu mechanizm kontynuacji co czyni go rywalem potrafiącym niejednemu skopać tyłek.

Na czym w skrócie kontynuacje polegają ? Najprościej powiedzieć można, że stosując mechanizm kontynuacji tworzyć można aplikacje, w których przycisk wstecz naprawdę działa. Ale nie tylko. Przede wszystkim, tworzenie aplikacji z "nieśmiertelnym przyciskiem wstecz w przeglądarce" ma swoje zalety i dla odbiorcy i dla programisty. Jako użytkownik sklepu napisanego w takim frameworku, wyobraź sobie sklep, w którym dokonujesz zakupu, towar ląduje w koszyku, kupujesz dalej, nagle rezygnujesz. Włączasz przycisk wstecz przeglądarki i aplikacja "cofa się w czasie" do stanu kiedy w koszyku była pustka - ot co ! Z punktu widzenia programisty masz aplikację, która może "cofać się w czasie" genialny sposób debugowania kodu i możliwość zapomnienia o tym czym jest POST i GET. Jakie jednak niebezpieczeństwa to ze sobą niesie ? Niestety zabiera sporo pamięci, ale idąc drogą Railsów, skończyły się czasy, w których sprzęt przedkładało się nad czas programistów więc ten problem powoli sie niweluje. Więcej o kontynuacjach np. tu.

Zatem mamy Seaside, framework, który daje nam całą radość ze Squeaka, a dodatkowo implementuje mechanizm kontynuacji w sposób transparentny dla programisty. Czyli wszystko masz w jednym pliku (squeak image), piszesz aplikacje podobnie do desktopowej (kontynuacje). Dodatkowo jedynego czego używasz tworząc aplikację w Seaside to Smalltalk, nie ma htmla, a tylko Smalltalk go produkujący, można tutaj wysnuć analogię do HAMLa. jedni to lubią inni nie, ja lubię to już indywidualna sprawa.

HAML Brings Seaside Awesome To Ruby.

Jakby tego było mało, wszyscy zachwycili się i czekają co też dzieje się z projektem MagLev dla Ruby (szczerze mówiąc ja też). Czym jest MagLev ? Jest on tym co dawno działa dla Smalltalka a nazywa się GemStone/S. Więc o skalowalność aplikacji w Seaside też nie trzeba się zbytnio martwić. Stworzono nawet platformę, której skrót to GLASS (GemStone, Linux, Apache, Seaside, and Smalltalk) czyli sposób na tworzenie prosto, szybko, skalowalnych aplikacji seaside.gemstone.com.

Seaside ma też dośc dobre wsparcie dla JQuery, YUI i Prototype/ScriptAculoUs. Czyli nic tylko zabrać się za poznanie nowego frameworka ? Ja go używam i jest to naprawde coś świetnego, ale nie można zapominać, że w dalszym ciągu nie jest to demon prędkości. Mówię tu głównie o konsumpcji pamięci RAM. Mówią jednak, że nic nie może być idealne ;)



Komentarze


  • Facebook
  • Twitter
  • Digg
  • Delicious
  • Google Buzz