CERN Root on Arch Linux For WSL:

一个CLI才是本体的程序居然有图形启动界面,莫名的微妙感
接触到Root是在一个4chan上喷matlab的thread里。某anon喷完matlab和matplotlib之后顺带吹了一波Root,当然下面立马就有人喷他说这仨压根不是一个领域里的。4ch的shitposting日常先撇开不谈,这个Root确实激起了我极大的兴趣,尤其是他名字前面的CERN,不说他们大名鼎鼎的跨了三个国家建设的LHC,光是作为Internet的发源地,就足够被我们Web开发者当成一种符号崇拜了。
Root官网提供了源码,用户需要自行编译安装;但我使用的Arch上的AUR中包含了已经预编译和配置好的Root包,所以直接一条yay -S命令就把安装和依赖问题全部解决了,不得不承认AUR是真的香啊(
Root提供了一系列数据分析、拟合、绘图、建模等功能,详细教程可以见他们的官网,他们也提供了一份快速入门教程:
https://docs.google.com/presentation/d/189f0qsDEnMSk2R5KWLRPz2TdEV5kTfXH1VcuAra4cnU/edit#
我跟着教程做了几个demo,感想是确实很强大,然而我肯定用不着这么强大的功能(
作为LHC项目使用的数据分析框架,Root的强大是毋庸置疑的,据其演示教程宣称,至2017年它处理了1EB量级的数据。但作为一个非理论/数据科学专业的人而言,更让我感兴趣的是它的CLI,与大多数使用自有或现有脚本语言的框架不同,Root的CLI使用了静态编译的语言C++,通过Clang将代码JIT编译成机器码运行,同时还兼具一定传统C++不具备的动态特性(反射)。这个CLI也由Root团队开发,并被命名为CLING(显而易见地在neta Clang)。
使用C++作为CLI语言对于一个数据分析框架有多方面的益处,除了在性能上显著的优势外也可以减少开发/学习一种新语言的成本。但撇开数据分析不谈,作为编译语言中罕见地实现了脚本语言才具有的类似REPL的功能的程序,CLING本身就有独特的价值。脚本语言相对于静态编译语言的一个优势就是,利用REPL可以快速得到小段代码的运行结果而不用等待漫长的编译过程,也免去了编译的一系列开销,所以在原型验证上有AOT语言难以企及的优势。而CLING让C++代码也可以在REPL中实时地回显返回值,这可以给开发带来莫大的方便。除此之外,CLING还突破了传统C++强静态特性的束缚,可以实时检查对象的类型和成员等信息,比起传统方法追踪堆栈时打印出来的一堆不明所以的十六进制,CLING无疑显得友好得多。
下面列出CLING的一些值得注意的特性:

CLING支持自动包含头文件,在不引起混淆的前提下也可以省略命名空间

CLING自动通过AST检测实现多行输入,并在结束前显示cont‘ed提示符;多行输入可以通过.@ 元指令开关。另外在编写这个demo时,我发现若不慎写出会导致爆栈的递归或其他代码,root进程会直接被系统kill掉而不会返回错误。