c-repl

(last updated: 2013-03-30.)

Update (March 2013): C-REPL was a neat hack, but a more principled implementation of the same goal exists in Cling.

Many programming languages come with a REPL (read-eval-print loop), which allows you to type in code line by line and see what it does. This is quite useful for prototyping, experimentation, and debugging code.

Other programming languages, and especially C, use a "compile-run" model, and don't provide a REPL. Let's fix that.

What you get

This approach is actually more of a read-eval loop, as c-repl doesn't know much about the types and parse trees of the code it's running. But unlike other approaches to solving the "C interpreter" problem, c-repl works directly with unmodified libraries and system headers.

This means you can experiment with a new library without writing a test program or any bindings. Or just use it as a simple calculator, content in knowing it is much faster than your neighbors using irb, like driving a Ferarri on city streets.

Some especially cute frosting features: - tab-completion of in-scope symbols - inspection of in-scope variables (via the .t command)

Example Session

Here's an example session demonstrating using c-repl:

% ./c-repl
> int x = 3
> ++x
> .p x
int: 4
> printf("%d %p\n", x, &x)
4 0xb7f1b53c
> .t fprintf
fprintf(FILE* const stream, char const* const format)
> #include <unistd.h>
> getp<TAB>
getpagesize  getpass      getpgid      getpgrp      getpid       getppid
> printf("%d\n", getpid())
19094

How to get and use it

See GitHub, but c-repl is unmaintained and I don't recommend you use it. This page is only of historical interest.

Evan Martin, martine@danga.com