为什么Julia程序员需要使用at符号为宏添加前缀?

imp*_*dge 5 syntax macros julia at-sign

每当我看到使用中的Julia宏时,@assert或者@time我总是想知道需要在语法上区分宏与@前缀.使用@作为宏时我应该考虑什么?对我来说,它会增加噪音和注意力分散到一个非常好的语言(从语法上讲).

我的意思是,对我来说'@'有一个参考意义,即一个像域名或地址的位置.在位置意义上,@对宏不具有意义,除了它是一个不同的编译步骤.

Toi*_*son 15

@应被视为这表明语言的一般规则可能不适用于警告标志.例如,函数调用

f(x)
Run Code Online (Sandbox Code Playgroud)

永远不会修改x调用上下文中变量的值,而是修改宏调用

@mymacro x
Run Code Online (Sandbox Code Playgroud)

(或者@mymacro f(x)就此而言)非常好.

另一个原因是Julia中的宏不是基于C中的文本替换,而是基于抽象语法树中的替换(这更强大并且避免了文本替换宏因此而出乎意料的后果).

宏在Julia中具有特殊语法,并且由于它们在解析时间之后被扩展,因此解析器还需要一种明确的方式来识别它们(不知道在当前范围中定义了哪些宏).

ASCII字符是大多数编程语言设计中的宝贵资源,Julia非常包含.我猜这个选择@主要归结为这样一个事实,它不需要更重要的东西,并且它非常出色.