Poczytaj mi Clojure, cz.  21


Polimorfizm


Polimorfizm to zbiór mechanizmów, dzięki którym te same konstrukcje języków programowania mogą być używane w odniesieniu do danych różnych rodzajów. Dzięki niemu możemy przetwarzać informacje z użyciem wyabstrahowanych, generycznych operacji, zyskując na czasie i czytelności kodu. Polimorfizm w Clojure to przede wszystkim obsługa wieloargumentowości, multimetod, protokołów i rekordów, a także korzystanie z interfejsów Javy.

Poczytaj mi Clojure, cz.  20


Makra


Makra to jeden z mechanizmów metaprogramowania – zbioru technik umożliwiających odczytywanie, tworzenie i modyfikowanie działających programów przez inne programy lub przez nie same. Są one jedną z charakterystycznych cech dialektów języka Lisp, pozwalając na przekształcanie kodu źródłowego programu zanim dojdzie do jego ewaluacji. Dzięki makrom możemy rozszerzać składnię języka i budować tzw. języki dziedzinowe, dostosowane do wyrażania specyficznych rozwiązań problemów w zwięzły i przejrzysty sposób.

Poczytaj mi Clojure, cz.  19


Współbieżność: Wątki


Korzystanie z dodatkowych wątków i sterowanie wykonywaniem bieżącego pozwalają precyzyjnie zarządzać współbieżnym realizowaniem zadań. W Clojure możemy w tym celu użyć dodatkowych typów referencyjnych: Future, Promise i Delay. Istnieją również odpowiednie klasy Javy realizujące podobne cele, a nawet typ Volatile, który pozwala tworzyć szybkie odpowiedniki konwencjonalnych zmiennych.

Poczytaj mi Clojure, cz.  18


Współbieżność: Referencje


Ref to zaawansowany typ referencyjny przygotowany do obsługi transakcji. Możemy dzięki niemu wyrażać częste i jednoczesne zmiany stanów wielu współdzielonych tożsamości w synchroniczny sposób. Wykorzystywany jest tam, gdzie kilka zmieniających się w czasie wartości (wskazywanych przez referencje) zależy od siebie, a modyfikacja ich wszystkich powinna być jednoczesna (np. przekazywanie środków między rachunkami bankowymi). Do obsługi Refów wykorzystywana jest programowa pamięć transakcyjna (STM).