Julia机器学习核心编程.2(LLVM和JIT)
LLVM本来是伊利诺伊大学的一个研究项目,其目的是创建基于静态单一任务(SSA)的现代的、类型安全的编译方法。它拥有底层操作,具有灵活性,并且具有可以清晰地表示所有高级语言的能力。它实际上是模块化、可重用编译器和工具链技术的集合。LLVM不用对传统虚拟机做太多修改,下面列举LLVM的一些特性。
· 创建LLVM的核心库提供了现代的源和目标的独立优化,并且支持许多流行CPU的代码生成,这些库是围绕LLVM中间表示(LLVM IR)构建的。
· Clang是一个LLVM原生的C/C++/Objective-C编译器,旨在提供惊人的编译速度(例如,在调试编译Objective-C代码时比GCC快3倍),可以提供非常有用的错误警告,并且为构建优秀的源代码工具提供一个良好的平台。
· DragonEgg将LLVM优化器和代码生成器与GCC解析器集成在一起,这使得LLVM支持编译Ada、Fortran和GCC编译器支持的其他语言,并访问Clang不支持的C语言特性。
· LLDB项目以LLVM和Clang提供的库为基础,提供了一个出色的本地调试器。它具有Clang AST和表达式解析器、LLVM JIT、LLVM反汇编器等诸多功能,因此提供了出色的使用体验,并且在加载符号时相比GDB也要快得多,且内存效率更高。
· SAFECode项目是针对C/C++程序内存安全的编译器。它通过运行时检查代码,以便在第一时间检测出内存安全错误(例如,缓冲区溢出),保护软件免于安全攻击,也可以像Valgrind一样用作内存安全错误调试工具。
在计算中,Julia使用JIT编译(也被称为动态翻译),编译执行在程序运行时,而不是在程序运行前。在大多数情况下,代码需要被转换为机器代码,然后直接执行,但也可以被转换为另一种格式,JIT编译器通常不断地分析正在执行的代码,并且识别代码的一部分,使得从编译中获得的性能加速超过编译该代码的性能开销。另外,LLVM JIT编译器可以在运行时从程序中优化掉不必要的静态分支,此功能用于Mac OS X 10.5 Leopard的OpenGL管道,以支持所缺少的硬件功能。
这里解释了一部分为毛julia这么秀的一些原因,日后会慢慢揭秘.