[C++] 실시간 그래픽 프로그래밍을위한 C ++의 가장 좋은 대안은 무엇입니까? [닫은]



Answers

D 프로그래밍 언어는 어떻습니까?

댓글에서 요청 된 일부 링크 :

Win32 API

Derelict (멀티미디어 라이브러리)

Question

C ++은 너무 많은 시간을 내 자신의 기억을 마이크로 관리함으로써 날 너무 std::vector<Thingy>::const_iterator it = lotsOfThingys.begin() 너무 많이 입력하게 만든다. (hello std::vector<Thingy>::const_iterator it = lotsOfThingys.begin() ), 컴파일 시간. 심각한 실시간 그래픽 프로그래밍을위한 최선의 대안은 무엇입니까? 가비지 콜렉션은 필수 항목이므로 필요한 경우 사용을 피할 수있는 기능이므로 속도는 C ++과 경쟁 할 수 있어야합니다. C 라이브러리에 액세스하기위한 합리적인 이야기 또한 필수입니다.

전체 공개 : 나는 이것에 대한 내 자신의 대답을 가지고 있지만 다른 사람들이 실시간 그래픽 작업을 위해 C ++에 대한 좋은 대안으로 무엇을 찾았는지보고 싶다.

편집 : 사려 깊은 대답에 감사드립니다. 이 질문에 대한 "올바른"대답이 없다는 것을 감안할 때 나는 어떤 특별한 대답도 선택하지 않을 것입니다. 게다가 나는 C ++ 대안으로 좋아하는 언어를 골라야 할 것입니다. 그것은 정말로 공정하지 않을 것입니다.




당신은 Ada 를 볼 수 있습니다. 가비지 콜렉터가 없지만이 언어는 종종 높은 신뢰성이 필요한 실시간 시스템에 사용됩니다. 즉, 3D 응용 프로그램의 디버깅 시간이 줄어 듭니다.

하스켈을 볼 수도 있습니다. 만약이 패러다임이 기능적 패러다임을 알지 못한다면,이 언어는 이상하게 보일 것입니다. 그러나 약간의 시간이 걸릴 것입니다. Tim Sweeney (EPIC Inc)는이 언어를 C ++ 대안으로 고려하고 있습니다.




기계어 코드로 컴파일되는 Lisp의 변형은 C ++만큼 빠르다. Naughty Dog 팀은 Game Oriented Assembly Lisp라는 Lisp 버전을 만들었는데,이 Lisp 은 Jak 및 Daxter 시리즈를 포함하여 여러 AAA 타이틀을 만드는 데 사용되었습니다. 게임 산업에서 리스프 접근법의 두 가지 주요 장애물은 C / C ++ 개발의 확고한 성격 (도구와 인적 자산 모두 C / C ++에 막대한 투자가 있음)뿐 아니라 별의 재능있는 엔지니어를 찾는 어려움입니다 게임 프로그래밍 도메인과 Lisp 언어 모두.

업계의 많은 프로그래밍 팀은 실시간 코드, 특히 그래픽 및 물리 코드가 C 또는 C ++로 작성된 하이브리드 접근 방식으로 전환하고 있지만 게임 논리는 더 높은 수준의 스크립팅 언어로 수행됩니다. 프로그래머와 비 프로그래머 모두가 편집 할 수 있습니다. 루아 (Lua)파이썬 (Python) 은 둘 다 상위 레벨 스크립팅에 널리 사용됩니다.




나는 C ++ 0x를 투표했습니다. 부분 지원은 이미 gcc-4.3 +에서 -std = c ++ 0x 플래그를 사용하여 사용할 수 있습니다.




나는 당신의 전제에 동의하지 않습니다. C ++은 신중하고 적절하게 사용되는 경우 특히 속도가 핵심 인 실시간 그래픽과 같은 도메인의 경우 훌륭한 언어입니다.

