Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-01-19

cl-serializer

| 05:31 | cl-serializer - わだばLisperになる を含むブックマーク はてなブックマーク - cl-serializer - わだばLisperになる

今回は、cl-serializerを試してみます。

シリアライズって何ですか?という私なのですが、調べてみたところ、処理系内部のオブジェクトデータの外部へ入出力するためのものなんですね。

パッケージ名cl-serializer
本拠地サイトcl-serializer
ClikiCLiki: cl-serializer
ASDF-INSTALL

インストール

asdfに対応はしているのですが、依存するパッケージがことごとく、Clikiに登録されておらず、darcで引っ張ってこないといけません。これが、結構手間です。

自分は、darcで引っ張ってきて、tarボールにまとめ、asdf-installをしました。


$ cd /var/tmp
$ darcs get http://common-lisp.net/~loliveira/darcs/babel                   
$ darcs get --partial http://common-lisp.net/project/cl-def/darcs/cl-def    
$ darcs get http://common-lisp.net/project/stefil/darcs/stefil              
$ darcs get http://common-lisp.net/project/defclass-star/darcs/defclass-star
$ darcs get http://common-lisp.net/project/cl-serializer/darcs/cl-serializer

$ tar zcvf ....

(asdf-install:install "http://cffi-net.accela.net/releases/cffi-grovel-r2.tgz")
(asdf-install:install "/var/tmp/babel.tar.gz")
(asdf-install:install "/var/tmp/cl-def.tar.gz")
(asdf-install:install "/var/tmp/stefil.tar.gz")
(asdf-install:install "/var/tmp/defclass-star.tar.gz")
(asdf-install:install "/var/tmp/cl-serializer.tar.gz")

試してみる


(require :cl-serializer)

;; データ
(defvar obj '(a (b c) a b (d e (f g (h i)))))

;; 書き出し
(let ((sr (cl-serializer:serialize obj)))
  (with-open-file (out "/var/tmp/ser.dat" :direction :output :if-exists :supersede
		       :element-type 'unsigned-byte)
    (series:collect-stream out (series:scan sr) #'write-byte)))

;; 読み込み
(with-open-file (in "/var/tmp/ser.dat" :element-type 'unsigned-byte)
  (pprint (cl-serializer:deserialize (coerce (series:collect (series:scan-stream in #'read-byte)) 'vector))))
;=> (A (B C) A B (D E (F G (H I))))

serializeでシリアライズして、deserializeで戻し。

なるほど、なるほど。

私には用途が思い付きませんが、きっと凄いものなのでしょう(´▽`*)