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
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.2.tar.gz (5.8 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.2-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: clang_repl-1.0.2.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

Hashes for clang_repl-1.0.2.tar.gz
Algorithm Hash digest
SHA256 9d4368b9e4aaf77d2b90e1b4772f11b5c1a8c0f6e4712bf02c9a0f88bce14e95
MD5 aadc7375d187b253235a4e5376ca3d80
BLAKE2b-256 03d8d1913c251082258bdb3887fbef08a3b39833ed7eab8d0dc1ef9cd17f5387

See more details on using hashes here.

File details

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

File metadata

  • Download URL: clang_repl-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 6.7 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 806fb2da51c8f1e39082c5c1144e206a26bf0eed5d4f408cba57520096f24e5b
MD5 73e6cf3be5d3d5eeedec60a8a11dc831
BLAKE2b-256 609961df3218ce48cf271413914438fb2763cdb0f9a3911b725a78f95d59d2a5

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