CERN Root与CLING
一个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掉而不会返回错误。
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在一般开发者中没有火起来。
CERN Root与CLING的更多相关文章
- WSL学习:安装ArchLinux和Root/Cling以及注意事项
1.前言 在Windows下使用Linux常见的软件存在许多困难.选择之一是使用VMWare和VirtualBox之类的虚拟机软件,另一种选择是使用类UNIX模拟环境,如Cygwin,GNUWin32 ...
- 在Win7环境下搭建Geant4工作平台
本物理专业小硕,现在材料实验室工作,研究方向大概是核屏蔽材料的软件模拟吧.其实实验室里大多数师兄弟都是搞焊接的,平时能接触到这类直接给源码自己编译的软件的机会基本为零,所以一切都靠自己探索,成功搭建了 ...
- CentOS 7 上CNVnator安装
1.到github上下载最新版本 https://github.com/abyzovlab/CNVnator/releases 2.先看INSTALL文件,要求以下依赖,我的机器上已经安装了前两个,所 ...
- Ubuntu14.04安装ROOT集群
之前尝试在CentOS7上部署ROOT集群,却发现无论是源码包安装,还是官方提供的二进制包,都缺少了关键的xproofd可执行文件,导致PoD不能运行.没有办法,只能尝试在其他OS上部署,这里我选择了 ...
- Centos 下 mysql root 密码重置
重置mysql密码的方法有很多,官网也提供了很方便的快捷操作办法,可参考资料 resetting permissions .本文重置密码的具体步骤如下: 一.停止MySQL(如果处于运行状态) #se ...
- CentOS7 重置root密码
1- 在启动grub菜单,选择编辑选项启动 2 - 按键盘e键,来进入编辑界面 3 - 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh 4 - 现在按下 Con ...
- Mac上MySQL忘记root密码且没有权限的处理办法&workbench的一些tips (转)
忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...
- Atitit godaddy 文件权限 root权限设置
Atitit godaddy 文件权限 root权限设置 1. ubuntu需要先登录,再su切换到root1 2. sudo 授权许可使用的su,也是受限制的su1 3. ubuntu默认吗roo ...
- Mysql 忘记root密码处理办法
一.更改my.cnf配置文件 1.用命令编辑/etc/my.cnf配置文件,即:vim /etc/my.cnf 或者 vi /etc/my.cnf 2.在[mysqld]下添加skip-grant-t ...
随机推荐
- 来自ebay内部的「软件测试」学习资料,覆盖GUI、API自动化、代码级测试及性能测试等,Python等,拿走不谢!...
在软件测试领域从业蛮久了,常有人会问我: 刚入测试一年,很迷茫,觉得没啥好做的-- 测试在公司真的不受重视,我是不是去转型做开发会更好? 资深的测试架构师的发展路径是怎么样的?我平时该怎么学习? 我 ...
- 万达乐园VS阿里帝国 谁将是未来娱乐产业的龙头?
国内实体行业大佬王健林和互联网行业巨头马云,这次又不约而同地想到一块去了.从王健林叫板迪士尼大搞借势营销,到最近马云成立大文娱工作领导小组,明显的趋势表明娱乐越来越成为各界大佬们未来掘金的新战场.只不 ...
- IPFS初窥
虽然区块链有很多令人兴奋的特性,但是也有其固有的缺点.比如,文件或者长度较长的文本信息就不适合存储在链上.那么如何解决这个缺点呢?一个解决方案就是IPFS(Interplanetary File Sy ...
- 带你封装自己的MVP+Retrofit+RxJava2框架(一)
前言 文本已经收录到我的Github个人博客,欢迎大佬们光临寒舍:我的GIthub博客 看完本篇文章的,可以看下带你封装自己的MVP+Retrofit+RxJava2框架(二),里面封装得到了改进 本 ...
- Web图片资源的加载与渲染时机
此文研究页面中的图片资源的加载和渲染时机,使得我们能更好的管理图片资源,避免不必要的流量和提高用户体验. 浏览器的工作流程 要研究图片资源的加载和渲染,我们先要了解浏览器的工作原理.以Webkit引擎 ...
- 前端每日实战:102# 视频演示如何用纯 CSS 创作一个小和尚
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oMmYXp 可交互视频 此视频是可 ...
- day05基本运算符,格式化输出,垃圾回收机制
内容大纲:1.垃圾回收机制详解(了解) 引用计数 标记清除 分代回收 2.与用户交互 接收用户输入 # python3中 input # python2.7(了解) input raw_input 格 ...
- java多线程基础API
本次内容主要讲认识Java中的多线程.线程的启动与中止.yield()和join.线程优先级和守护线程. 1.Java程序天生就是多线程的 一个Java程序从main()方法开始执行,然后按照既定的代 ...
- Django之Model相关操作
一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...
- python的基本数据类型简介
python的基本数据类型有:数字-numbers.字符串-str.列表-list.元组-tuple.字典-dict.布尔-bool.集合-set 下面来个概览先大概了解一下,后面博文中咱再细说- 1 ...