【发布时间】:2017-12-18 08:02:50
【问题描述】:
查找泛型函数的来源很容易(感谢 Julia 自省):
@edit sizeof("")
我看到它在julia/base/strings/string.jl 中定义为
sizeof(s::String) = Core.sizeof(s)
有没有类似的方法可以找到 Core.size 函数的来源?
帮助不是很有帮助:
help?> Core.sizeof
No documentation found.
Core.sizeof is a Function.
# 0 methods for generic function "sizeof":
【问题讨论】:
-
grep在 Julia 的/src和/base目录中是一种方法。例如,在这种情况下,好的搜索字符串是'core("sizeof")'和jl_builtin_sizeof -
谢谢! :) 但是
jl_builtin_sizeof是core("sizeof")而核心是static jl_value_t *core(const char *name){ return jl_get_global(jl_core_module, jl_symbol(name));}所以Core.sizeof的源代码路径对我来说仍然是语义加密的:P -
Greping for
jl_builtin_sizeof在第 3000 行附近的codegen.cpp中找到了一个命中,其中有更多关于如何实现Core.sizeof的信息。但也许一些额外的注释方法(和help)是一个很好的未来变化 -
对,但它并不是这个函数的精确实现。在我看来,生成这个函数的代码。我预计类似于
jl_alloc_string(src\array.c) 的东西,我可以看到分配字符串的前 (size_t) 个字节代表 sizeof 字符串。我只是想了解如何在 Julia 代码中“破解”读取这些字节。@code_llvm sizeof("")对sizeof实现有其他看法,但此时对我来说也是“加密的”。再次感谢! :) 似乎这个任务“黑客”太深了,不能很好地评论文件...... -
似乎 len 仍然存在于内存中:
[unsafe_load(Base.unsafe_convert(Ptr{Int64}, pointer_from_objref("#"^i))) for i in 5000:5010] == collect(5000:5010)=>true
标签: julia