data-driven programming & data-driven design & data-oriented programming ???
비슷한 용어들. 내가 이해한 정리들은 1:
data-driven programming
데이터처리를 중심으로 하는 프로그래밍언어나 도구, 스타일.
예를 들어, awk, perl은 입력의 패턴에 따라 코드를 나누고 출력을 만들기 수월한 방식을 제공.
data-oriented design
현대 cpu의 아키텍처에 적절하도록, cpu cache, simd등을 잘 적용될 수 있도록 애플리케이션 데이터구조를 설계하는 방식.2
그리고 단순히 게임개발에서 ecs만이 아니라 lmax disruptor등도 포함될 것 같다.
- https://en.wikipedia.org/wiki/Data-oriented_design
- dod의 예시: Entity component system
- lmax disruptor (by Martin Fowler)
data-oriented programming
그리고 또 갑자기 위 2개의 정의처럼 완전 갑자기, dop은 다음과 같은 원칙들을 이용한 애플리케이션 개발방식:
- ( https://blog.klipse.tech/dop/2022/06/22/principles-of-dop.html )
- Principle #1: Separating code (behavior) from data.
- Principle #2: Representing data with generic data structures.
- Principle #3: Treating data as immutable.
- Principle #4: Separating data schema from data representation.
다음 책을 재밌게 읽음:
- data-oriented programming (by Yehonathan Sharvit)
실은 이미 몇년전부터 clojure 커뮤니티, 코드에서는 일반화된 방식이었음.
분명히 유연하고 복잡도를 확 낮출 수 있는 방식이지만, 제약이 있음. (책에서는 제대로 언급하거나 다루지 않아서 아쉬웠음)
-
애플리케이션의 전체 데이터셋 크기가 메모리보다 크다면 적용이 어렵다.
- ==> db을 쓰는 전통적인 방식의 애플리케이션을 기반으로 설명하지는 않음.
- db 연결하는 챕터가 있지만, 실은 일부를 저장/로딩하는 내용일 뿐.
- multiple-dispatch을 제대로 지원하는 언어라면 더 적절함. (clojure)
- 당연히 실행시간 분기가 더 많아지므로, 성능이 정말 중요한 경우엔 손해.
그리고 이런 특징들 때문인지, clojure community은 다음과 같은 것들을 만들어 갔으리라:
-
- 링크의 예시에서 보듯이, clojure에서 in-memory자료에 접근하듯이 쿼리 및 데이터 표현.
-
- 실행시간의 값의 내용에 따른 contracts, validations.