gpt4 book ai didi

macros - 将 Clojure 宏用于 DSL

转载 作者:行者123 更新时间:2023-12-04 01:37:12 24 4
gpt4 key购买 nike

我正在从事一个 Clojure 项目,我经常发现自己为 DSL 编写 Clojure 宏,但我正在观看 Clojure 视频,该视频介绍了一家公司如何在实际工作中使用 Clojure,演讲者说在实际使用中,他们并没有将宏用于他们的DSL,他们只使用宏来添加一点语法糖。这是否意味着我应该使用标准函数编写我的 DSL,然后在最后添加一些宏?

更新 :
在阅读了对这个问题的许多不同(和有趣)的回答后,我意识到答案并不像我最初想象的那么明确,原因有很多:

  • 应用程序中有许多不同类型的 API(内部、外部)
  • API 的用户有很多种(只想快速完成某件事的业务用户,Clojure 专家)
  • 是否有隐藏样板代码的宏?

  • 我会离开并更深入地思考这个问题,但感谢您的回答,因为他们给了我很多思考。我还注意到 Paul Graham 认为与 Christophe 视频相反,认为宏应该是代码库的很大一部分(25%):

    http://www.paulgraham.com/avg.html

    最佳答案

    在某种程度上,我相信这取决于您的 DSL 的用途/目的。

    如果您正在写 Clojure 代码中使用的类库 DSL 并希望以功能方式使用它,那么我更喜欢函数而不是宏。函数对 Clojure 用户来说“很好”,因为它们可以动态组合成更高阶的函数等。例如,您正在编写像 Ring 这样的函数式 Web 框架。 .

    如果您正在写 命令式 DSL 将完全独立于其他 Clojure 代码使用 并且您已经确定您绝对不需要高阶函数,那么用法将非常相似,您可以选择最有意义的那个。例如,您可能正在创建某种业务规则引擎。

    如果您正在写 需要生成高性能代码的专用 DSL ,那么您可能希望在大部分时间使用宏,因为它们将在编译时扩展以获得最大效率。例如,您正在编写一些图形代码,需要扩展到完全正确的 OpenGL 调用序列......

    关于macros - 将 Clojure 宏用于 DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5457066/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com