REPL(Read Eval Print Loop)は対話的開発環境なんて言われるアレです。
Rubyで行けばirbに相当します。
Lispから来た考え方のようで、星人本でも一章を割いて解説しています。
今回おっ魂消たのは、これ動的言語のみの特権ではなかったという事です。
本題:C言語用REPL igcc
igccは静的言語の権化であるC言語/C++用のREPLです。
IGCC - IGCC - Andy Balaam Home
導入
イマドキな感じでGitリポジトリに見る事が出来ます。
ちなみにPython製です。
http://sourceforge.net/p/igcc/code/ci/master/tree/
というわけで導入はgit cloneで一発。楽チン。
$ git clone git://git.code.sf.net/p/igcc/code igcc-code
実例
cloneしたディレクトリに移動すると実行ファイルがあります。
こいつをコマンドラインで実行。
$ ./igcc igcc 0.1 Released under GNU GPL version 2 or later, with NO WARRANTY. Type ".h" for help. g++> #include <stdio.h> g++> int a = 0; g++> int cnt = 0; g++> printf("%d",a); 0 g++> printf("%d\n",a); 0 g++> printf("%d\n",a); 0 g++> for(cnt=0; cnt<3; cnt++) { [Compile error - type .e to see it.] g++> printf("%d\n",a+cnt); } 0 1 2 g++> .q
なんだよこれ...やべぇよ...やべぇよ...
tips
.hを押すとヘルプです。
g++> .h .c Show copying information .e Show the last compile errors/warnings .h Show this help message .l List the code you have entered .L List the whole program as given to the compiler .q Quit .r Redo undone command .u Undo previous command .w Show warranty information
.uでundo
g++> .u [Undone 'print("%d\n",a);'.]
.l 現状REPLが把握してるコードを表示
g++> .l #include <stdio.h> int a=0;
.L 今実行されてるCのコードそのものを表示
g++> .L #include <cstdio> #include <iostream> #include <string> #include <stdio.h> using namespace std; int main() { int a=0; return 0; }
今実行されてるCのコードそのものを表示します。
C++ですね。