tamuraです。
Clack Meetup #1に行ってきました。

CommonLispは趣味でたまに使います。Clackは以前会社のツールを作るときに使いました。Caveman1がCavemanと名乗っていたころです。

一部の資料はconnpassにアップされてあります。
Clack Meetup #1


はじめに

  • 設備の説明
  • 全員で自己紹介

自己紹介で出た「今現在やっている言語」等をちろっとまとめるとこんな感じでした。 Javaは私です。

  • CommonLisp
  • Python
  • Ruby
  • Clojure
  • PHP
  • DB
  • Java

1. Clack: glue for web apps

by サムライト株式会社 深町英太郎さん

Clackとは

  • web application environment
  • webサーバを抽象化しよう
  • web appをコンポーネント化しよう


  • こんな感じで値を3つ返す式を渡せば動く
  • serverは色々と選べる
(clackup
  (lambda (env)
    '(200
      (:content-type \"text/plain\")
      (\"hello world\")))
  :server :hunchentoot)


  • アプリケーションとサーバをつなぐ
  • Clackに載せることでどのサーバでも動かせるようになる
    • (開発はHunchentoot、運用はnginxとか)


  • Composability
    • core applicationのまわりにいろいろMiddlewareを追加していける
      • (JavaのWebアプリでいうところのfilterとかのイメージ)

CommonLispのライブラリの歴史

  • 大きく4つの時代に分けて説明
    • Quicklisp以前はもはや石器時代
    • Quicklispが出てきてマシになった
    • 最近ではデータベース接続もいろいろ出てきた
    • 現在
      • ningle, caveman2
      • cl-dbi, sxql, datafly, integral
      • woo
      • CIM/Roswell, qlot

2. Practical Common Lisp in Web

by サムライト株式会社 Rudolph Millerさん

  • CommonLisp
    • あまりwebアプリで採用されていない。なぜか?


  • 言語を選ぶ際の基準って・・・
    • 言語自身の力
      • CommonLispは
        • 高度な抽象化が可能
        • 速度も問題なし
    • 開発環境
      • CommonLispは
        • SLIMEあるよ!
    • ライブラリ
      • CommonLispは
        • ある?
        • あまりないかも

ライブラリがない中でサムライトではどうやって開発しているか?

  • 実際に作ってみた
    • twitterみたいなやつ
    • フレームワーク
      • (CommonLisp)caveman2
      • (Ruby)rails


  • getting started
    • rails
    • caveman2
    • どっちも同じくらい簡単に作成ができた


  • model
    • rails
      • 標準のやり方
    • cl(integral)
      • defclass で定義 (これはすごい)


  • relationship
    • rails
      • belongsto, hasone, has_many
    • cl(integral)
      • リレーション定義なし


  • rails と integral のベンチ比較
    • integralがrailsの2倍速い (2倍しか速くない)


  • controller
    • rails
      • 標準のやり方
    • caveman2
      • アノテーションですっきり書ける
      • functionとして定義されるのでテストしやすい!


  • view(テンプレート)
    • rails
      • いっぱいある
    • caveman2
      • すくなくとも6個のライブラリがある (意外とある!)


  • deploy
    • rails
      • 普通に
    • caveman2
      • 困る点
        • 処理系がない
        • 実装バージョンが違う
        • quicklispライブラリのバージョンが違う
      • どうしているか?
        • roswell
          • sbclのインストールが楽にできる
          • スクリプト可能
          • clackup --server woo app.lisp
        • qlot
          • ローカルでライブラリをもてる


  • httpアクセスでベンチ
    • railsの2倍の速さ

3. 既存のテンプレートエンジンの問題点と再設計、あるいは Arrows (a.k.a Zenekindarl) について

by κeen (@blackenedgold) さん

  • template engine
    • 引数を計算し
    • テンプレートに引数を渡し
    • レスポンスをレンダリングし
    • レスポンスをサーバに返す


  • レンダリングの問題点
    • 結合した文字列はその後使われることはない
    • 大きな文字列を作るとGCに負荷がかかる


  • SBCLのGC
    • 世代別CopyGC
    • alloc_spaceに入らない大きさの場合アロケーションが遅い


  • 以下のようなテンプレートの場合、 header が出る前までをいったんクライアントに返したら?
    • クライアントのレンダリング完了までの時間を短縮できるのでは?
<html>
<head>
   ......
</head>
<body>
  <header>{{ header }}</header>
  ...


  • Arrows
    • 現在開発中のテンプレートエンジン
    • 複数のテンプレートが選べる
    • 複数のバックエンドが選べる


  • 今後
    • 遅延評価
    • 並列化
    • 非同期
    • HTMLの縮小


  • まとめ
    • 既存のテンプレートエンジンは非効率
    • 新しいテンプレートエンジンを設計した

懇親会+LT

別件(サバフェス)があったので懇親会には参加せずに帰ってしまいました。

感想

一言で言うと「CommonLispアツいなー」でした。CommonLispでWebをやる、というのを本気で変えようとしているのが伝わってきました。

Quicklispはもうちょっと使いやすくなるといいなーと思います。JavaのMavenとかClojureのClojarsに慣れると、バージョン指定ができないQuicklispはちょっと不安になります。

インターネット広告関連の仕事に関係している関係とかいろいろな関係で、この日おじゃましたサムライトは設立時から知っていたのですが、ちょっと前にCommonLispの仕事があると聞いて「なぜ?」と 思ったことがありました。今後も要チェックな会社です。

まったくCommonLispと関係ないのですが、Railsをやったことがないので、Railsの手軽さにちょっと心惹かれました。

私の会社にもSICPを読んだりSchemeを実装したりする人がいるので、そういう隠れLisperたちとなにかやっていきたいなーと思った次第です。