您在脚本语言中寻找什么?[关闭]


10

我正在为另一个项目编写一些嵌入式语言。尽管游戏开发不是其初衷,但它看起来似乎很合适,我认为我会在某个时候进行开发。

在不透露任何细节(以避免偏差)的情况下,我很想知道:

您喜欢用脚本语言进行游戏开发的哪些功能?

如果您在游戏项目中使用Lua,Python或其他嵌入式语言(例如Tcl或Guile)作为主要脚本语言,那么您发现哪些方面最有用?

  • 语言功能(lambda,类,并行性)

  • 实现功能(性能优化,JIT,硬件加速)

  • 集成功能(C,C ++或.NET绑定)

  • 还是完全不同的东西?


2
混淆:因为如果可以对其进行混淆,那么它也可能非常灵活。以Perl为例,它可以在某种程度上被模糊化,使其看起来像是由300bps调制解调器的线路噪声(当有人在房子的另一端接电话)引起的输出。快速。;-P
Randolf Richardson

1
@Randolf:好点。混淆的唯一问题是它倾向于依赖稳定的语言,而年轻的语言则不是。使用0.10的混淆器可能不适用于0.11。
乔恩·珀迪

@乔恩·普迪(Jon Purdy):正确(您的+1)。混淆的代码还有一个方面很难维护。但是,需要注意的重要一点是,混淆可以提供一种有趣的度量,以衡量语言的灵活性。
兰道夫·理查森

5
@Randolf:什么时候perl看起来不是这样?

1
@Joe Wreschnig的意思是“我应该选哪个”,这更多的是“脚本语言中哪些功能很好”。
共产党鸭子

Answers:


4

我正在寻找两件事-速度和集成。通常,两个人在一起并熟悉。不幸的是,对于C ++,几乎没有语言提供速度和集成。我用过Lua,它很烂。我一整天都在写绑定,而实际上没有足够的时间来写代码。

语言功能?嵌入脚本语言的目的不是要使它具有我原来的语言所没有的动态语言功能,而是可以在运行时解释它。我真的不在乎,只要它是基本功能,就可以了,并且适合我的宿主语言(在本例中为C ++)。但是,令人惊讶的是,旨在集成到宿主应用程序中的语言完全无法解决集成方面的问题

我需要协同程序吗?不,我不需要协同例程。我需要动态输入吗?不,我需要知道我的脚本语言返回的类型是什么,并且由于我现有的所有代码都是围绕非常强大的类型构建的,所以我真的希望我的脚本代码也能够尊重这种类型。我需要垃圾收集吗?不,我的类型已经在管理自己的资源,并且我确实希望确定性销毁。我要去吗?不,我想抛出异常。

我发现的问题是,基本上所有现有的脚本语言都是为了扩展C而设计的,而不是C ++,并且不能以多种方式正确地支持C ++模型,此外,它们还具有完全不同的语义。我要如何将shared_ptr自动确定性销毁转换为垃圾收集的环境?您可以编写所需的任何包装库,而不会更改与要扩展的语言不兼容的基础语言语义。如何确保这void*是正确的类型?我该如何处理继承?我如何抛出和捕获异常?就是行不通。

好的C ++脚本语言应该是静态类型化,值语义,确定性地破坏,抛出并捕获异常并尊重我的析构函数/构造函数/复制构造函数,因为这样我所有的类型都将正常工作,很好而又容易,并且最终的语言将是快速并支持我所有的原始语义,易于绑定。


您应该尝试使用类似我最近为自己编写的包装器库之类的东西,以解决您遇到的一些相同问题。您可以使用shared_ptrs以及它的东西,它是类型安全的(无论如何都可以),您可以决定是否想要由代码或Lua环境控制的事物的生命,它支持继承,并且它是与普通的Lua API非常相似。我不确定我是否对制作绑定有所抱怨,我只是使用vim代码片段99%的时间来制作绑定。
Alex Ames

2

对于基于Web的游戏,对我而言,三个重要因素是:

  • 熟识
  • 速度
  • 积分

我特别喜欢Perl,部分原因是因为我已经熟悉该语言,并且因为使用mod_perl2这样的Web服务器模块具有巨大的性能和集成优势-mod_perl2将脚本的编译版本保留在RAM中(仅在第一次加载),这使其在速度上比其他没有编译选项的其他解释型语言更具优势,并且还通过功能丰富的API集成到Apache HTTPd服务器中,该API提供了对许多非常强大的功能的访问权限。

这些因素对于基于Web的游戏开发可能非常有用(在需要访问数据库的地方,缓存数据库连接有助于进一步减少用户的响应时间)。当然,由于每种语言都有其优点(和缺点),所以这可能不是所有事物的最理想解决方案,但是对于我的需求而言,它一直很有效。


2

按照(递减)重要性的顺序排列:

  • 一目了然。实际上,这是我要使用的任何语言的要求,但是对于脚本编写来说,它可能更为重要:根据定义,脚本比“核心”代码更频繁地更改。因此,没有LISP或PERL。
  • 简洁。脚本不断地被编写和重写,并且键入很多“样板”代码效率低下。
  • 易于调试。最好具有断点,逐步执行等功能。
  • 与我选择的“核心”技术轻松集成。如果我在游戏中使用C ++,则需要良好的C ++绑定,例如在LUA中。如果游戏是C#,则选择基于CLI的语言:C#,IronPython,Boo。
  • 语言功能:容易关联的数组,协程,也许是lambda。实际上,这主要取决于我要使用这些脚本的目的。AI脚本不同于初始化脚本。
  • 好的文档。C#有专门的整个MSDN,而Boo只有源。这就是C#更好的原因。
  • 良好的开发环境。VS或Eclipse每次都击败记事本。

+1,这对我有很大帮助,谢谢。我将等待是否有任何进一步的讨论,但我认为您对此进行了很好的讨论。
乔恩·珀迪
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.