CERN Root與CLING



CERN Root on Arch Linux For WSL:
圖片
一個CLI才是本體的程序居然有圖形啟動界面,莫名的微妙感

接觸到Root是在一個4chan上噴matlab的thread里。某anon噴完matlab和matplotlib之后順帶吹了一波Root,當然下面立馬就有人噴他說這仨壓根不是一個領域里的。4ch的shitposting日常先撇開不談,這個Root確實激起了我極大的興趣,尤其是他名字前面的CERN,不說他們大名鼎鼎的跨了三個國家建設的LHC,光是作為WWW的發源地,就足夠被我們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掉而不會返回錯誤。

圖片
CLING打印出可讀的對象信息

圖片
CLING支持RTTI

CLING還提供了一些元指令,區別於C++語法,這些指令以“.”開頭。輸入“.help”以查看這些指令的說明。
圖片

一些可能較常用的元指令:
圖片
和bash相似的重定向標准輸出語法

圖片
通過.L和.U裝載/卸載文件(CLING稱之為宏(macro),和預處理命令同名不同義)

圖片
通過.class 查看類的布局

最后上一個非常粗略的性能測試,僅供參考。遍歷法暴力計算第1919個素數;同一文件使用g++編譯和CLING載入后運行,打印執行時間。env: i5 8300H / 16g ddr4 2666
圖片
可以看到CLING的性能略有不穩定,但和g++直接編譯的程序性能大致相同,不知道是什么原因造成的。

脫離Root,CLING本身可以獨立運行,不過還是逃不過要從源碼編譯。然而萬能的AUR上又有編譯好的CLING包,我只能說Arch大法好了。

總而言之,CLING的功能是堪稱強大的,我作為一個JSer能在靜態編譯語言上找到使用console的感覺,這不僅是一種奇妙的體驗,在原型驗證、教學與演示、代碼分析等方面也可以預見有重要的意義。不知道為什么CLING在一般開發者中沒有火起來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM