Skip to main content

IPython kernel forwarding C++ cells to clang-repl

Project description

clang-repl based kernel for Jupyter notebooks

Overview

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-repl using 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-repl is installed on the (backend) system
  • On launch, the kernel starts an interactive clang-repl session.
  • The default settings and initial includes/libs can be configured by placing a .clang-repl file in the users home directory, the defaults (if not .clang-repl file 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-repl session is alive
    1. Inspect first line of the cell if starting with these magic commands
      • %status: print kernel status
      • %lib: forward first line of cell directly to clang-repl
    2. Comment the first line (by prepending //) if it starts with %
    3. 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();
    4. The (transformed) cell content is forwarded to clang-repl by always using a single line command realized via a indirection of, e.g. this form: #include /tmp/cell-e3tp24ne.repl
    5. The result of the interactive session (i.e. incremental compile + execute) is awaited (using a timeout) and printed as output of the cell.
    6. If the cell additionally contained a %undo in the first line (and the incremental compile + execute was successful) the cell is "undone" via sending a subsequent %undo directly to clang-repl

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.4.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

clang_repl-1.0.4-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file clang_repl-1.0.4.tar.gz.

File metadata

  • Download URL: clang_repl-1.0.4.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for clang_repl-1.0.4.tar.gz
Algorithm Hash digest
SHA256 c1ef942e8e4bd30552016063b3821cc94cc3e74344fd7c47424d2e38c97bea97
MD5 d16e206cd80795cce7c93d6b3bb02748
BLAKE2b-256 11cce4fa8e96d672148bc579a806cc2b83dbed9d80f9bf8c04815b66233f46e4

See more details on using hashes here.

File details

Details for the file clang_repl-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: clang_repl-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 9.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for clang_repl-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 d8083e45f970c16371c9b87cff9bcde10fc54299b0b529cbaaa4f0eb6246173b
MD5 61b4d9cbce60a73fa394e22e493e20e3
BLAKE2b-256 94c804c18e27da0adbe17dc21cbc4c2c6e9c13be7899cb14864cdbbb697aa4d9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page