gpt4 book ai didi

julia - 为什么要在 Julia 中使用宏?

转载 作者:行者123 更新时间:2023-12-03 18:31:35 25 4
gpt4 key购买 nike

我正在阅读宏的文档,并在 `Hold up: why macros 下遇到了以下内容。 ' 部分。使用宏的理由如下:

Macros are necessary because they execute when code is parsed, therefore, macros allow the programmer to generate and include fragments of customized code before the full program is run



这让我想知道为什么有人想要使用“在运行完整程序之前生成并包含自定义代码的片段”。有人可以提供有关为什么这对宏有益和/或其他好的用例的上下文吗?

最佳答案

让我给你我对宏的看法。

宏基本上是 code -> code功能。它接受代码(一个 Julia 表达式)作为输入并输出代码(一个不同的 Julia 表达式)。

为什么这很有用?它有多种用途:

  • 编译时复制粘贴 :您不必多次编写同一段代码,而是可以定义一个简短的宏,在您放置的任何地方为您编写它。 ( example )
  • 领域特定语言 (DSL) : 你可以在宏之后创建特殊的语法 code -> code transform 被纯 Julia 结构取代。这在许多包中用于定义特殊语法,例如 herehere .
  • 代码生成 : 想象一下,你想写一段很长的代码,虽然很长,但很简单,因为它有某种模式,可以很简单地重复自己。手动编写代码可能会很痛苦(甚至几乎不可能)。宏可以以编程方式为您生成代码。一个例子是 for 循环展开(见 herehere)。但即使是@time宏所做的不仅仅是放置一堆 Base.time_ns()围绕提供的 Julia 表达式进行函数调用。
  • 特殊字符串解析 :如果你输入文字 3.2在 Julia 中,它将被解析并解释为 Float64 .现在,假设您想要提供一个超出 Float64 的数字。精度,但适合 BigFloat .打字 big(3.123124812498124812498)不起作用,因为文字数字首先被解释为 Float64然后交给big功能。相反,您需要一种方法在解析时告诉 Julia 这应该变成 BigFloat .这是由 @big_str 3.2 处理的宏(为方便起见)也可以写成 big"3.2" .后者只是语法糖。

  • 宏的应用可能还有很多,但这些对我来说是最重要的。

    最后让我引用 Steven G. Johnson 在 JuliaCon 2019 上的精彩演讲:

    Most of the time, don't do metaprogramming :)

    关于julia - 为什么要在 Julia 中使用宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58137512/

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