기능적 프로그래밍 언어를 사용하는 게임 엔진이 있습니까? [닫은]


10

Scheme, Common Lisp, Clojure 또는 JavaScript와 유사한 기능적 프로그래밍 언어를 사용하는 게임 엔진이 있습니까?

Unity3D를 사용해 보았지만 "JavaScript"는 실제로 JavaScript가 아니며 강력하게 입력되었으며 기능이 없습니다.


2
ThreeJS를 사용하고 있지만 훌륭하지만 활발한 커뮤니티가 부족하고 문서는 심각한 문제입니다.
MaiaVictor

5
함수형 프로그래밍 언어로 프로그래밍하려는 이유는 무엇입니까? 직면 한 문제는 무엇입니까? 좀 더 구체적으로 설명하십시오. 알다시피,이 질문은 하나의 정답을 산출하기에는 너무 일반적이며 다음과 같이 (모두 "올바른") 답변 목록을 생성하는 경향이 있습니다. -기능적이지 않은 언어로 기능적 프로그래밍 스타일을 채택하는 것은 어떻습니까? ( Carmack의 C ++함수형 프로그래밍 읽기 )-기타
Eric

2
Unity3D의 자바 스크립트는 일반 자바 스크립트와 같은 기능을하며 C # 4.0 유형을 사용해야합니다.var add : Func<int, int, int> = ...
fableal

2
"사용할 기술" 질문 에 대한 FAQ 를 참조하십시오 . 답변에서 알 수 있듯이이 질문은 목록을 생성하는 것입니다. 하나의 정답이 없기 때문에 건설적이지 않습니다 ( "예"가 아님). 이것은 목록을 컴파일 할 장소가 아닙니다.
MichaelHouse

2
이것은 "올바른 작업을위한 올바른 도구"문제입니다. 함수형 프로그래밍은 가능한 변경 가능한 상태를 최소화하고 제거하는 데 중점을 둡니다. 특정 클래스의 응용 프로그램에서는 잘 작동 할 수 있지만 거의 모든 게임 작동 방식과 완전히 반대입니다.
메이슨 휠러

답변:


7

Haskell로 작성된 LambdaCube 가 있습니다 (정확히 게임 엔진은 아니지만 그래픽 엔진과 비슷합니다).


2
이것은 또한 당신에게 관심 있을 것입니다 (Epic의 Tim Sweeney의 일반 comentary)
tumdum

재미있는 링크, 여기
bobobobo


2

작성된 질문에 대한 답변이 없지만 사용할 특정 엔진을 찾는 대신 "기능적인 게임 엔진이 더 이상없는 이유"를 묻고 싶을 것입니다. 맞다면 질문을 다시 바꿔야합니다. 그렇지 않다면 ... 무시해주세요. :)

순수한 기능적 접근 방식은 게임에 적합하지 않습니다. 게임 (및 그래픽, 물리, AI) 및 기본적으로 상태 변경에 관한 모든 것. 이러한 문제에 대한 올바른 기능적 접근 방식은 루프 당 한 번씩 전체 새로운 상태를 계산하는 것이며 실제 하드웨어의 작동 방식에 직접 코딩하는 것보다 성능이 크게 저하됩니다.

프로덕션 환경에서는 기능적인 스타일의 게임 엔진이 보이지 않기 때문입니다. 게임 엔진이 해결해야 할 대부분의 문제에 대한 잘못된 프로그래밍 패러다임입니다. 높은 수준의 스크립팅 및 게임 논리 코드에서 해결해야하는 대부분의 문제에 대한 잘못된 프로그래밍 패러다임입니다. 기능적인 게임 엔진을 만드는 것은 거의 가능하지만, 사용이 느리고 어렵고 번거롭고 깔끔한 데모 / 장난감이 아닌 다른 목적은 없습니다.

