스크립팅 언어로 무엇을 찾으십니까? [닫은]


10

다른 프로젝트를 위해 약간의 임베디드 언어를 작성하고 있습니다. 게임 개발은 원래 의도가 아니었지만, 잘 맞는 것처럼 보이기 시작했고, 어느 시점에서 그 맥락에서 개발할 것이라고 생각합니다.

세부 사항을 밝히지 않고 (편견을 피하기 위해) 궁금합니다.

게임 개발을 위해 스크립팅 언어로 어떤 기능을 좋아합니까?

게임 프로젝트에서 Lua, Python 또는 다른 내장 언어 (예 : Tcl 또는 Guile)를 기본 스크립팅 언어로 사용한 경우 가장 유용한 측면은 무엇입니까?

  • 언어 기능 (람다, 클래스, 병렬 처리)

  • 구현 기능 (성능 최적화, JIT, 하드웨어 가속)

  • 통합 기능 (C, C ++ 또는 .NET 바인딩)

  • 아니면 완전히 다른 것?


2
난독 화 : 난독화할 수 있으면 상당히 유연하기 때문입니다. 예를 들어 펄을 예로 들자면 300bps 모뎀 (다른 사람이 집의 다른 쪽에서 전화를 받았을 때)의 회선 잡음으로 인해 출력으로 보일 정도로 혼란 스러울 수 있습니다. 빠른. ;-P
Randolf Richardson

1
@Randolf : 좋은 지적입니다. 난독 처리의 유일한 문제는 젊은 언어가 아닌 안정적인 언어에 의존하는 경향이 있다는 것입니다. 0.10에서 작동하는 난독 처리기는 0.11에서 작동하지 않을 수 있습니다.
Jon Purdy 2016 년

@ Jon Purdy : 맞습니다 (+1). 난독 처리 된 코드는 유지 관리하기가 어렵다는 측면도 있습니다. 그러나 중요한 점은 난독 화가 언어의 유연성에 대한 하나의 흥미로운 척도를 제공 할 수 있다는 것 입니다.
랜돌프 리차드슨

5
@Randolf : 펄은 언제 그렇게 보이지 않습니까?
Ken

1
@Joe Wreschnig 즉, '어느 쪽을 선택해야합니까?'라는 말이 있는데, 이것은 '스크립팅 언어에서 어떤 기능이 좋은지'입니다.
공산주의 오리

답변:


4

속도와 통합이라는 두 가지를 찾고 있습니다. 일반적으로 두 사람은 친숙하게 함께갑니다. 불행히도 C ++의 경우 속도와 통합을 제공하는 언어가 거의 없습니다. 나는 루아를 사용했고 끔찍하게 빨려 들었습니다. 나는 바인딩을 작성하는 데 시간을 보냈고 실제로 코드를 작성하는 데 거의 시간이 걸리지 않았습니다.

언어 기능? 스크립팅 언어를 임베드하는 것은 원래 언어에없는 동적 언어 기능을 사용할 수 있도록하는 것이 아니라 런타임에 해석 할 수 있도록하는 것 입니다. 기본적으로 기능적이라면 호스트 언어 (이 경우 C ++)와 잘 어울립니다. 그러나 놀랍게도, 설계 언어를 완전히에 대한 부분 실패 호스트 응용 프로그램에 통합되는 통합 .

공동 루틴이 필요합니까? 아니요, 공동 루틴이 필요하지 않습니다. 동적 입력이 필요합니까? 아니요, 스크립팅 언어에서 어떤 유형이 다시 나올지 알아야 합니다. 기존의 모든 코드가 매우 강력한 타이핑을 기반으로 구축되었으므로 스크립트 코드도이를 존중할 수 있기를 바랍니다. 가비지 수집이 필요합니까? 아니요, 제 유형은 이미 자체 리소스를 관리하며 결정 론적 파괴를 원합니다. 내가 가고 싶니? 아니요. 예외를 던지고 싶습니다.

