las*_*epe 6 performance static julia
在许多情况下,我希望能够断言某个值不会在运行时求值。例如,在构造一些参数化 struct 时Foo{A} where {A},我想确保A在解析时已知并且不能通过动态分派确定。例如类似的东西Foo{@isstatic A}()。
有办法强制执行吗?
更新1:
也许我想要的是检查类型是否是Core.Compiler.Const(例如通过类型断言)?但我怀疑这是否是正确的做法。
更新2:
也许另一种表达方式是:是否有类似constexprJulia 中的 C++ 的东西旨在在 Base 之外使用?
小智 1
没有办法在编译器上强制执行这一点。但是,解析器中不会计算任何内容(类型等常量的传播发生在稍后阶段),因此这也很简单,只需将其设置为始终返回即可false。
与其他一些语言不同,Julia 不会将优化器失败(例如无法常量折叠某些内容)转化为编译器错误。它也没有不同的编译时类型。该语言中的所有内容都在运行时可用,因此您不必受制于某些编译器标准的突发奇想来定义什么在编译时有效以及什么将无法进行类型检查。
不要将其视为一个问题,而是接受刚刚用 JuliaFoo{@isstatic A}()编写的事实!Foo{A}()您无需任何扭曲!如果某个值在编译时可用,编译器将找出并使用该值。如果未知,则运行时仍将使用该值来获得相同的答案。