Find source of generic functions is (thanks to Julia introspection) easy:
String brokerUrlRpi_Mqtt = "tcp://localhost:1883";
String clientId="ExamplePublish";
String channel = "SensorIntegratedData";
int qos=0;
public void publish(String data) throws MqttPersistenceException, MqttException {
String time = new Timestamp(System.currentTimeMillis()).toString();
System.out.println("Publishing at: "+time+ " to topic \""+channel+"\" qos "+qos);
MqttMessage message = new MqttMessage(data.getBytes());
message.setQos(qos);
message.setRetained(false);
client.publish(channel, message);
// Disconnect the client
}
I see it is defined in @edit sizeof("")
as
julia/base/strings/string.jl
Is there similar way how to find source of Core.size function?
Help is not very helpful:
sizeof(s::String) = Core.sizeof(s)
答案 0 :(得分:2)
正如你和Dan Getz在评论中所做的那样,这是一个内置功能。 Julia有一组“原始”函数(列表starts here),由Julia的编译器显式处理。其中许多都直接映射到特定的CPU instructions,但是以通用形式(例如,添加但通常用于CPU和FPU支持的所有类型)。粗略地说,Julia的编译器管道接受代码并对其进行转换(降低),执行类型推断和内联,并最终将其简化为对高级函数(未内联的函数)或内置函数的一组函数调用。 。也许违反直觉,在大多数情况下没有内置函数的C实现:相反,内置函数仅仅作为代码生成器的“信号”,它采用这些大大减少的表达式并发出{{3并让LLVM生成本机代码。对于sizeof
的特定情况,这里是LLVM IR。
这样做是有充分理由的:
jl_sizeof
,则必须支付函数调用的代价,与许多基本CPU指令相比,它是code to generate the LLVM IR。例如,如果朱莉娅的getindex
(支持数组访问A[i,j]
)以这种方式实现,那么朱莉娅不会被认为是一种快速语言 - 它只是因为最终{{1}而快}导致内联LLVM IR(对于类型推断成功的情况)。如果您想了解有关IR生成的更多信息,我发现的最佳资源是quite expensive。完成本教程需要一些时间才能有用,但它肯定会使Julia的一些内部结构变得神秘。