함수형 프로그래밍이 게임 어딘가에 있지 않다는 것은 아닙니다. C #, Unity JavaScript 및 C ++ 11에서도 매우 기능적인 코딩 스타일 (적절한 경우)을 사용합니다. 일부 매우 특정한 문제는 기능적 스타일로 가장 잘 또는 가장 쉽게 해결할 수 있으며, 오늘날 가장 많이 사용되는 언어는 "실제"기능적 언어보다 더 번거로운 방식이지만 프로그래밍 방식을 지원합니다. 일반적으로 기능적 접근 방식으로 해결 된 이러한 문제는 핵심 엔진 코드 나 게임 자체에서 실행되는 코드에는 없습니다. 기능적 코딩은 도구 및 오프라인 데이터 처리 (예 : 베이킹 모델 및 기타 자산)에 매우 유용 할 수 있습니다. 또한 GPU 프로그래밍이 알고리즘 작성 방식에서 모호하게 작동한다고 주장 할 수 있습니다.

물론 이러한 오프라인 도구를 가능한 빨리 만들기를 원하기 때문에 특정 상황 이외의 기능적 접근 방식을 피하는 것이 가장 좋습니다. 기능적 언어는 병렬 처리가 뛰어나 일부 문제에 유용하지만 하드웨어의 추상화는 매우 비효율적 인 단일 스레드 성능을 유발하는 경향이 있습니다. (LISP와 같은 언어는 순수한 기능이 아니기 때문에 여기에서 잘 작동합니다. 사실 일반적인 LISP는 다중 패러다임입니다.) 게임 엔진 또는 관련 툴킷에 대한 최악의 최악의 일은 콘텐츠 반복의 병목 현상입니다. 아티스트 나 레벨 디자이너가 5 분 안에 (또는 이상적으로, 거의 즉각적으로) 수행 할 수있는 작업을 수행하는 데 필요한 많은 기능을 갖춘 멋진 엔진은 예산 상승으로 인해 품질이 낮은 게임이나 취소로 이어질 수 있습니다.


1
Clean Game Library (Clean) 및 Nikki 및 Robots (Haskell)를 참조하십시오.
Andres F.

1
이 답변은 대부분 잘못되었으며 실제 기능 언어에 대한 이해가 부족한 것으로 보입니다.
CA McCann

1
실제 카운터 포인트가 있습니까?
Sean Middleditch

4
... 기능적 언어로 업계 수준의 게임을 얼마나 경험 했습니까? 경험이 있다면 공유하십시오. 전문 지식이나 권위, 개인적 비난에 호소하지 않고 설명과 정당성을 갖춘 진술을하십시오. 이런 종류의 분개 한 논쟁과 개인적인 논쟁의 가능성은 바로이 질문이 종결 된 이유입니다.
Sean Middleditch

4
당신은 내 입에 단어를 넣고 있습니다. 내 전문 지식에 대한 귀하의 의견이 주제와 전혀 관련이 없기 때문에 내 경험 수준을 밝히지 않았습니다. 개인적인 기술 수준을 공격 할 시간이 있지만 사실을 진술 할 시간이 없다고 주장하지 마십시오. 실제 수정이있을 수 있지만이를 명시해야합니다. "그 사람이 틀렸다"는 사람에게는 귀중한 답변 피드백이 아닙니다. 나는 단지 당신이 틀렸다고 주장 할 수 있습니다. 그리고 우리는 끝없는 무의미한주기를 가지고 있습니다. 대답이 틀렸는 말 해주세요 .
Sean Middleditch

0

Naugthy Dog 회사는 게임 엔진에서 List를 사용했으며이를 게임 지향 어셈블리 리스프라고했습니다.

일부 정보는 여기에서 찾을 수 있습니다 : http://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp

일부 코드 샘플 : http://web.archive.org/web/20070127022728/http://lists.midnightryder.com/pipermail/sweng-gamedev-midnightryder.com/2005-August/003804.html

공용으로 사용할 수 없습니다.


위키 백과의 설명을 보면, GOAL은 기능적인 언어가 아니며 LISP 조상이 아니 었음을 금방 알 수 있습니다.
메이슨 휠러
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.