在 Julia 中创建共享模块的推荐方法是什么?

What is the recommended way in Julia to create a shared module?

经过一些实验和搜索,我找到了两种创建共享模块的方法 拥有一些常数值。

方案 A:

# in file sharedconstants.jl:
module sharedconstants
  kelvin = 273.15
end
# -------------------------


# in file main.jl:
include("./sharedconstants.jl");
using .sharedconstants
print(sharedconstants.kelvin, "\n");
# -------------------------

方案 B:

# in file sharedconstants.jl:
module sharedconstants
  kelvin = 273.15
end
# -------------------------


# in file main.jl:
import sharedconstants 
print(sharedconstants.kelvin, "\n");
# -------------------------

方案 B 并不总是有效,当它失败时它会抛出 在当前路径中找不到共享常量的错误。另外,方案B 要求模块名称(sharedconstants)与主干相同 文件名。我想知道以上哪种方式更好 编译和执行。还有其他方法可以完成这项工作吗? 我是从 FORTRAN 转过来的,我很习惯简单地 use sharedconstants 在我的代码中。

出于性能原因,这应该是 const(BTW 模块名称使用 CamelNaming):

module SharedConstants2
    const kelvin = 273.15
end

以这种方式编写它可以使其类型稳定,从而导致巨大的性能差异:


julia> @btime sharedconstants.kelvin * 3
  18.574 ns (1 allocation: 16 bytes)
819.4499999999999

julia> @btime SharedConstants2.kelvin * 3
  0.001 ns (0 allocations: 0 bytes)
819.4499999999999

关于“放在哪里”这个问题,我建议做一个 Julia 包——从这里开始阅读:https://pkgdocs.julialang.org/v1/creating-packages/

最后,您可以看看 PhysicalConstants.jlhttps://github.com/JuliaPhysics/PhysicalConstants.jl