CLでCのプログラムを動かす画期的な方法を思いついた
12月 9th, 2008/::::::::::::::;;:::::/ ヽ:::::::::ヽ
_ /:::::::::::::/// `、::r、:::゙, Common Lispの処理系を使って
─── .l ヽ ,’::::::::::::i゙ ○ `’ i::::i Cで書いたプログラムを動かす
\ \ !::::::::::::| ○ l::::| / 〉 画期的な方法を思いついたでー
─── ゙/ \!::::::::::::! ,.._ !:::!/\/
ヽ/ \::::::::! ! ``”7 !::| \/
──── ヽ |::::::| l, / ノ::i /
`、 i:::::l、ヽ.,_ `””” _,..イ:::::i /
───── ゙、 ヽ;i \ヽ,.二l ̄_,l |:::/ /
゙、 ヽ`、 | / レ’ /
────── ゙、 / `ロ”” i. /
/ || |/
─────── / || |
// "hello-world.c" // (defvar /* nil) /* (set-macro-character #\* #'(lambda (stream char) (declare (ignore char)) (read-char stream) (with-open-file (fs "koreha-hidoi.c" :direction :output :if-exists :error) (do ((line (read-line stream nil :eof) (read-line stream nil :eof))) ((eq line :eof)) (write-line line fs))) #+clisp(ext:run-shell-command "gcc koreha-hidoi.c -o koreha-hidoi" :output nil) #+clisp(ext:run-shell-command "koreha-hidoi") )) (values) */ #include <stdio.h> int main() { printf("hello, world\n"); return 0; }
/:::::::/::/::ヽ::i:::::::
/::::/::/l:/ |::|_!::i:
l::::レl/`` ‘´l:! |::| このソース、前半はCLのプログラムに見えるけど、
|::::| ┃ ┃ ゙i:! 後半はCのプログラムに見えるんや。
|:::j. ┃ ┃
|::/
|〈 __ ∪| でも、CLの部分は全部コメントアウトされてるし、
|:::ヽ. L…__) |: 何よりも冒頭に “hello-world.c” って書いてあるから、
|:::::::::゙ヽ、 _,、-‘゙|: 多くの人はCのソースと思ってコンパイルするやろ…
|:::::::::|i::::i::フ|”´ |::
|:::::::::||:/ /| |::
.!:i::::::| /__—/|::::
〉ト、::| / / |::::
r’ | ヾ! / / ト//
$ gcc hello-world.c -o hello-world $ ./hello-world hello, world $,. -───-: 、
/::::::::::::::::::::::::::::::::\
/ ”:::::::::::::::::::::::::::::::””’ ヽ
!::::::::::ィ::ハ:::;::::::::::::::::::::::::::!
i::|:::i::/l/ i;::ト、:、:::i:::::::::::::::i でも、これで終わらんと、
|::i/レ’-i” ‘ヽi-ヾ,ヽ!:::::::::::::l
|::ハ -‐- -─- i::::::::::::::l CLの処理系でもちゃんと動かして欲しいんや
|::::::l| | | | |::::::::::::::!
|::::::ヽ | r—、! l,.!::::::::::::::l
l::::::::::::`;’-‘=,‐,=’r”i~!:::::::::::::::|
!:::::::l、::r'”´’. ‘ l ’ i::::::::iヽ:::l
i:l、:::|./、_____,l::::;l:/‐’ヽ!
‘!ヽ;i’>l____,.//-‐”'”ヽ
!/ |.VVVVVVVV.lV\!. i
| | | l$ clisp -norc -q hello-world.c hello, world $わ ,..-―-、 動いたでー
| /:::::::::::::::::l
∩ /::::::::::::::::::::| ,、
-―-、 |⌒ヽ/::::::::::::::::::::::| _/|ノ
/´Y (´ヽ ,、 l: : : i::::::::::::::::::::::::|-―’´: :丿
,、 _し’ l lヽJ/|ノ \: |∧/l/|ノレ : : : :/
Y: : `ー`ー-―’´一’: : | /: : : : : : : : : : ::i-‐’′
\: : : : : : : : : : : : / /: : : : : : : : : : : |
Y: : : : : : : : :r’´ /: : : : : : : : : : : :|
/: : : : : : : : : :| /: : : : : : : : : : : : |
/:: : : : : : : : : ::| / : : : : : : : : : : : : |
/: : : : : : : : : : : | /: ::_: : : : : : : : : :|
`77ー–┬r一’  ̄/ / ̄`ー-┬r-‘
l’´) ├| l’´) |~|
し’ (ニ⊃ し’ (ニ⊃,、-‐””” ````”””::::``丶、
.,、 ‘´ ` 、::::::`:,、
,、’_ ゝ、‐’`、
/ ” ”” ‐‐ ‐ ‐‐,、‐‐__”,,”,,’,,,”_´_ ‘、
,’‐ ,‐ -,‐ ””.ィ'”/ l’、 ヽ.. \ ```::::.、’,
! { :/l ..::/i’../ |\:..’、::. \ :::::::::i
.i ! .::〔_!:::;’ i’:/. ’、 \ヽ\ヽヘ | ::::::::|
.| .l ::/ !,ヘ,l/_ ヽ _,,>;<,;ヽ\| :::::::| ソースの中に “gcc” って
! |::/ ,r”r’´´ヾ ””r'”`ヾ`、 i ::::::::| 書いてあるのを
| ;/i, ii’ {、 { {、 .{ }i:| ::::::::l 気にしたらあかんからな
i ‘. {‘i!, ‘、 ソ0} ;丶 ノ0} ノ!:| :::::::|
l i ,,,,ゞ,、、’,;;;;;;;;;;;;::::;,,,,ゞ -、’、.:| ::::::::i
i l ”””´´´`゛゛゛´´ ..::| ::::::::|
l ’. ` .::、_| :::::::::!
}. `.、 、–‐,丶 .:::;、’::i’ ::::::::::!
| ::::`..、 `”'” ,、‐”l:::::i ..::::::::::!
.| ::::::::::::`:‐.、,,,,,,,,、 – ”´:::::::::l:::i : :::::::::::::!
! :. ::::::::::::::::::::::::i::::::::::::::::::::;::::::ヽi ::;.::::::::::::::!
l :::. :::::::::::::::::::::::::l ::::::::::: ‘”,’:::::::::i’ .:::::::::::::::::::l
i ::::. :::::::::;、:::::::::,、’! ,:’::::::::,、i .:::::::::::::::::::::}
! ::::::. ::::::::ヽ/|,,、i ,;;;;;;;;;;;;;;/イ .::::::ノノ\::::::}
’、 、::::. :::::,イ i’i’ `”´ .//´i .::::::y”ソ⌒``ヾ.
ヽヾ、.. :::i i’ i’_‐_-_-_-_- .// i ..::::/ :::::’,
ヽ、ヽ:::〈 i’i’r;; i’i’ ``” ノイ’/ ::::::’,
` /ヽヽ i’i’ `’ i’i’ ;、 // ::::::}