其实挺多的这种语言的。

趁着暴雪国服回归之际,点名说说《星际争霸 2》银河编辑器里的 Galaxyscript

这个语言长得非常像 c 语言,不支持多维数组,不支持指针,当然也没有标准库 malloc 之类的。

所以用这个引擎实现链表或者是容器这样的结构,会非常的麻烦,而且语言里也没有提供对应的接口给你调用哦.

一般情况下如果你要用大量内存,定义一个定长的尽可能够用的一维数组,算是你为数不多的选择,(因为这个语言的资料也非常少,除了非常基础的入门教程,就只剩下阅读官方剧情战役的脚本来学习了,所以有没有别的选择,我也不是特别清楚,但是确实有很多只有官方地图能调用的 hostcall)

可以说,如果你本身习惯使用 C、C 艹再去使用这门语言的体验,就像是原本精装的阿诺斯瓦辛格,把两条腿都剁了然后扔给你两根拐杖让你参加百米跨栏跑,但它对没有编程基础的入门者非常优好,它提供这种有点像低代码编辑功能的界面:

然后这些事件最终都会被转换成 GalaxyScript.

你可能也注意到了,如果我们用房地产开发商卖房时的高情商的叫法:

第一这个脚本没有内存泄漏,毕竟所有类型长度都确定了,而且不允许你动态申请内存,像 string 这种更是有严格的长度限制,甚至你用脚本创建游戏的物体都有最大数量限制,从源头上杜绝了你自己瞎搞.

第二这个脚本非常的 memorysafe,因为所有边界长度都确定了一旦越界脚本直接报错并精准定位,也没有指针之类的给你瞎搞,

第三它不仅没有 gc,甚至在语言层面不需要引入其它机制来保证

最后它居然还是线程安全的,其实说它是线程有点牵强,它的函数调用机制不像 C 一样从 main 函数逐级下套,而是使用触发器事件机制完成函数回调 (打个比方比如一个 50 块钱的好兄弟进入某个区域后,每隔几秒钟后面就生成 1 只狗追他,但是如果有 100 个 50 块钱的好兄弟同时进入这个区域,那你就需要 100 个线程来完成这个功能,而这 100 个线程在 VM 中应该是以协程栈的方式完成的,因此连资源竞争这种问题都没有.

但说协程好像又不全对,因为如果你不小心某个 trigger 写了一个死循环,它也能查出来,对线程来说其实也很好理解,一个很长的时间片耗尽函数都没 return 嘛,所以 ---- 它是一个还带有时间片调度的协程,而不是简单的状态机,有意思吧.

就在这个 galaxyscript 上,我差不多搓了不低于 10w 行代码,没错,游戏大厅里<<废图>><尸骨无存>><<阵地攻防战>>之类的全是我搓的,但如果我们低情商的实话实说,以上那么多优点,其实还不是要啥没啥么,东西都没有,当然对应的缺点都没有咯,是不是很有种 aji 语言的感觉

但是请注意,这并不妨碍众多玩家用 galaxyscript 开发出非常优秀的作品,像是<<星宝迷阵>>

<>

火遍全球服的<<星际酒馆>>

甚至早期的<<风暴英雄>>也是计划用这个银河编辑器进行开发的,你是不是突然又感叹 galaxyscript 还挺吊的.甚至可以这么说,靠着一个几乎比 C 还简陋的脚本语言,就能衍生出如此之多优秀的作品,甚至可以说 galaxyscript 在其需求范围内很好完成了其需求,其实现 gc 的方式就是干脆不让你直接动内存,你动都动不了当然就不需要引入其它机制来避免它问题咯.

因此,东西做出来怎么样,在很多场景中用什么语言和这个语言该有什么,也许并不是什么关键问题,最关键的用的人到底是谁的问题.