特定领域语言与惰性编程:提升游戏性能的秘诀
1. 特定领域语言(DSLs)
特定领域语言(DSLs)在处理特定领域的编程任务时非常有用。当需要进行一些特定领域的怪异编程时,宏是一个很好的解决方案,借助宏可以创建自己的 DSL。通常,先为宏编写一个辅助函数(如 print-tag ),然后编写宏(如 tag )来添加只有宏才能提供的改进,这些改进通常涉及以更清晰、更安全的语法访问代码。此外,DSLs 可以与常规 Lisp 代码混合使用,这赋予了很大的编程能力。DSLs 在编写非常特定的代码时很有用,无论是网页代码、绘图代码还是构建特殊游戏命令的代码。
2. 惰性编程的引入
在某些编程场景中,函数完全依赖传入的参数,这会导致需要传入的参数变得非常庞大。以某个游戏为例,传递的 game-tree 变量包含了游戏棋盘所有可能的未来状态,即使是一个小的 3x3 棋盘,这个结构也非常庞大。当前的设计虽然使代码简单优雅,但在处理更大的游戏棋盘时,由于游戏树会呈指数级增长,扩展性不佳。为了在允许更大棋盘上进行更复杂游戏的同时保持代码的优雅,需要让程序足够智能,避免从游戏开始就考虑每一种可能的移动,这可以通过惰性求值来实现。
3. 向 Lisp 中添加惰性求值
惰性求值允许在代码的一个地方(游戏开始时)创建整个游戏树,但使用一些巧妙的技巧,使游戏树的某些分支隐藏起来。这些分支虽然从一开始就被声明,但不会立即进行实际计算,直到代码的某个部分“查看”这些分支时才会进行计算。如果玩家从未选择某个特定的移动,并且 AI 也从未考虑过它,程序将避免进行相关计算。一些语言(
订阅专栏 解锁全文
187



被折叠的 条评论
为什么被折叠?