내가 찾은 문제는 기본적으로 기존의 모든 스크립팅 언어가 C ++이 아닌 C를 확장하도록 설계되었으며 여러 가지 방법으로 C ++ 모델을 올바르게 지원하지 않으며이 외에도 완전히 다른 의미가 있습니다. 어떻게 지구상에서 shared_ptr자동 결정 론적 파괴 인 가비지 수집 환경으로 변환 할 것인가? 원하는 랩핑 라이브러리를 작성할 수 있으며 확장하려는 언어와 호환되지 않는 기본 언어 의미를 변경하지 않습니다. 이것이 void*올바른 유형 인지 어떻게 확인할 수 있습니까? 상속을 어떻게 처리 할 수 ​​있습니까? 예외를 던지고 잡는 방법은 무엇입니까? 작동하지 않습니다.

C ++에 대한 좋은 스크립팅 언어는 정적으로 유형이 지정되고 의미 론적이며 결정 론적으로 파괴되며 예외를 throw 및 catch하고 내 소멸자 / 생성자 / 복사 생성자를 존중합니다. 바인딩하고 쉽게 내 원래 의미를 모두 지원합니다.


당신은 같은 것을 시도해야 이 랩퍼 라이브러리 자신이 최근에 당신이 가진 것과 같은 문제들을 해결하기 위해 내가 쓴합니다. shared_ptrs와 물건을 잘 사용할 수 있고, 유형 안전하고 (어쨌든 가능한 한) 코드 또는 Lua 환경에 의해 제어되는 무언가의 수명을 원하는지 결정할 수 있으며 상속을 지원합니다. 일반 Lua API와 매우 유사합니다. 나는 바인딩을 만드는 것에 대한 불만을 확신하지 못합니다. 나는 vim 스 니펫을 사용하여 바인딩을 99 %의 시간으로 만듭니다.
Alex Ames

2

웹 기반 게임의 경우 세 가지 중요한 요소는 다음과 같습니다.

  • 정통
  • 속도
  • 완성

특히 Perl을 선호합니다. 부분적으로 언어에 이미 익숙하고 mod_perl2와 같은 웹 서버 모듈을 사용하면 성능과 통합 이점이 매우 뛰어납니다. mod_perl2는 컴파일 된 스크립트 버전을 RAM에 유지합니다 ( 컴파일 옵션이없는 다른 인터프리터 언어에 비해 속도면에서 유리한 이점을 제공하며, 매우 강력한 기능에 액세스 할 수있는 기능이 풍부한 API를 사용하여 Apache HTTPd 서버에 통합됩니다.

이러한 요소는 웹 기반 게임 개발에 유용 할 수 있습니다 (데이터베이스 액세스가 필요한 경우 데이터베이스 연결을 캐싱하면 사용자의 응답 시간이 더욱 단축됩니다). 물론 각 언어마다 장점 (및 단점)이 있기 때문에 모든 것에 가장 이상적인 솔루션은 아니지만 항상 내 요구에 잘 맞았습니다.


2

중요도 (감소) 순서로 정렬 :

  • 한눈에 읽을 수 있습니다. 실제로, 그것은 내가 사용하고자하는 모든 언어에 대한 요구 사항 이지만, 스크립팅의 경우 더욱 중요합니다. 스크립트는 정의상 "핵심"코드보다 더 자주 변경됩니다. 따라서 LISP 또는 PERL은 없습니다.
  • 간결함. 스크립트는 지속적으로 작성되고 재 작성되며, 많은 "boilerplate"코드를 입력하는 것은 비효율적입니다.
  • 쉬운 디버깅. 중단 점, 단계별 등이있는 것이 좋습니다.
  • 선택한 "핵심"기술과 쉽게 통합됩니다. 게임에 C ++을 사용하는 경우 LUA와 같이 좋은 C ++ 바인딩이 필요합니다. 게임이 C # 인 경우 CLI 기반 언어 인 C #, IronPython, Boo를 선택합니다.
  • 언어 특징 : 쉬운 연관 배열, 코 루틴, 람다. 실제로 이것은 주로 스크립트를 사용할 대상에 따라 다릅니다. AI 스크립트는 초기화 스크립트와 다릅니다.
  • 좋은 문서. C #에는 전체 MSDN이 있으며 Boo에는 소스 만 있습니다. 이것이 C #이 더 나은 이유입니다.
  • 좋은 개발 환경. VS 또는 Eclipse는 매번 메모장을 능가합니다.

+1 덕분에 도움이 많이되었습니다. 감사합니다. 더 이상의 논의가 있는지 기다릴 것이지만, 잘 다루었다고 생각합니다.
Jon Purdy 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.