SmallTalk (język programowania)

SmallTalk (język programowania)
Polecane artykuły

Smalltalk jest dynamicznym, w pełni obiektowym, reflektywnym językiem programowania stworzonym na początku lat siedemdziesiątych. W przeciwieństwie do konkurentów takich jak C++ czy Java, nie wzoruje się na składni języka proceduralnego. Został zaprojektowany od podstaw by jak najlepiej realizować założenia paradygmatu obiektowego. Smalltalk to również kompletne, graficzne środowisko programistyczne, które może być uznane za przodka takich produktów jak Microsoft Visual Studio.


Historia

Smalltalk został stworzony na początku lat siedemdziesiątych przez Alana Kay’a w Xerox PARC (Palo Alto Research Center). Była to część większego projektu o nazwie ARPA. Grupa inżynierów, która opracowała Smalltalk ma na swoim koncie również takie wynalazki jak:

Jego pierwszą implementacją, która posłużyła do celów naukowych był Smalltalk-72 autorstwa Dana Ingalls’a. Różniła się ona w znacznym stopniu od wersji używanych współcześnie. W wersji Smalltalk-76 do pakietu dodane zostało środowisko programistyczne wraz z edytorem bibliotek. W Smalltalk-80 wprowadzono metaklasy. Była to pierwsza wersja dostępna dla szerszego grona odbiorców. Dostęp do niego uzyskały m.in.: Hewlett-packard, DEC, czy Apple oraz niektóre uniwersytety. Wraz z zakończeniem projektu w 1980 roku, w skład systemu Smalltalk-80 wchodziły:

  • Język programowania Smalltalk
  • Wirtualna maszyna Smalltalk
  • Dokumentacja i kod źródłowy

Wirtualną maszynę udało się przeportować na wiele różnych platform co zaowocowało jego znaczącą popularyzacją. Moment w którym zaczęto uczyć się Smalltalk'a można uznać za początek rewolucji programowania obiektowo orientowanego (OOP). Idea OOP okazała się być przełomem i wywarła spory wpływ na istniejących już językach. Wkrótce po wydaniu Smalltalk-80 pojawiły się takie produkty jak: Object-Pascal, Objective-C czy nawet obiektowy Cobol. Kilka lat później powstał C++, a w połowie lat dziewięćdziesiątych Sun Microsystems stworzył Javę.



Język

Smalltalk zyskał miano pierwszego prawdziwego obiektowego języka programowania. Obiekty w tym języku znajdują się w pewnym określonym stanie i potrafią otrzymać i wysyłać pomiędzy sobą wiadomości. Spośród popularnych dziś języków, które w mniejszym lub większym stopniu się nim inspirowały, można wyliczyć między innymi takie jak:

W przeciwieństwie do np. Javy, w Smalltalk’u nie ma różnicy pomiędzy wartością i obiektem. Wszystkie są pochodnymi klasy Object i potrafią przetwarzać wiadomości. Każda instancja klasy również jest obiektem, podobnie jak blok kodu. Rozszerzanie możliwości istniejących klas realizuje się poprzez tworzenie podklas

Program napisany w Smalltalk’u najpierw tłumaczony jest do postaci kodu bajtowego a następnie interpretowany w maszynie wirtualnej lub dynamicznie zamieniany na kod maszynowy. Charakterystyka języka pozwala też na dynamiczne zarządzanie pamięcią i nie wymusza zwalniania nieużywanych zasobów. Wirtualna maszyna korzysta z tak zwanego Garbage Collector’a, który rozpoznaje nieużywane obiekty i je usuwa.

Tworząc Smalltalk’a starano się, aby jego składnia była jak najprostsza. Przykładowo, żeby stworzyć tablicę wystarczy jedynie wywołać odpowiednią metodę, tworzącą instancję klasy Array np. „Array new: 64”. Przyporządkowanie typów do zmiennych odbywa się dopiero w czasie wykonywania programu. Oznacza to, że do każdej zmiennej można wysłać wiadomość dowolnego typu. Jeśli nie zostanie ona rozpoznana, nastąpi wywołanie metody doesNotUnderstand.

W Smalltalk’u, możliwe jest modyfikowanie programu w trakcie jego pracy. Pozwala to programistom na szybką implementacje i testowanie nowych funkcjonalności.


Przykładowy kod

Oto przykładowy kod napisany w języku Smalltalk:

0 to: 13 do: [:i | Transcript show: i; cr]

Choć budową przypomina, na pierwszy rzut oka, pętlę for, powyższy kod działa zgoła inaczej. 0 to obiekt klasy SmallInteger do którego przesyłamy wiadomość (message) "to: do:". Pierwszym argumentem jest 13, a drugim blok instrukcji ujęty w nawiasy kwadratowe. SmallInteger dziedziczy z klasy Number, która obsługuje przesyłaną wiadomość:

to: stop do: aBlock 
   | nextValue |
   nextValue := self.
   [nextValue <= stop]
       whileTrue: 
           [aBlock value: nextValue.
           nextValue := nextValue + 1]

Przesłanie wiadomości value: do bloku podanego jako drugi parametr, następuje tyle razy, ile wynosi parametr pierwszy. Wartość przekazywana jako parametr :i będzie wyświetlona na standardowym wyjściu poprzez przesłanie wiadomości show: oraz znaku nowej lini - cr - do obiektu Transcript. Taka pętla jest więc niczym więcej niż sekwencją wiadomości przesyłanych pomiędzy obiektami.


Bibliografia

  1. A. Goldberg, D. Robson, Smalltalk-80: The language and its implementatnion, Xerox Corporation, USA 1983, ISBN 0-201-11371-6, s. 5-37
  2. C. Liu, Smalltalk, Objects and Design, toExcel, Nowy Jork 1999, ISBN 1-58348-490-6, s. 1-9, 32-36
  3. A. C. Kay, The Early History of Smalltalk. ACM SIGPLAN Notices, s. 69–95

Autor: Szymon Depa