Chciałbym lepiej poznać praktykantów z m.in. Data.Map. Kiedy wstawiam nowe wiązanie w Mapie, to z powodu niezmienności danych otrzymuję nową strukturę danych, która jest identyczna ze starą strukturą danych plus nowe powiązanie.Czy cała mapa została skopiowana po włożeniu nowego powiązania?
Chciałbym zrozumieć, w jaki sposób zostało to osiągnięte. Czy kompilator ostatecznie implementuje to przez kopiowanie całej struktury danych za pomocą np. miliony wiązań? Czy można ogólnie powiedzieć, że zmienne struktury/tablice danych (np. Data.Judy) lub imperatywne języki programowania działają lepiej w takich przypadkach? Czy dane niezmienne mają jakąkolwiek przewagę, jeśli chodzi o słowniki/magazyny klucz-wartość?
Odpowiedź nieodblokowana! –
Jeśli to wszystko wskazuje za każdym razem, gdzie jest różnica prędkości wstawień w [tablice Judy] (http://donsbot.wordpress.com/2009/09/26/very-fast-scalable-mutable-maps-and-hashes -for-haskell /) pochodzą z? –
@JFritsch: Cóż, musi jeszcze zbudować zmodyfikowane części drzewa. Jest to łagodzone przez lenistwo (tylko części drzewa, które faktycznie patrzysz, zostają skonstruowane), ale jeśli nie potrzebujesz żadnej z zalet niezmienności (znacznie prostszy model programowania, możesz zachować wiele zmodyfikowanych wersji bez przechowywania całych kopii, itp.), wtedy oczywiście bezpośrednie zapisywanie do pamięci będzie szybsze. Ale często nie jest to tak duża różnica, jak mogłoby się wydawać. – ehird