Clack Meetup #1 に行ってきました

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
  1. 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たちとなにかやっていきたいなーと思った次第です。

関連記事

comments powered by Disqus