C-REPL(neugierig.org)
neugierig.org
C-REPL
http://neugierig.org/software/c-repl/
7 comments
From the README:
The approach is surprisingly simple: for each line of code you enter, we compile a shared object in the background. If the compilation succeeds, the object is loaded into a child process via dlopen(). Parsing of C #includes uses gccxml. (Unfortunately, I can't figure out how to use gccxml to parse the user's input, and due to the complexity of parsing C the input parser is currently hacky and heuristic.)
While I agree that this may be an elegant (simple) way of doing things, how responsive is the compilation process for the RE portion of REPL? Even a one second wait time might seem tedious.
The approach is surprisingly simple: for each line of code you enter, we compile a shared object in the background. If the compilation succeeds, the object is loaded into a child process via dlopen(). Parsing of C #includes uses gccxml. (Unfortunately, I can't figure out how to use gccxml to parse the user's input, and due to the complexity of parsing C the input parser is currently hacky and heuristic.)
While I agree that this may be an elegant (simple) way of doing things, how responsive is the compilation process for the RE portion of REPL? Even a one second wait time might seem tedious.
I've used C-Repl quite comfortably for smaller hacks and tests.
While it's not a true REPL, it can certainly help along for simple use cases.
While it's not a true REPL, it can certainly help along for simple use cases.
On my four-year-old "Pentium D" workstation, it's not quite instantaneous but close enough for interactive work.
Thanks for the feedback. Now that I'm home, I'm going to install.
There's also ccons[1], which is a similar idea but built on top of Clang/LLVM.
[1] http://code.google.com/p/ccons/
[1] http://code.google.com/p/ccons/
I had to make some minor changes to get it to build under Ubuntu 9.10 with Haskell Platform 2009.2.0.2. I pushed them to a GitHub fork here:
http://github.com/mbrubeck/c-repl
http://github.com/mbrubeck/c-repl
[deleted]
How does this find and load shared objects?
This C-REPL one seems to have the advantage of using gcc directly while cint is basically its own compiler.
If being able to "evaluate" C code like that gives you some ideas, you might want to have a look at "libtcc" -- which seems to be getting some development love again compared to last time I looked at it (finally an x86-64 target). (I have some higher level code that converts well to C that libtcc or a gcc/dlopen approach would be nice for)