CLでCのプログラムを動かす画期的な方法を思いついた

               ,. ‐””:::::::::::::;::::`’-、
             /::::::::::::::;;:::::/ ヽ:::::::::ヽ  
       _      /:::::::::::::///  `、::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’     ;、 //       ::::::}

Leave a Reply