게임을 만드는 데 가장 적합한 기능 언어는 무엇입니까? [닫은]


19

함수형 프로그래밍 언어를 잠시 살펴 봤지만 실제로 사용하는 것을 망설이고 있습니다. 그러나 나는 적어도 내가 그 준비를하기 위해 그 방향으로 글라이딩을 시작하는 시간에 관한 것이라고 생각합니다.

Haskell, F #, Scala 등의 이야기를 보았습니다. 그러나 나는 언어와 지역 사회의 차이점을 전혀 알지 못합니다. 게임 개발의 맥락에서 제외.

게임 개발 관점에서 볼 때 어떤 기능 프로그래밍 언어가 게임 프로그래밍에 가장 적합한 기능을 가지고 있습니까? 예를 들어, 기능적 언어를위한 기능성 게임 개발 라이브러리 / 엔진 / 프레임 워크 또는 그래픽 엔진이 있습니까? 게임 개발에 일반적으로 사용되는 특정 데이터 구조를 처리하는 언어가 있습니까?

결론 : 기능적 게임 프로그래밍에 가장 적합한 기능적 프로그래밍 언어는 무엇이며 그 이유는 무엇입니까?

나는이 질문이 분명한 최고의 언어를 선언 할 것이라고 믿거 나 희망하기 때문에 주관적인 경향에도 불구하고 CW를 표시하지 않았습니다.


2
"2D 게임 또는 3D 게임은 무엇을 의미합니까?" "허? 모르겠어요 -aieeee "
Cyclops

@Cyclops 어, 뭐? 이해가 안됩니다 ...
Ricket

@Ricket, 부분적으로 2D 또는 3D (그리고 아마도 실시간 또는 턴 기반)에 대해 이야기하고있는 게임의 유형 을 명확히하기위한 요청이었습니다 . 일부는 Monty-Python 농담으로 첫 번째 부분을가 렸습니다. 부스. :) 그리고 게임 유형을 지정하는 것이 유용하다고 생각합니다. 모든 것에 완벽한 단일 기능 언어가 없다면 다른 언어가 다른 것보다 나을 수 있습니다.
Cyclops

언어에 사용할 수있는 다양한 엔진 / 라이브러리를 제외하고 2D 또는 3D가 언어 선택에 영향을 미친다고 생각하지 않습니다. 저는 개인적으로 2D와 3D에 관심이 있으므로이 질문을 쓸 때 하나 또는 다른 것을 생각하지 않았습니다. 그러나 전반적으로 2D 및 3D 게임은 많은 공통 시스템 및 데이터 구조 (예 : 오디오, 입력, AI, 프로그램 구조, 게임 루프)를 공유하며 2D로 포팅 할 수있는 3D 게임이 많이 있습니다. 그리고 그래, 나는 Monty Python을 보지 못했기 때문에 전혀 이해하지 못했습니다. :)
Ricket

1
최고의 언어에 대한 명확한 대답이 없다고 생각합니다.
Wei Hu

답변:


12

Microsoft .net 제품군의 일부인 F #은 XNA에 액세스 할 수 있으며 이는 게임 구축을위한 환상적인 기반입니다. 약간의 인터넷 검색으로 튜토리얼, 비디오 및 기사가 표시됩니다. 훌륭한 XNA 문서도 도움이 될 것입니다.

Haskell의 게임에서도 약간의 움직임이있었습니다 . 여기를 참조 하십시오 . 아마도 openGL 바인딩을 사용하고있을 것입니다.

Scala는 Java 랜드에서 재생되므로 사용 가능한 모든 Java 엔진 / 바인딩과 통합됩니다 . 이 SO 게시물을 참조하십시오 .

나는 그것이 선호도에 달려 있다고 생각합니다. 나는 Haskell과 만 놀았지만 각 기능적 언어에는 고유 한 특성이 있다고 생각합니다. 각각 작은 테스트 게임을 만들어 어떤 게임이 나에게 더 기분이 좋은지 알아볼 가치가 있습니다.

내가 말했듯이 나는 Haskell 경험이 최소한이므로 최고의 의견을 말할 수는 없지만 이러한 자료를 통해 희망적으로 시작할 수 있습니다.


2
JVM 문제와 컴파일러 구현의 미숙함 사이에서 언어 자체가 잘 지원하더라도 기능적 스타일을 사용할 때 스칼라의 성능을 받아 들일 수 없다는 것을 알았습니다. F #이나 OCaml이 아니라 Python이나 Ruby만큼 빠릅니다. (Scala의 속도는 더 많은 OO / 절차 스타일에 대해 경쟁력이 있습니다.)

실제로 XNA를 실행하는 F # 프로젝트를 얻었습니다 (즉, 수레 국화가있는 빈 XNA 창입니다. 코드는 C #이 아닌 F #입니다.
RCIX

8

나는 Lisp라고 말할 것입니다.

그것은 게임에서 스크립팅 언어로, 적어도 Naughty Dog에서 (또는 생각했던 것) 사용되었으며, 매우 성숙한 언어입니다.

