CONTENTS xvii
Julia Native Calling Convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1149
JL Call Convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1149
C ABI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150
94.7 High-level Overview of the Native-Code Generation Process . . . . . . . . . . . . . . . . . . . 1150
Representation of Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150
Representation of Intermediate Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150
Union representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150
Specialized Calling Convention Signature Representation . . . . . . . . . . . . . . . . . . . . . 1151
94.8 Julia 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1152
方法表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1152
函数调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1152
添加方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1152
创建泛型函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1152
闭包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153
构造函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153
内置函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153
关键字参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153
编译器效率问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155
94.9 笛卡尔 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155
Principles of usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155
基本语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1156
94.10Talking to the compiler (the :meta mechanism) . . . . . . . . . . . . . . . . . . . . . . . . . . 1160
94.11子数组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1161
索引:笛卡尔索引与线性索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1161
索引替换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1161
子数组设计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162
94.12isbits Union Optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165
isbits Union Structs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165
isbits Union Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165
94.13System Image Building . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1166
Building the Julia system image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1166
System image optimized for multiple microarchitectures . . . . . . . . . . . . . . . . . . . . . 1167
94.14Working with LLVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168
Overview of Julia to LLVM Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168
Building Julia with a different version of LLVM . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168
Passing options to LLVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169
Debugging LLVM transformations in isolation . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169
Improving LLVM optimizations for Julia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169
The jlcall calling convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1170
GC root placement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1170
94.15printf() and stdio in the Julia runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173
Libuv wrappers for stdio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173
Interface between JL_STD* and Julia code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
printf() during initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
Legacy ios.c library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
94.16边界检查 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
移除边界检查 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
Propagating inbounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176
The bounds checking call hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176
94.17Proper maintenance and care of multi-threading locks . . . . . . . . . . . . . . . . . . . . . . 1176
Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
Broken Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178