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
Clojure STM posiada 3 duże unikalne cechy:
- wdraża MVCC migawkę na unikanie transakcji restartuje odczytu unieważnieniu.
- Zapewnia odniesienia w zapisach do odczytu zapewnia rodzaj ręcznej kontroli kolejności akwizycji zasobów.
- Zawiera wyraźną trasę dojazdową, która zmniejsza liczbę ponownych prób zapisanych w korespondencji seryjnej.
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.
Link do prezentacji nie działa. Czy ktoś ma alternatywę dla tej rozmowy? – Neil
Prezentacje slajdów i szczegółowy artykuł na ten temat są dostępne tutaj http://java.ociweb.com/mark/stm/article.html – lorefnon
Taki dobry odczyt. Bardzo łatwo dostępne. Pan Volkmann jest utalentowanym pisarzem. – Alex
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)
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. –
@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. –
- 1. Haskell, kanały, STM, -threaded, Message Passing
- 2. czym jest ścieżka //, czym różni się od/
- 3. Problem monografii STM
- 4. Czy można monitorować poziom rywalizacji STM?
- 5. Jak zaimplementować ekwiwalent instrukcji Go's select dla kanałów Haskell STM?
- 6. Jak mogę zobaczyć liczbę wycofań w moim STM w Clojure?
- 7. Czy można uzyskać dostęp do historii wartości STM firmy Clojure?
- 8. Czym różni się ArrayListMultimap od LinkedListMultimap?
- 9. Czym różni się żądanie wyciągnięcia od oddziału?
- 10. Czym różni się aplikacja Facebook od karty?
- 11. Czym różni się Rakietowy od Planu?
- 12. Czym różni się LinkedBlockingQueue od ConcurrentLinkedQueue?
- 13. Czym różni się insmod od modprobe?
- 14. Czym różni się adapter od interfejsu sieciowego?
- 15. Czym różni się okno od siebie?
- 16. czym różni się InternalResourceViewResolver od UrlBasedViewResolver
- 17. Używanie transakcji STM i bazy danych
- 18. Clojure: jak defn różni się od fn?
- 19. Czym różni się <<?
- 20. STM z częściową atomowością dla niektórych telewizorów
- 21. Czym różni się HawtDispatch od Executorów Java? (i netty)
- 22. Raven DB: Czym różni się "przemytnik" od "Import/Export"?
- 23. Czym różni się PESSIMISTIC_READ od PESSIMISTIC_WRITE w WZP?
- 24. Dlaczego generics w Javie? Czym różni się od przeciążania?
- 25. Czym XACML 3.0 różni się od XACML 2.0?
- 26. Czym różni się błąd od wyjątku w JavaScript
- 27. Czym różni się wyjątek od .ToString() i .Message?
- 28. Czym różni się klucz obcy od klucza referencyjnego?
- 29. Czym różni się metoda rozszerzenia od metody statycznej?
- 30. Czym różni się @ {push} od @ {u} lub oddziału śledzenia?
można również dodać zerowe obciążenie dla nietransakcyjnych czyta tej liście? – mikera
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 –
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