2011-04-25 6 views
1

루아에서 사용하기 위해 2 차원 벡터와 같은 데이터 구조가 필요합니다. 지금까지 나는이 문제에 대한 몇 가지 솔루션을 발견했습니다 : 순수 루아의 데이터 유형을 정의루아에서 효율적인 사용자 정의 데이터 유형

  1. 클래식 솔루션 - 단점은 (또한 같은)에 대한 모든 작업이 설정 메타 테이블을 새로운 데이터 유형을 만들 필요가있다 x, y는 필드로 저장되므로 빠른 액세스가 가능합니다.
  2. C- 측의 일반적인 전체 사용자 데이터 솔루션 - 더 빨라지고 여전히 운영자가 허용되며 작업 코드는 C면이지만 모든 작업이 새 객체를 할당해야합니다. 필드의 가능성은 없으므로 루아에서 느린 일이 될 수있는 x 및 y를 시뮬레이트하기 위해 사용자 정의 __index/newindex 함수를 수행해야합니다.
  3. Lua 객체를 정의하지만 C 코드, x 및 y를 사용하는 하이브리드 접근 방식은 여전히 ​​간단한 액세스 필드이지만 함수는 C로 코딩되므로 더 빠릅니까?

나는 # 2 또는 # 3으로 이동할 계획 인 효율성 문제로 인해 # 1 접근 방식을 시도했지만 어떤 것이 더 효율적인지는 알지 못합니다.

컴파일러 자체에서 데이터 유형을 하드 코딩 할 가능성이 있지만, 나는 그런 과감한 아이디어에 아직 준비가되어 있지 않다고 생각합니다. (이것은 소리가 나지 않고 미친 듯합니다.) 2d 벡터는 네이티브 루아 타입의 이중 크기에 적합합니다).

두 가지 방법 중 어느 것이 더 효율적입니까? 이 경우 내가 생각하지 못한 함정이 있습니까?

+3

당신이 ** # 1이 너무 느립니다 ** 알아보기 FFI

LuaJIT2을 사용할 수 있습니까? – delnan

+0

@delnan, 루아 최적화의 두 가지 황금률을 알고 있습니다.). 또한 # 1에서 멀어지면 다른 이유 (C 수준의 구조 배포 등)에 따라 달라집니다. –

+2

# 1 구현을 어딘가에 배치 할 수 있습니까? 어쩌면 그것이 최적이 아닐 수도 있습니다. – kikito

답변

3

옵션 # 4 : related work

+0

+1 : 와우, LuaJIT는 내가 사용할 수있는 것은 아니다. (모든 타겟 아키텍처가 지원되는 것은 아니다) 이것은 정말로 흥미로운 링크이다. 고마워! –