시스템을 잘 설계하고 stl 컨테이너와 스마트 포인터를 사용하면 메모리 관리가 쉬워집니다.

std::vector::const_iterator it = lotsOfThingys.begin()) 을 사용하면 훨씬 짧아집니다.

using namespace std;
typedef vector::const_iterator ThingyConstIter;

또한 미리 컴파일 된 헤더를 사용하거나 PIMPL 관용구를 사용하여 시스템을 합리적으로 자체 포함 된 모듈로 분리하여 컴파일 시간을 크게 단축 할 수 있습니다.




Windows를 목표로한다면 C ++ / CLI (Microsoft의 .NET 관리 형 C ++ 언어)가 흥미로운 가능성이 있습니다. 특히 C ++ 경험을 활용하려는 경우 더욱 그렇습니다. 네이티브 코드 (예 : C 스타일 라이브러리 호출)를 .NET 관리 코드와 완벽하게 혼합하고 .NET GC 및 라이브러리를 활용할 수 있습니다.

GC가 '실시간'성능에 영향을 미치는지에 대한 우려가 있다면, 나는 그것이 지나치게 강조되는 경향이 있다고 생각합니다. 다중 세대 .NET GC는 사용자가 중요한 메모리 부족 상황에 처한 경우를 제외하고는 수집을 수행하는 데 많은 시간을 사용하지 않는다는 점에서 매우 뛰어납니다. 전자 파생 상품 거래와 상호 작용하는 .NET 코드를 작성합니다. 여기에는 시간 지연 == $$$이 많이 걸리고 GC 관련 문제가 없었습니다. 수십 밀리 초는 GC의 길고 오랜 시간이지만 인간과 소프트웨어의 상호 작용은 물론 '실시간'게임조차도 아닙니다. 진정한 "실시간"성능 (의료 기기, 프로세스 제어 등)이 정말로 필요하다면 어쨌든 Windows를 사용할 수 없습니다. 실시간 OS가 아닙니다.




때로는 두들겨 진 길 밖을 바라 보면서 진짜 보석을 발견 할 수 있습니다. PureBasic (이름을 오도하지 마십시오)을 고려하는 것이 좋습니다. 다음은 세부 정보입니다.

PureBasic 기능

  • 기계 코드 (어셈블리) 실행 파일 (FASM)
    • 인라인 어셈블리 지원
    • 실행 시간 필요 없음 (DLL 필요 없음 등) 1 실행 파일
    • 작은 실행 파일 (작거나 작은 / C ++보다 빠르거나 빠름)
    • DLL을 작성할 수 있습니다.
    • 멀티 스레드 지원
    • 전체 OS API 지원
  • 다중 플랫폼 지원
    • Windows 95-2003
    • 리눅스
    • 맥 OS X
    • 아미가
  • 2D 및 3D 게임 개발
    • DirectX
    • OGRE
  • 풍부한 라이선스
    • 저렴한 (79 유로 또는 약 112 달러)
    • 평생 라이선스 (향후 업데이트 및 버전 포함)
    • 모든 플랫폼에 대해 하나의 가격
  • 외부 라이브러리 지원
    • 타사 DLL
    • 사용자 라이브러리
  • 온라인 지원
    • 개발자가 이끄는 반응 형 개발 팀
    • 온라인 포럼
      • 답변을위한 한 곳 (모든 곳을 갈 필요가 없습니다)
      • 샘플 코드의 방대한 양 (IEtool을 사용하여 IE에서 코드를 실행 해보십시오)
      • 빠른 답변
  • 보너스 학습 (C ++ 학습의 대안)
    • API
    • 구조물
    • 인터페이스
    • 포인터

온라인 포럼을 방문하여 PureBasic ( http://www.purebasic.fr/english/index.php ) 또는 기본 사이트 ( www.purebasic.com )에 대해 더 자세히 알아보십시오 .




좋은 질문. '나를 너무 많이 쓰게 만드는 것'에 관해서는 C ++ 0x가 언급 한 것의 대부분을 다루는 것처럼 보입니다 :

auto it = lotsOfThingys.begin ()) // ... * ML에서와 같이 유형을 추론합니다. VS2010beta는 이미 이것을 구현합니다.