Lisp의 장점은 역 직렬화 (deserialization)인데, 이는 자산 관리라고하는 것의 주요 부분입니다. 역 직렬화 리스프는 사소한 것이며 코드와 데이터는 하나입니다. 이를 통해 자산 및 동작에 대한 파일 형식을 쉽게 만들 수 있습니다. json / xml / yaml / bin에있는 것과 AI에 대한 하나의 F # 파일과는 다릅니다. 모든 것을 s- 표현식으로 저장하면 자산 파이프 라인을 크게 단순화 할 수 있습니다.


TBH 나는 이것을 반대하는 것이 좋습니다. 스크립팅 언어는 개발자가 사용할 수있는 것이 아닙니다. modders는 게임을 수정하고 싶을 것이며, (() ()))) () ((())보다 더 겁을 줄만한 것은 없으며 Lisp는 난해하다
RCIX

7
모 더링을 두려워하는 것이 당신을 걱정하는 것이라면, 기능적 언어를 사용하는 것이 올바른 행동이 아닐 수도 있습니다.
Paul Wicks

3
@RCIX & @Joe-Necro가 활성화합니다. 어쨌든 스킴 교육 언어로 사용됩니다. SICP 는 한 권의 책에서 CS 학위의 절반 정도이며 최근까지 MIT를 포함하여 많은 학교에서 사용되며 HTDP 는 덜 하드 코어 소개입니다.
Jesse Millikan 2012

1
@RCIX & Joe는 정말로. 혀짤배기 및 제도는 많은 대학에서 입문 언어.
oberhamsi

1
Lisp은 사용하고 싶은 것이 아닙니다. Naughty Dog는 하나의 단일 Lisp 프로그래머를 보유하고 종료했을 때 모든 엔진을 C ++로 전환했습니다. 왜 한 회사의 쓸모없는 엔진이 항상 빛나는 모범으로 드러날 지 모르겠다. =)
Patrick Hughes

8

그것에 대한 실질적인 경험을 얻은 후에 Clojure에 투표 할 것입니다. 이미 작은 게임을 작성하고 더 많은 것을 할 계획입니다.

원인:

  • 생산성 -Clojure는 동적 인 언어입니다. 대화 형 REPL 스타일 개발을위한 훌륭한 기능을 갖추고 있습니다. 예를 들어 REPL을 사용하여 실행중인 게임 응용 프로그램 인스턴스 내부의 상태를 쿼리하거나 변경할 수 있습니다. Clojure의 코드는 종종 말도 안되게 간결합니다. Java 또는 C #보다 Clojure에서 생산성이 3-5 배 더 높습니다.
  • 불확실성-Haskell 과 같은 순수한 기능적 언어의 아름다움과 우아함에 감사하지만 게임 프로그래밍은 실용주의가이기는 지저분한 추구입니다. 필요할 때 내 기능에 부작용을 넣을 수 있기를 원하며 Clojure가 허용합니다. 그러나 관용적 Clojure 스타일은 대부분 순수하게 기능적이어야 한다 .
  • 메타 프로그래밍-Clojure 의 Lisp 유산은 호모 닉 언어 로서 메타 프로그래밍 / 코드 생성에 적합합니다. 자신 만의 DSL을 만들거나 biolerplate을 제거하기 위해 "언어를 확장"하는 것이 쉽습니다. Clojure를 자체 게임 스크립팅 언어로 쉽게 사용할 수 있으며 동적 코드 컴파일을 통해 스크립트가 핵심 게임 엔진처럼 빠르게 실행될 수 있습니다.
  • 자바 라이브러리에 액세스 . Java의 모든 사운드 / 그래픽 / AI / 네트워킹 라이브러리를 사용할 수 있습니다.이 라이브러리는 대부분의 다른 기능 언어와 비교할 때 큰 이점입니다 (처음부터 작성하거나 많은 까다로운 인터페이스 코드를 개발해야 함). 이것은 생명의 은인이 될 수 있습니다.
  • 크로스 플랫폼 -JVM에서 무료로 실행할 수 있지만 좋은 보너스입니다.
  • 성능 -동적 기능 언어의 경우 Clojure는 최대한 빨리 얻을 수 있습니다. 항상 JIT 컴파일되어 해석되지 않습니다. 지능적인 최적화를 통해 Clojure의 순수한 저수준 Java 코드 속도를 일치시킬 수 있습니다. 예를 들어, Java 기본 배열을 사용하거나 형식 힌트를 제공하여 컴파일러가 성능에 중요한 코드에서 정적으로 형식화 된 함수 호출을 생성 할 수 있습니다.
  • 동시성 -Clojure에는 인상적인 소프트웨어 트랜잭션 메모리 시스템이 지원하는 동시 상태 관리를위한 훌륭한 모델이 있습니다. 이것이 어떻게 작동하는지에 대한 더 많은 통찰력을 얻으려면이 비디오볼 가치가 있습니다.

Clojure를 고려 하지 않은 유일한 시간 은 첨단 성능이 필요한 최첨단 그래픽 집약적 게임을 작성하는 경우입니다 (여전히 C / C ++가 필요하다고 생각하는 곳).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.