所以我目前正在研究一种新的编程语言。受并发编程和 Haskell 思想的启发,该语言的主要目标之一是管理副作用。或多或少,每个模块都需要指定它允许的副作用。所以,如果我在做游戏,图形模块就没有能力做 IO。输入模块将无法绘制到屏幕上。人工智能模块需要完全纯净。游戏的脚本和插件可以访问非常有限的 IO 子集来读取配置文件。等等。
然而,什么构成副作用并不明确。我正在寻找关于我可能想用我的语言考虑的主题的任何想法或建议。以下是我目前的想法。
一些副作用是明显的。无论是打印到用户控制台还是发射导弹,任何读取或写入用户拥有的文件或与外部硬件交互的操作都是副作用。
其他更微妙,这些是我真正感兴趣的。这些可能是获取随机数、获取系统时间、休眠线程、实现软件事务内存,甚至是非常基本的事情,例如分配内存。
与其他用于控制副作用的语言不同(看看你的 Haskell),我想将我的语言设计为务实和实用的。对副作用的限制应该有两个目的:
- 帮助分离关注点。(没有一个模块可以做所有事情)。
- 对应用程序中的每个模块进行沙箱处理。(任何模块都可以用作插件)
考虑到这一点,我应该如何处理“伪”副作用,如我上面提到的随机数和睡眠?还有什么我可能错过的?我可以通过哪些方式将内存使用和时间作为资源进行管理?