효율성을 위해 메모리 관리에 관해서는 가비지 콜렉션의 유무와 상관없이 메모리 할당을 잘 추적해야합니다 (즉, 메모리 풀을 만들고 할당 된 객체를 때때로 다시 사용). 결국 환경이 쓰레기인지 여부 수집 된 것과 그렇지 않은 것, 덜 중요한 것. 메모리가 단편화되지 않도록하려면 gc ()를 명시 적으로 호출해야합니다. 일관된 방법으로 메모리를 관리하는 것이 중요합니다. RAII는 C ++의 킬러 기능입니다. 또 다른 것은 메모리가 단지 하나의 리소스 일 뿐이므로 여전히 GC로 다른 리소스를 추적해야하므로 RIAA입니다.

어쨌든, C #은 여러면에서 훌륭한 대안입니다. 아주 멋진 언어, 특히 기능 스타일의 코드를 작성하는 기능 (귀여운 lambda -> 구문, map / select 'LINQ'구문 등)을 찾을 수 있습니다. 병렬 코드를 작성할 수있는 가능성; 여러분 (또는 동료)이 필요할 때 여전히 '표준 중괄호'입니다.




큰 AAA 타이틀, 특히 콘솔에 대한 진정한 대안은 없습니다. 작은 제목의 경우 C #이 수행해야합니다.




타겟이 PC 인 경우, C #을 사용해 보거나 C ++ 앱에 Lua 를 삽입하고 '상위'수준의 스크립트를 실행할 수 있다고 생각합니다. 그러나 대상이 콘솔 인 경우 자신의 메모리를 관리 해야합니다 !




나는 D 프로그래밍 언어가 좋은 선택이라고 말하고 싶다. C 객체 파일에 링크하고 C 라이브러리를 통해 C ++ 코드와 인터페이스 할 수 있습니다. D에는 가비지 콜렉션, 인라인 어셈블리 및 게임 개발자가 SDL 및 OpenGL 라이브러리에 대한 바인딩을 만들었으며 새로운 게임 개발 API를 적극적으로 개발하고 있습니다. 나는 너무 사랑한다. 내 직업이 너무 좋지 않다. :(




당신의 탐구에서 독립적 인 언어를 간과하지 마십시오. Ionic Wind Software의 Emergence BASIC은 DirectX 9 엔진을 내장하고 있으며 OOP를 지원하며 C 라이브러리와 쉽게 인터페이스 할 수 있습니다.

http://www.ionicwind.com

제임스.




Java와 LWJGL (OpenGL 래퍼)이 잘 작동했습니다. Orge와 같은 씬 그래프 유형 라이브러리를 더 찾고 있다면 jMonkeyEngine을 살펴보고 Google 어스 유형 애플리케이션 (www.skapeworld.com 참조)을 작성하는 데 사용했습니다. 당신이 객체 생성에 합리적인 것이라면 가비지 컬렉션은 중요하지 않습니다.




XNA가 최선의 방법이라고 생각합니다. .NET Framework에서 지원되므로 Game Studio의 설정을 변경하여 Windows 또는 Xbox 360 플랫폼 용으로 빌드 할 수 있습니다. 최고지만, 모든 도구는 무료입니다!

XNA를 사용하기로 결정했다면 퀵 스타트 가이드 XNA Quickstart 가이드를 사용하여 쉽게 시작할 수 있습니다

지금까지 저에게는 보람 있고 재미있는 experiance 였고, C ++의 메모리 관리에 대한 좋은 휴식이었습니다.




아마도 하이브리드 방식 일 것입니다. 파이썬과 C ++은 좋은 조합입니다 (예를 들어 PyGame 참조).




Links