나는 Gambit-C Scheme에서 세트를 사용하지 않기로 제한함으로써 기능적 프로그래밍을 조금 배우고 있습니다. 이 환경을 사용하여 약간의 OpenGL 게임을 작성하는 것이 재미있을 거라 생각했는데 게임 개발에 도움이되는 것 같습니다.기능적 GLUT?
그러나 OpenGL 및 GLUT를 사용할 때 기능적 스타일을 고수하고 전역 상태를 피하는 것이 어려울 것으로 보입니다. 필자는 이것이 게임 프로그래밍의 근본적인 한계라고 생각하지 않지만 GLUT와 같은 콜백 기반 API는 함수형 프로그래밍에서는 잘 작동하지 않는 것 같습니다.
예를 들어 세계를 타임 스탬프 및 사용자 입력 이벤트의 인터리브 된 목록의 함수 인 변화하는 상태 벡터의 스트림으로 생각하려고합니다. 이 아이디어는 괜찮은 것처럼 보이지만 비동기 프로그래밍에서는 쉽게 진행되지 않습니다. 예를 들어 GLUT의 디스플레이 함수에 대한 콜백을 등록해야하는데,이 콜백은 어떻게 든이 스트림의 "현재"항목에 액세스 할 수 있어야합니다. 그 사이에 스트림을 앞으로 나아가게 할 수있는 방법은 없습니다.
이상적으로, 나는 일종의 "외부"GLUT, 어떤 점에서 어떻게 든 실행 된 다양한 GLUT 기능에 의존하는 (아마도 모날레) 주요 기능인 무언가가 필요합니다. 어떻게 GLUT를 중심으로 그런 게임 엔진 스타일을 개발할 수 있을까요? 아니면 다른 방법으로 물어볼 수있는 방법은 제가 GLUT를 내 엔진에서 성공적으로 분리 할 수 있을까요? GLUT가 인터럽트 된 인터럽트리스트를 외부 프로 시저에 생성 할 수 있습니까? Haskell은 어떻게 이것을 처리합니까?
여기에있는 문제는 부작용이 많지는 않지만 GLUT가 무언가 완료해야 할 때 비동기 적으로 콜백한다는 사실을 처리하는 방법입니다 기능적 의존 관계를 확립하는 것. GLUT의 특정 관점에서 볼 때 그걸 어떻게 보이게 할 수있는 방법이 있는지 궁금 하네.하지만 어쩌면 그렇게 명확한 생각은 아닙니다. – Steve
죄송 합니다만 OpenGL 용 글꼴 추가 기능을 능가하는 GLUT를 사용하지 않았습니다. 나는 OpenGL pop/push 상태를 생각하고 있었다. 정말 도움이되지 않습니다. –
> 부작용으로 인해 화면에 물건 모음이 표시 될 때 부작용이없는 기능 프로그래밍을 수행하는 방법을 알 수 없습니다. 최종 출력 단계에서 내용 ("인쇄")이 나오지만 번호가있는 순수한 기능 방식으로 프로그램합니다. 마찬가지로, 기능적 그래픽의 핵심은 풍부하고 유용한 대수가있는 데이터 유형을 제공하는 것입니다. 여기서 구성 및 프로그래밍 모델은 정확한 & 다루기 쉬운 의미 및 부작용이 없습니다.그리고 숫자를 인쇄하는 방법에 대해 걱정하는 것 이상을 그리는 것에 대해 걱정하지 마십시오. – Conal