14

Click here to load reader

CIM - Common Lisp Implementation Managerを作りました

Embed Size (px)

DESCRIPTION

Shibuya.lispのLisp Meet Up #13での発表資料です

Citation preview

Page 1: CIM - Common Lisp Implementation Managerを作りました

CIMの紹介

Shibuya.lisp/Lisp Meet Up #13κeen(@blackendgold)

Page 2: CIM - Common Lisp Implementation Managerを作りました

自己紹介● Twitter: κeen(@blackenedgold)● Github: KeenS● ブログ: een Happy Hac ing Blogκ の κ● 東大数学科の三年生● 最近までandroidアプリ作るバイトしてた● 就活中!

● Common Lisp, Ruby, Emacs Lispが好き● 最近Real World OCaml読んでる(今15章くらい)

Page 3: CIM - Common Lisp Implementation Managerを作りました

今回作ったもの

CIM – Common Lisp Implementation Manager

Page 4: CIM - Common Lisp Implementation Managerを作りました

CIMとは?

● Rubyのrvm真似して作った● 大きく分けると

– 処理系のインストール/管理のcim– 統一CLIのcl– QuicklispのCLIのql

● …デファクトスタンダードを目指して

Page 5: CIM - Common Lisp Implementation Managerを作りました

きっかけ

● 「shly loadでファイルを実行できる」発言● 自作関数でオプション処理とか付けたりした● Shellyの制約に当たる->独立プロジェクト化● Shell Script勉強したいしShell Scriptで書こう

Page 6: CIM - Common Lisp Implementation Managerを作りました

できること● https://github.com/KeenS/CIM● README読んでね● 主なコマンドは

– cim install sbclでインストール– cim use cclで切り替え– cl file.lispで実行– ql installで(ql:quickload)相当

● Help充実させたのでHelp読んで下さい

Page 7: CIM - Common Lisp Implementation Managerを作りました

できること

● 管理できるのは– SBCL

– CLISP

– ECL

– GCL

– CCL

– ABCL

– Allegro CL

Page 8: CIM - Common Lisp Implementation Managerを作りました

できること

● ql deps –path ./quicklisp myappでquicklisp分離

● cim for sbcl ccl clisp do foo.lispで処理系毎に繰り返し

● clのオプションはrubyっぽくしてある– 割とワンライナーも意識

Page 9: CIM - Common Lisp Implementation Managerを作りました

実装

● cimコマンド群とclはBourne Shell Script

● 800行くらい● qlはCommon Lisp

● 500行くらい● 依存ライブラリなし(Quicklispは使う)● 極力依存を無くす方針

– 「インストール直後のFreeBSDで動く」を目安

Page 10: CIM - Common Lisp Implementation Managerを作りました

実装● 出来る限り汚さない

– 環境変数は2つしかexportしない– 関数とかもexportしない– 尚、rvm …は

● 副産物としてoption-parser– 需要があれば別ライブラリで公開

● …テストしてない– テストってどうやれば良いの?

Page 11: CIM - Common Lisp Implementation Managerを作りました

苦労話● Shell Script難しい

– OSによってコマンドの挙動が違ったり– おもいっきり状態に依存してる– そもそも知識と経験がない

● ビルドが難しい処理系とか– SBCLはビルドもバイナリインストールも難しい

● Quicklispが思いの外貧弱– バージョンを指定してインストールとか出来ないっぽい

Page 12: CIM - Common Lisp Implementation Managerを作りました

今後

● テスト● コアダンプ● syset (rvmのgemset)● quicklispにpull-req?● plugin?

– clコマンドを生かしたい

Page 13: CIM - Common Lisp Implementation Managerを作りました

以上みんな使ってね

Page 14: CIM - Common Lisp Implementation Managerを作りました