"The Grid. A digital frontier. I tried to picture clusters of information as they move through the computer. What did they look like? Ships? Motorcycles? Were the circuits like freeways? I kept dreaming of a world I thought I’d never see. And then, one day, I got in." — Tron: Legacy

2014-07-27

Java vs Clojure: Streams/Reducers

Ostatnio natrafiłem na materiał wideo porównujący kolekcje w językach Java, Scala i z użyciem biblioteki przygotowanej przez developerów firmy Goldman Sachs. Z ciekawości utowrzyłem podobny kod w Clojure by porównać wyniki. I muszę powiedzieć, że są trochę zaskakujące.
W materiale tym porównywana była wydajność kolekcji dla 1 miliona elementów. Postanowiłem utrudnić trochę i dodać 1 zero. Wyniki są podyktowane cechami mojego PC, na innych komputerach będą się różnić, być może znacznie.

Tutaj źródło: http://www.infoq.com/presentations/java-streams-scala-parallel-collections

2014-07-06

Java vs Clojure : Singleton

Luźna definicja: singleton to obiekt, który posiada tylko jedną instancję w aplikacji. Zwykle stosowany jaki kontener dla konfiguracji. Dlaczego jedna instancja? Ano dlatego, by spróbować uniknąć niespójności związanych z tym, że różne obiekty posiadają nieaktualne informacje dot. wartości w nim przechowywanych np. poprzez przekazywanie obiektu konfiguracji przez parametr. Dodatkowy problem stanowią próby aktualizacji wartości Singletona tak, by przy odczycie w innym miejscu programu dostać je spójne, a nie zaktualizowane częściowo.

Pusty Singleton w Java:

public enum MySingleton {
     INSTANCE;
}

W Clojure wartości obiektów można zmieniać tylko w trnsakcji. Najprostszą konstrukcją zapewniającą funkcjonalność Singletona jest atom.

Pusty atom w Clojure:

(def MySingleton (atom nil))