함수형 언어에 대해 알아보고 있는데여,
제가 알아 본 내용이 맞는지 확인해 주실 수 있나요??
1. purely functional한 hash table은 삽입이나 삭제가 있을 때마다 전체 데이터를 복사하여야 하기 때문에 imperative 보다 훨씬 느리다.
2. 이를 해결하기 위해 haskell에서는 ST Monad를 활용하여 순서를 강제함으로써, imperative 수준의 빠르기의 해쉬 테이블을 구현 가능하다.
3. 2번으로 구현 된 hashtable은 여전히 purely functional하다.
이 세개 구문이 맞는지 확인해 주실 수 있을까여
일단 1, 3번은 상충하지만 뭐가 맞는지 몰라서 둘 다 써 보았습니당
1. 전혀요.... - return 0;
그럼 왜 더 느린가영??
1. 그냥 그렇게 안한다. 2. 킹론상 맞다. 3. purity가 깨지지 않는건 맞다.
크게봐서 purity를 강제하지 않는다 vs IO혹은 ST 모나드 비슷한걸 도입한다 두가지 해결책이 있음
상황에따라 달라질 수 있는데, 개인적으로 테스트해본 결과 하스켈 해쉬테이블 성능이 파이썬하고 비슷했음.
삭제없이 삽입만 연속으로 할 때 해쉬테이블 초기 사이즈를 딱 맞게 잡아주면 파이썬 dictionary보다 빨랐고 초기 사이즈 안맞추면 파이썬보다 느렸던듯
감사합니당. 이론상은 충분히 빨라질 수 있는데 하드웨어와의 괴리 같은(?) 문제로 좀 느린가보네요.
속도, 개발자풀, 접근성을 어느정도 손해 보고라도 하스켈을 쓰게 되는 이유가 뭔지도 알려주실 수 있나여??
하스켈 gc가 해쉬테이블 다룰때 성능이 떡락해서 그렇다고 알고있음.
바깥쪽에서 볼때 purity 만 안깨지면 안쪽은 흑마술 떡칠하는 개념 아니냐?
https://gall.dcinside.com/mgallery/board/view/?id=github&no=5601