Jupyter Notebook 支持非常多的编程语言,而且可以直接运行这些语言的代码。要让 Jupyter Notebook 能够运行特定语言的代码,需要添加对应的内核。具体支持的语言及内核可以查看该链接: https://github.com/jupyter/jupyter/wiki/Jupyter-kernels 。
今天要讲的,是支持在交互模式下执行 C++ 代码的 cling 内核。看到官方的示例,我着实感到惊讶,C++代码也能够像 Python 那样边写边运行?关于其内部的机理我还未深入探究,但最重要的是赶紧装上 cling 内核,体验一下交互式执行 C++ 代码的快感。
在经过两天的折腾之后,终于将 C++ 的 cling 内核装上了。由于我是在 Linux 机器上安装该内核,主要问题还是编译过程繁琐。尝试了很多方法,包括下载源代码、手动执行各个编译过程,结果因种种问题而失败,不过也从中学到了不少东西。最后克隆了官方的 Github 仓库,使用其提供的 CPT 工具直接完成编译,一步到位,非常简单。
由于 cling 内核依赖于 Python3,因此如果你的机器上安装的是 Python2 的话,必须先安装 Python3。安装 Python3 后,可以顺便将其添加到 Jupyter Notebook 内核中,便于以后使用。
添加 Python3 内核
安装 Python3:
$ apt-get install python3 python3-pip
然后安装 ipykernel 模块:
python3 -m pip install ipykernel
该过程耗时较长,成功后将出现以下提示:
Successfully installed ipykernel ipython traitlets jupyter-client tornado setuptools pexpect simplegeneric prompt-toolkit typing pickleshare pygments jedi decorator ipython-genutils python-dateutil jupyter-core pyzmq backports-abc ptyprocess wcwidth
最后,将 Python 3 内核安装到 Jupyter Notebook 中:
python3 -m ipykernel install --user
OK,此时打开 Jupyter Notebook,你将会发现已经多了一个 Python3 内核了。
添加 C++ cling 内核
克隆 cling 的 Github 官方仓库:
git clone https://github.com/root-project/cling.git
在进行编译操作之前,首先要确保你的机器上已经装好了 cmake 工具,即能够直接通过输入命令 cmake
执行程序。
如果 cmake
已经正确安装,就可以进行以下的操作了。
切换到 cling/tools/packaging/
目录下,执行以下两条命令:
chmod +x cpt.py
./cpt.py --check-requirements && ./cpt.py --create-dev-env Debug --with-workdir=./cling-build/
这个过程包含了从网络上获取源文件以及编译,是最为耗时的一个阶段,以小时计。
编译完成后,需要在 python3 中安装 clingkernel。切换到 cling/tools/Jupyter/ 目录下,执行
pip3 install kernel/
最后一步,往 Jupyter Notebook 中添加 cling 内核,可以根据自己的需要安装特定 C++ 规范的 cling 内核,例如 cling-cpp11, cling-cpp14, cling-cpp17。
jupyter kernelspec install kernel/cling-cpp17
如果没有其他问题,此时就可以打开 Jupyter Notebook 感受不一样的 C++ 编程了!
官方代码示例
class Rectangle {
private:
double w;
double h;
public:
Rectangle(double w_, double h_) {
w = w_;
h = h_;
}
double area(void) {
return w * h;
}
double perimiter(void) {
return 2 * (w + h);
}
};
Rectangle r = Rectangle(5, 4);
r.area();
输出为:
```cpp
(double) 20.000000