lua의 테이블은 배열이자 맵으로 사용하는데, 배열 속성이 있어서 혹시나 ordered 해시맵 처럼 동작하나 실험해보니 역시나 아니다. 파이썬이나 마찬가지다.
현대 언어에서 해시 자료 구조들은 대부분 해시 값으로 버킷 분기를 태우고 각 버킷의 리스트는 책에서처럼 리스트로 유지하는 것이 아니라 RB트리로 유지하는 것으로 알고 있다. 실제로 O(1)은 아닌 것이다. 어쨌든 키에 의한 탐색은 매우 빠른데, 문제는 요즘에 우리가 하는 일들의 자료구조가 원하는 속성은 이게 다가 아니다.
즉 대규모 데이터의 배치 처리, 통계, 인공지능 연산이라고 치면 필요로 하는 미덕이란 아마도 이럴 것 같다.
그건 그렇고 요즘 들어 함수형 언어나, 내가 즐겨쓰는 파이썬의 map - lambda 류를 보고 있으면 순회가 참 쌈박하다는 느낌이 드는데 이것도 이게 다가 아니다. 스택 오버 플로에서 여러 예제를 찾다보면 이터레이터 안에 IO를 수행하는 일들도 있다. 극단적으로 말하자면 파이썬 식으로 설명해서 yiield 쪽에서 시스템 콜을 매번 호출 할 수도 있다. CSW가 발생해서 시스템 자원 쭉 뽑아 먹는다는 뜻이다. 각 언어가 이터레이터를 구현 할 때 캐시힛팅과 파이프스톨 예방에 중점을 두었을까 싶지만 그 보다는 메모리를 아끼는 스트리밍 처리에 줌점을 뒀을 것 같다. 내가 선호하는 방향은 아니다. 극단까지 가지는 않더라고 CPU 뽑아먹기 좋다. 청크단위 순회 할 일을 바이트 단위로 하는 예제도 가끔 본다. CPU 뽑힌다.