Lisp Meet Up #26に行ってきました

tamuraです。

Lisp Meet Up presented by Shibuya.lisp #26 に行ってきましたので、まとめたメモを公開いたします。 今回はClojureの回となっております。

Clojureのチャットボットフレームワーク

by athos0220さん

いろいろある?チャットボットフレームワーク

  • Hubot
    • GitHub製
  • Ruboty

    • Rubyで作られている
  • 背景

    • ChatOpsがはやっている
    • 実行結果もbotがつぶやいてくれる

フレームワークのアーキテクチャ

  • ロボット
    • アダプターとスクリプトの仲介
    • (でかい)
  • アダプター
    • 個別チャットサービスの差異の吸収
  • スクリプト

    • どのメッセージにどう反応するか記述

      [adapter] <-> [robot] <-> [script]

parabola 今回作ったClojure製のチャットボットフレームワーク

複数アダプターの並列実行

  • アダプターは基本的にイベントループで動く
    • 複数動かすにはマルチスレッドで実行
    • アダプターから別のアダプターへメッセージを流すことも可能に
  • core.asyncで複数のスレッドからのメッセージを直列化

リロード可能なアダプター/スクリプト

  • アダプター/スクリプトへの変更を反映させるためにリロードさせたい
  • ファイルのリロードの前後で正しい順で行う
    • スレッドの起動/停止
    • チャットサービスへの接続/切断
  • Componentライブラリ
    • 整合性のとれたリロードの実現を支援するシンプルなライブラリ

関数ベースで記述できるスクリプト

  • スクリプトは基本的に関数で書く
  • ミドルウェアで機能を拡張する

Typed Clojure

by にだーさん

Clojureの良し悪し

  • 関数言語らしい文法
  • シーケンスをベースにした
  • 動的型付け
    • 実行時エラー

Typed Clojure

  • Clojureに漸進的型付けを実現
  • 実行時の挙動には影響しない
  • Lintのように使える
  • 現在は core.typed になっている
  • Leiningenで導入できる

例 数値を受け取って数値を返す

(ann plus [Num -> Num])
(defn plus [x] (+ x 1))

(check-ns)

※チェックに通らないとすごい怒り方をする

例 複数の型を取りうる型を記述できる

(ann plus2 [(t/U Num String) ->String])
(defn plus2 [x]
  (if (string? x)
      (str x 1)
      (str (+ x 1))))

メリットデメリット

  • 利点

    • プログラムの信頼性の向上
    • assertと違い実行時にコストを消費しない
  • 欠点

    • 型を書くコストが大きい
    • 外部ライブラリも型記述が必要

Clojure開発環境Nightcodeについて

by haijuさん

  • gameライブラリ play-cljの作者
  • 初心者向けのClojure開発環境
  • 使っている人があまりいない

  • なにぶん情報がないのでわからないことが多い

感想

TypedClojureに一番興味を覚えました。 Lispはあまり大人数では組まないことが多いと思うのですが、仕事で使うとなると誰がそのコードを使うかわからないので、そういう時に役に立つんではないかと思ったりします。 SIerがClojureの方向を向いてくれると仕事でも使えるのではないかと思います。

関連記事

comments powered by Disqus