CLISP + msys + mintty
msys + mintty + CLISP で割と綺麗にコンソールが使えるようだ
やったことはWindowsのPATHに「C:\c\Program Files (x86)\clisp-2.49」を追加したのみ。
ただ、Ctrl + D で対話モードを強制終了した後ウィンドウを消すとセグる。
とか考えてたんですが、eclipse + CLISP の素晴らしいプラグインを開発されてた方がいました
http://sourceforge.net/projects/dandelion-ecl/
インストール方法
新規ソフトウェアのインストールに
http://dandelion-ecl.sourceforge.net/update
を入力し、インストール、再起動。それだけ。
他のeclipseプラグインと同じくウィンドウ->Lispと辿ることで設定変更可能。
異なるCLISPの処理系を使い分けることができそうだ。
CLISPはLispのコードからバイトコードを生成するというところが気に入りました。
あと、GNUだし。
ただここ見てるとhttp://cl.cddddr.org/index.cgi?%BD%E8%CD%FD%B7%CF
Lispの処理系多すぎなんだよなあ
CLISPのビルド
上記のdandelionプラグイン使っときゃLispは楽しめるんだが、他にもいろいろなモジュールがあるみたいで(gtk2,zlib,postgresql,etc.)試してみたいのが人の性。
ビルドの手順を示す
必要な物は多い
依存関係にあるものでインストール可能なもの ・libsigsegv … v2.6なら素でインストール可能 ・libiconv … 特に難しくないので頑張って ・gettext … mingwパッケージを使うかパッチを当てるか ・libffcall 無理そう ・readline…そもそもMSWでインストール不可能
libsigsegv-2.6
# mingwのgccで-mno-cygwinオプションなんて意味ないけど、
# コンパイル・テスト・インストールまで済んだので良しとする
CC="gcc -mno-cygwin" ./configure --host=i386-pc-mingw32 --prefix=/mingw make make check make install
libffcall
GNUのlibffcallのページ、なんだこりゃw
GNU ffcall library
TODO for Bruno Haible Integrate patches into the cvs tree. Make a release into ftp://ftp.gnu.org/pub/gnu/libffcall/. Update FM. Update Free Software Directory. If you are not Bruno Haible, please do send him a polite note and ask him to take a look at this TODO list!
とりあえずインストールしていく
$ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/libffcall co ffcall $ cd ffcall $ ./configure --host=i686-pc-mingw32 --prefix=/mingw && make && make check && make ※ffcallのインストールなしにCLISPをインストールしようとすると親切にもこのインストール方法が示される。ありがてえ。
clisp-2.49
# clisp-2.49フォルダ・INSTALL内の文言
# * on Win32 using mingw: see unix/INSTALL and pass --with-mingw to configure.
# 最終的なコンフィグ
・「-ansi」をつけていると一部コンパイル不可な部分が出てくる
・CLFLAGS ="-Wl,--stack,10485760"を付けないとLisp特有の再帰処理のためのテストで落ちる
参考サイト:GSL for MinGW
$ CC="gcc -Wall" CLFLAGS ="-Wl,--stack,10485760" ./configure --prefix=/mingw --with-mingw --without-readline --with-libsigsegv --with-module=bindings/win32 --with-module=rawsock --with-modules=regexp --with-module=zlib --with-libffcall
Configure findings: FFI: yes (user requested: default) readline: no (user requested: no) libsigsegv: yes ./makemake --with-dynamic-ffi --prefix=/mingw --win32gcc --without-readline --with-libsigsegv --with-module=bindings/win32 --with-module=rawsock --with-modules=regexp --with-module=zlib --with-libffcall > Makefile make: `config.lisp' is up to date. To continue building CLISP, the following commands are recommended (cf. unix/INSTALL step 4 ff): cd src vi config.lisp # The default stack size on your platform is insufficient # and must be increased to at least 16384. You must do either # 'ulimit -s 16384' (for Bourne shell derivatives, e.g., bash and zsh) # or 'limit stacksize 16384' (for C shell derivarives, e.g., tcsh) make make check
ビルドする・「make check」のテストは通らなかったがまあいいや
$ cd /usr/local/src/clisp-2.49/src $ make $ make check
こぼれ話
・stackのサイズ変更はこれまでも必要な時があったが、今回初めてそれを使ったビルドを成功させた
・SourceForge.net: MinGW - Minimalist GNU for Windows: mingw-users
上記のメーリングリストにも言及されているが、stdlib.hさえインクルードしておけばenvironの中に勝手に環境変数が入っている。
#include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { char** epp; for (epp = environ; *epp; epp++) printf(" -> %s\n",*epp); return 0; }
こいつをコンパイルして実行すると面白い、Javaのhttp://java.sun.com/javase/ja/6/docs/ja/api/java/lang/System.html#getProperties():Systemプロパティに似てる
$ gcc env.c -o env $ ./env -> ALLUSERSPROFILE=C:\ProgramData -> APPDATA=C:\Users\learning\AppData\Roaming -> COMMONPROGRAMFILES(X86)=C:\Program Files (x86)\Common Files -> COMMONPROGRAMFILES=C:\Program Files (x86)\Common Files -> COMMONPROGRAMW6432=C:\Program Files\Common Files ・ ・ ・