2010-12-30 14 views
31

Próbuję znaleźć różnice między tym, co Clojure nazywa STM, a tym, co jest zaimplementowane w Haskell jako STM. Biorąc faktyczne różnice semantyczne w języku, jestem trochę zdezorientowany, jak Rich Hickey mówi w swoim przemówieniu, że implementacja STM przez Clojure jest bardzo różna od innych rzeczy, ale nie rozumiem różnic, z wyjątkiem wyboru języka.Czym różni się Clojure STM od Haskell STM?

Odpowiedz

25

Clojure STM posiada 3 duże unikalne cechy:

  1. wdraża MVCC migawkę na unikanie transakcji restartuje odczytu unieważnieniu.
  2. Zapewnia odniesienia w zapisach do odczytu zapewnia rodzaj ręcznej kontroli kolejności akwizycji zasobów.
  3. Zawiera wyraźną trasę dojazdową, która zmniejsza liczbę ponownych prób zapisanych w korespondencji seryjnej.
+3

można również dodać zerowe obciążenie dla nietransakcyjnych czyta tej liście? – mikera

+0

To prawda, gdy używasz kontekstu nietransakcyjnego, ale jeśli bierzesz pod uwagę STM i ponawiasz próby w innych transakcjach, nie mam pewności, czy system dziurkowania cierpi na wydajność spowodowaną przez zamianę kontekstu. Ale JVM jest bardzo dojrzała, a STM jest jak GC ... bardzo potrzebne, więc powinieneś pomyśleć w ten sposób –

+1

Witaj william. czytając artykuł i prezentację Marka Volkmanna, powiedział: "czyta tylko wywołać ponowną próbę w Clojure, gdy lista historii w Refound nie zawiera wartości zatwierdzonej przed rozpoczęciem txn". Pierwsza funkcja opisana powyżej jest poprawna? – CHAPa

12

Mark Volkmann zrobił bardzo szczegółową prezentację na temat STM w ogóle (i STM Clojure w szczególności) na Strange Loop 2009, które można znaleźć here (artykuł i przesuwa here). Tak naprawdę nie znam żadnego innego źródła (innego niż kod), aby zrozumieć, jak działa STM Clojure.

+0

Link do prezentacji nie działa. Czy ktoś ma alternatywę dla tej rozmowy? – Neil

+1

Prezentacje slajdów i szczegółowy artykuł na ten temat są dostępne tutaj http://java.ociweb.com/mark/stm/article.html – lorefnon

+1

Taki dobry odczyt. Bardzo łatwo dostępne. Pan Volkmann jest utalentowanym pisarzem. – Alex

16

Dla Haskell STM zobaczyć papiery SPJ za: http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/

Szczególne zastosowania są „sk transakcje pamięci” i „pamięć transakcyjna z niezmienników danych”. Realizacja STM przez GHC rzeczywiście nie jest MVCC. Nie pamiętam wszystkich szczegółów implementacji, ale rozumiem, że opis w gazetach nie różni się zbytnio od tego, co obecnie istnieje w GHC.

(zauważ, że MVCC w Clojure lub gdzie indziej, umożliwia write-pochylać - Zobacz na przykład tutaj: http://en.wikipedia.org/wiki/Snapshot_isolation)

+8

Warto również zauważyć, że wdrożenie GHC zapewnia kompilację gwarancji bezpieczeństwa transakcji w odniesieniu do skutków ubocznych; oraz unikalny kombinator 'orElse' do transakcji składających się atomowo. –

+0

@DonStewart Ponadto Haskell 'STM' jest' MonadPlus', który pozwala określić dodatkowe warunki awarii w kontekście transakcji. tj. jeśli saldo konta końcowego jest ujemne, prześlij/ponów próbnik txn. Pozwala także łatwo dzielić się tą logiką z innymi klasami "MonadPlus"; ta sama funkcja wskazywałaby na wynik wszystkich * potencjalnie * ważnych transakcji z uwzględnieniem "Listy" rachunków i zakupów. Może to być użyteczne, jeśli logika jest złożona. Nie sądzę, że jest to możliwe w clojure. –

Powiązane problemy