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.

czytaj całość →

Makra to jeden z mechanizmów metaprogramowania – zbioru technik umożliwiających odczytywanie, tworzenie i modyfikowanie programów przez inne programy lub przez nie same. Są one jedną z charakterystycznych cech dialektów języka Lisp. Pozwalają przekształcać kod źródłowy programu zanim dojdzie do jego ewaluacji i stwarzać nowe konstrukcje składniowe. Dzięki nim jesteśmy w stanie nie tylko rozszerzać możliwości języka, ale nawet budować tzw. języki dziedzinowe, dostosowane do wyrażania specyficznych problemów i ich rozwiązań.

czytaj całość →

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 choć niebezpieczne odpowiedniki zmiennych.

czytaj całość →

Ref to typ referencyjny, dzięki któremu można wyrażać częste i jednoczesne zmiany stanów wielu współdzielonych tożsamości w synchroniczny sposób. Wykorzystywany jest tam, gdzie kilka wartości wskazywanych przez referencje zależy od siebie i modyfikacja ich wszystkich powinna być atomowa (np. przekazywanie środków między rachunkami bankowymi). Do obsługi Refów intensywnie wykorzystywana jest programowa pamięć transakcyjna (STM).

czytaj całość →

Dzięki informacji na facebookowym profilu 7freuds. trafiłem na opublikowany w serwisie “naTemat.pl” artykuł Julii Wahl o związkach pt. “Samotność nie jest zawsze zła”. Zgadzam się z tezą wyrażoną tytułem, jednak mam pewien kłopot z pogodzeniem się z poglądami na temat tzw. miłości romantycznej – z opiniami, które odbierają jej pewną istotną funkcję spajającą i wzmacniającą więź.

czytaj całość →

Agent to typ referencyjny podobny do Atomu. Dzięki niemu można wyrażać częste, niekoordynowane zmiany stanów współdzielonych tożsamości w asynchroniczny sposób. Wykorzystywane są na przykład do obsługi niezależnych zdarzeń czy jednokierunkowej komunikacji między komponentami realizującymi dostęp do jednego zasobu (równoległe pobieranie danych z sieci, zapis do jednego pliku przez wiele wątków itp.).

czytaj całość →