octahedron

LemとSKKとCommon Lispでたたかうプログラマのブログ

祝! Rosaバージョン1.0!

 最近つくったrosaというライブラリ・ツールのバージョンを1.0にしました。

github.com

 テキストデータに、書きやすく見た目を邪魔しない形式で、メタデータを埋め込むための言語です。実際にどんなものかというのは、以下の記事に書きました。

 名前は「ろさ」「ろーざ」のどちらかで読んでください。元ネタ的には「ろーざ」のようですが、ぼくは「ろさ」って読んでます。ラテン語

Ver. 1.0になって増えた機能

以下のことをしました:

  • ラベルには半角スペース以外の文字を使えるようになった
  • リスト省略表記

リスト省略表記

 リスト省略表記は、ラベルを並べてリストを表現するという方法のシンタックスシュガーです。以下の2コードが等しい感じです。

;; 略記じゃないベタ書き
CL-USER> (with-input-from-string (in "
:tag lisp
:tag common-lisp
:tag programmnig
")
           (rosa:peruse-as-plist in))
(:|tag| #("lisp" "common-lisp" "programmnig"))
;; リスト省略表記
CL-USER> (with-input-from-string (in "
:tag>
- lisp
- common-lisp
- programmnig
")
           (rosa:peruse-as-plist in))
(:|tag| #("lisp" "common-lisp" "programmnig"))

 これだけです。

以下、回想

 アイデア自体は2011年ごろからあり、今でいう静的サイトジェネレータの記事データを表現するために考えたものでした。当時はまだLispは興味があるだけだったので、rosaをC++で実装しようした形跡があり、手元の旧プロジェクトのコミットログにはそれが残っています。就職してからCommon Lispで実装しだして一旦完成、そのあとに謎の軽量マークアップ言語機能が乗ったりしたあと放置。

 なんとか実行可能バイナリをつくったこともありました。Common Lispの実行可能バイナリのビルト方法がよくわかっていなかったので、その時偶然できたバイナリをわりと最近まで使い続けてました。

 マークアップ言語部分は、あおぞら文庫の構文や組版本を参考にしつつ、シュッとした言語になればいいなーと妄想しています。

github.com

 苦節もうすぐ七、八年か。考えた当時(大学生!)はCommon Lispでこんなにコード書いてるとは思いませんでした。ゲームでもつくんだろうなって思ってました。どうしてこうなったのか。

 これからも誰の役に立つのかよくわからないプログラムをCommon Lispで書いていけたらいいなあー。