Scheme, Common Lisp, Clojure 또는 JavaScript와 유사한 기능적 프로그래밍 언어를 사용하는 게임 엔진이 있습니까?
Unity3D를 사용해 보았지만 "JavaScript"는 실제로 JavaScript가 아니며 강력하게 입력되었으며 기능이 없습니다.
var add : Func<int, int, int> = ...
Scheme, Common Lisp, Clojure 또는 JavaScript와 유사한 기능적 프로그래밍 언어를 사용하는 게임 엔진이 있습니까?
Unity3D를 사용해 보았지만 "JavaScript"는 실제로 JavaScript가 아니며 강력하게 입력되었으며 기능이 없습니다.
var add : Func<int, int, int> = ...
답변:
.net 플랫폼에서 f # 또는 iron python (예, python이 작동하지 않음) 또는 XNA와 함께 다른 .netified 언어를 항상 사용할 수 있습니다.
http://fsharpgamedev.codeplex.com/ http://www.ironpython.info/index.php/XNA_Example_with_a_Bouncing_Sprite
편집 : Lisp로 작성된 하나 이상의 엔진 : http://code.google.com/p/blackthorn-engine/
작성된 질문에 대한 답변이 없지만 사용할 특정 엔진을 찾는 대신 "기능적인 게임 엔진이 더 이상없는 이유"를 묻고 싶을 것입니다. 맞다면 질문을 다시 바꿔야합니다. 그렇지 않다면 ... 무시해주세요. :)
순수한 기능적 접근 방식은 게임에 적합하지 않습니다. 게임 (및 그래픽, 물리, AI) 및 기본적으로 상태 변경에 관한 모든 것. 이러한 문제에 대한 올바른 기능적 접근 방식은 루프 당 한 번씩 전체 새로운 상태를 계산하는 것이며 실제 하드웨어의 작동 방식에 직접 코딩하는 것보다 성능이 크게 저하됩니다.
프로덕션 환경에서는 기능적인 스타일의 게임 엔진이 보이지 않기 때문입니다. 게임 엔진이 해결해야 할 대부분의 문제에 대한 잘못된 프로그래밍 패러다임입니다. 높은 수준의 스크립팅 및 게임 논리 코드에서 해결해야하는 대부분의 문제에 대한 잘못된 프로그래밍 패러다임입니다. 기능적인 게임 엔진을 만드는 것은 거의 가능하지만, 사용이 느리고 어렵고 번거롭고 깔끔한 데모 / 장난감이 아닌 다른 목적은 없습니다.
함수형 프로그래밍이 게임 어딘가에 있지 않다는 것은 아닙니다. C #, Unity JavaScript 및 C ++ 11에서도 매우 기능적인 코딩 스타일 (적절한 경우)을 사용합니다. 일부 매우 특정한 문제는 기능적 스타일로 가장 잘 또는 가장 쉽게 해결할 수 있으며, 오늘날 가장 많이 사용되는 언어는 "실제"기능적 언어보다 더 번거로운 방식이지만 프로그래밍 방식을 지원합니다. 일반적으로 기능적 접근 방식으로 해결 된 이러한 문제는 핵심 엔진 코드 나 게임 자체에서 실행되는 코드에는 없습니다. 기능적 코딩은 도구 및 오프라인 데이터 처리 (예 : 베이킹 모델 및 기타 자산)에 매우 유용 할 수 있습니다. 또한 GPU 프로그래밍이 알고리즘 작성 방식에서 모호하게 작동한다고 주장 할 수 있습니다.
물론 이러한 오프라인 도구를 가능한 빨리 만들기를 원하기 때문에 특정 상황 이외의 기능적 접근 방식을 피하는 것이 가장 좋습니다. 기능적 언어는 병렬 처리가 뛰어나 일부 문제에 유용하지만 하드웨어의 추상화는 매우 비효율적 인 단일 스레드 성능을 유발하는 경향이 있습니다. (LISP와 같은 언어는 순수한 기능이 아니기 때문에 여기에서 잘 작동합니다. 사실 일반적인 LISP는 다중 패러다임입니다.) 게임 엔진 또는 관련 툴킷에 대한 최악의 최악의 일은 콘텐츠 반복의 병목 현상입니다. 아티스트 나 레벨 디자이너가 5 분 안에 (또는 이상적으로, 거의 즉각적으로) 수행 할 수있는 작업을 수행하는 데 필요한 많은 기능을 갖춘 멋진 엔진은 예산 상승으로 인해 품질이 낮은 게임이나 취소로 이어질 수 있습니다.
Naugthy Dog 회사는 게임 엔진에서 List를 사용했으며이를 게임 지향 어셈블리 리스프라고했습니다.
일부 정보는 여기에서 찾을 수 있습니다 : http://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp
공용으로 사용할 수 없습니다.