IPython kernel forwarding C++ cells to clang-repl
Project description
clang-repl based kernel for Jupyter notebooks
Overview
- This is a kernel enabling using C++ in a Jupyter Notebook
- It bases on a minimalistic instrumentation of the interactive clang-repl prompt using
- this showcase for
ipykernel.kernelbase.kernelas blueprint for the overall project structure, and python-pexpectfor instrumenting theclang-repl>prompt.
- this showcase for
Motivation
- The motivation is to enable notebook-based learning material for C++.
- The focus is not on language interoperability between C++ and Python.
- Exploring the latest capabilities of
clang-replusing different C++ language standards/settings in a convenient way. - Existing projects providing a form of interactive C++ in notebooks do currently not support C++20/C++23 and use fixed/patched LLVM versions.
Details
- It is required that
clang-replis installed on the (backend) system - On launch, the kernel starts an interactive
clang-replsession. - The default settings and initial includes/libs can be configured by placing a
.clang-replfile in the users home directory, the defaults (if not.clang-replfile is present) are listed below[defaults] repl = "clang-repl" args = ["-std=c++20", "-ferror-limit=3", "-O1"] includes = ["vector", "iostream"] libs = [] timeout = 10 debug = false
- The kernel performs the following steps for each source cell
0. Check if the
clang-replsession is alive- Inspect first line of the cell if starting with these magic commands
%status: print kernel status%lib: forward first line of cell directly toclang-repl
- Comment the first line (by prepending
//) if it starts with% - Transform the cell content if the first line contains a
%main: the cell content is wrapped and run via a unique global function, e.g.void mainUUID(){ ... }; mainUUID(); - The (transformed) cell content is forwarded to
clang-replby always using a single line command realized via a indirection of, e.g. this form:#include /tmp/cell-e3tp24ne.repl - The result of the interactive session (i.e. incremental compile + execute) is awaited (using a timeout) and printed as output of the cell.
- If the cell additionally contained a
%undoin the first line (and the incremental compile + execute was successful) the cell is "undone" via sending a subsequent%undodirectly toclang-repl
- Inspect first line of the cell if starting with these magic commands
Installation
python -m venv .venv
source .venv/bin/activate
python -m pip install clang-repl
# demo notebook
jupyter notebook demo.ipynb
# new empty notebook
echo '{ "cells": [], "nbformat": 4, "nbformat_minor": 4, "metadata": {} }' > empty.ipynb
jupyter notebook --MultiKernelManager.default_kernel_name=clang_repl empty.ipynb
Installation (for development)
git clone https://github.com/pmanstet/clang_repl_kernel.git
cd clang_repl_kernel
# optional: use a fixed python version
# pyenv install 3.11.10
# ~/.pyenv/versions/3.11.10/bin/python -m venv .venv
python -m venv .venv
source .venv/bin/activate
python -m pip install -e .
jupyter kernelspec list
# interactive console
jupyter console --kernel clang_repl --debug
# demo notebook
jupyter notebook demo.ipynb
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
clang_repl-1.0.3.tar.gz
(5.8 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file clang_repl-1.0.3.tar.gz.
File metadata
- Download URL: clang_repl-1.0.3.tar.gz
- Upload date:
- Size: 5.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35fa54e73f8c3dcb82a408ac0be9fa5f3904dd4f1faf8e8589cbffec2f11de64
|
|
| MD5 |
2d71b17b2e00421c0a517e9cb7326b48
|
|
| BLAKE2b-256 |
8962580e0438955184c52367c3685de47072044cdaa13241565fd21a9b79b9a8
|
File details
Details for the file clang_repl-1.0.3-py3-none-any.whl.
File metadata
- Download URL: clang_repl-1.0.3-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1f32c59b87026e95e67095671c117658b051ebad0adac20bdc2f34d0e7bcf4c
|
|
| MD5 |
49494ca9db5743d5cb7dba9fa7ee11aa
|
|
| BLAKE2b-256 |
60dbd94c0ae13dbb2d2b24df86c4189c20110866e69196b247395688ac129a84
|