An Ivy Notebook
By
Roxy Light
I hacked out a Jupyter kernel for Rob Pike’s ivy language, an APL-like desk calculator. This allows using Ivy expressions inside a Jupyter notebook and inside Visual Studio Code’s notebooks feature. It’s got rough edges, but it’s good enough for me to quickly do calculations without leaving Visual Studio Code.
![Screenshot of a Jupyter notebook with the Ivy demo.](/blog/2023/08/ivy-notebook/screenshot_hu827939e2649717cb4aa855b26e57ca25_55627_600x482_fit_box_3.png)
Screenshot of a Jupyter notebook with the Ivy demo.
The source is up on GitHub.
(Installation is a little DIY if you’re not using Nix,
but it should go build
if you have libzmq installed locally.)
Some observations:
- Understanding and implementing the Jupyter kernel protocol took some effort. It’s not terribly hard, but the docs assume a familiarity with notebook interactions.
- The protocol uses ZeroMQ, which I had not used before,
and doesn’t have great support for Go.
I originally tried using
github.com/zeromq/goczmq
, but it didn’t lend itself to interrupting reads withcontext.Context
. So instead, I wrote a small wrapper aroundlibzmq
. I’m not 100% satisfied with the sleep/poll loops, but it works. - I continue to be pleased with using Nix as a distribution mechanism. It allows me to use whatever libraries or tools I want and I can drop the resulting programs into my dot files with ease. This is especially handy since this project needed CGo.