未知标题

主要观点:作者编写了“lispy environment for uxn”——[niënor],本文描述在该环境中创建词法作用域闭包的自制方法。
关键信息

  • 实现 lambda:若能编译命名函数,实现匿名函数(lambda)很简单,给匿名函数命名后暂不编译,将名字推到后续由编译器解析。
  • 闭包处理:闭包是捕获环境变量的匿名函数,niënor 本意为低级别语言,作者决定创建绑定所需环境的对象来实现闭包,但因运行时无类型检测,需在运行时生成可执行代码并跳转,解决方案是在编译时将环境变量作为参数添加,运行时生成包装器。
  • 示例代码:一个绘制随机位置心型的 gui 程序,展示了闭包的使用,通过反编译了解生成的闭包代码。
  • 内存管理:实现了mallocfree来手动管理 RAM 内存,闭包可通过free释放内存,如程序中对不同函数的内存分配和释放。
  • epilogue:此方法未经过实战测试,纯属实验性。

重要细节

  • 编译 lambda 时若局部变量为空,会生成随机名字并放入尾声编译;闭包示例中make-adder函数在运行时会生成包含环境变量的函数;gui 程序中通过各种指令绘制心型;malloc用于分配闭包内存等。
阅读 11
0 条评论