引用-非引用 "宏"

主要观点:

  • 以 Python 中计算斐波那契数列的函数为例介绍装饰器和高阶函数,同时给出 JavaScript 实现相同功能的代码,指出这虽在语法上有用但实际应用可能不大。
  • 接着讨论宏,以实现类似 Python 装饰器的功能为例,引出不能在 JavaScript 中实现对表达式进行缓存的问题,而在 Janet 等语言中,宏不仅是语法变换,还能在编译时分配结果字典,实现按调用点缓存。
  • 详细说明了在 Janet 中通过宏实现按调用点缓存的过程,包括使用quoteunquote来处理表,以及对quote的理解,最后提到使用quote-unquote传递值从编译时到运行时是有用的技术,但在一些复杂场景中才适用。

关键信息:

  • Python 代码中通过装饰器实现斐波那契数列计算的函数及原理。
  • JavaScript 中实现类似功能的代码及存在的问题。
  • Janet 中通过宏实现按调用点缓存的代码及quoteunquote的作用。

重要细节:

  • 在 Python 代码中,fib函数通过递归计算斐波那契数列,memoized装饰器用于缓存函数结果。
  • JavaScript 代码中,memoized函数创建一个Map用于缓存结果,在调用函数时检查是否已缓存,未缓存则计算并缓存。
  • 在 Janet 中,memoize宏通过在编译时分配结果字典,并在运行时引用该字典来实现按调用点缓存,需要注意quoteunquote的使用以避免创建新的表。
  • 提到在 JavaScript 中可以通过创建全局缓存映射来实现类似功能,但语义不同,还提到在 Hacker News 上有人指出可以通过模板应用来实现按调用点缓存。
  • 说明在 Janet 中宏系统的一些限制,如不能仅通过重写自身来实现某些功能。
阅读 16
0 条评论