CONTENTS xvii
Garbage collector mark bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1171
Object allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1171
92.5 Julia 代码的 eval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172
Julia Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172
Parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173
Macro Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
Type Inference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
JIT Code Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
System Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
92.6 Calling Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
Julia Native Calling Convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176
JL Call Convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176
C ABI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176
92.7 High-level Overview of the Native-Code Generation Process . . . . . . . . . . . . . . . . . . . 1176
Representation of Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176
Representation of Intermediate Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
Union representation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
Specialized Calling Convention Signature Representation . . . . . . . . . . . . . . . . . . . . . 1178
92.8 Julia 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178
方法表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178
函数调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
添加方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
创建泛型函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
闭包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
构造函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180
内置函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180
关键字参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180
Compiler efficiency issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181
92.9 笛卡尔 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182
Principles of usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182
基本语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182
92.10Talking to the compiler (the :meta mechanism) . . . . . . . . . . . . . . . . . . . . . . . . . . 1186
92.11子数组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187
Index replacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187
SubArray design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188
92.12isbits Union Optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191
isbits Union Structs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191
isbits Union Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
92.13System Image Building . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
Building the Julia system image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
System image optimized for multiple microarchitectures . . . . . . . . . . . . . . . . . . . . . 1192
92.14Working with LLVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194
Overview of Julia to LLVM Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194
Building Julia with a different version of LLVM . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194
Passing options to LLVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195
Debugging LLVM transformations in isolation . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195
Improving LLVM optimizations for Julia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196
The jlcall calling convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196
GC root placement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196
92.15printf() and stdio in the Julia runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
Libuv wrappers for stdio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
Interface between JL_STD* and Julia code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200