Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Common Lisp100連発

Windymelt
August 21, 2018

Common Lisp100連発

2018-08-21に催されたLINE Developer Meetup #43(https://line.connpass.com/event/96601/) で発表したものです.

スライドの本体はこちら https://docs.google.com/presentation/d/179Ap4cB2p1JpVK7ds0cNPREcLLv3m6CJqvCKG6QepXU/edit?usp=sharing

Windymelt

August 21, 2018
Tweet

More Decks by Windymelt

Other Decks in Technology

Transcript

  1. Common Lisp100連発
    ゆるめのCommon Lispの紹介をします

    View Slide

  2. で,誰?
    ● Windymeltといいます
    ○ @windymelt
    ○ id:Windymelt
    ● 株式会社はてなでWebアプリケーションエンジニア
    をやっています(しゃかいじん3ねんめ)
    ● ふだんはTypeScriptやPerlを書いています
    ● 趣味の言語はCommon Lisp

    View Slide

  3. 1: いまLemがアツい!!
    Common Lisp製エディタのご紹介

    View Slide

  4. スクショ
    ● emacsライク
    ● vi-modeもある
    ○ ヤバい!
    ● アイコン作成中

    View Slide

  5. ヤバい!
    ● 設定も拡張もCommon Lispで書ける
    ○ 本体といっしょにコンパイルできる
    ○ →速い!!
    ● よく使う機能は標準搭載している
    ○ auto-complete的なやつ(補完機能)
    ○ paredit的なやつ(カッコの均衡をとるやつ )
    ● Common Lispコードを開くとそのままeval・コンパイルできる
    ○ 動作中(!)のコードにアタッチして関数を書き換えたりできる
    ○ ↑SWANKというプロトコルで実現されてる

    View Slide

  6. 今すぐインストール!!! (requires ncurses5)
    $ brew install roswell #OSX
    $
    https://github.com/roswell/roswell/wiki/Installation#buildin
    g-from-source (https://bit.ly/2BAqDI1 )
    #Ubuntu
    $ ros setup
    $ ros install cxxxr/lem
    $ lem

    View Slide

  7. 2. Common Lispはモダンだよ!

    View Slide

  8. Common Lispは古いって?
    ● パッケージによるモジュール化(言語標準)
    ● Unicode
    ○ 主要な処理系でサポート (SBCL, ClozureCL, CLISP, Allegro CL, ...)
    ● ビルドツール(ASDF3)
    ● オブジェクト指向(Common Lisp Object System)
    ● パッケージインストーラ(Quicklisp)
    ○ ようするにgem, cpan
    ● パッケージマネージャ(Qlot)
    ○ ようするにbundler, carton
    ● 処理系マネージャ(Roswell)
    ○ ようするにrbenv, plenv

    View Slide

  9. 実用言語

    View Slide

  10. bloom filter実装してみた
    https://github.com/windymelt/bloom

    View Slide

  11. 3: Common Lispをはじめるのは簡単!!!!
    $ (roswellをインストールする)
    $ ros run →REPLが出る!!!
    (print “Hello, World!”)
    “Hello, World!”
    ^DでREPLを閉じる!!!

    View Slide

  12. 4: Webアプリケーションを作成する
    $ ros run
    (ql:quickload :caveman2)
    (caveman2:make-project #P"test-app")
    ^D (いったんREPLを抜ける)
    $ cd test-app
    $ ros run -S .
    (ql:quickload :test-app)
    (test-app:start :port 8080)

    View Slide

  13. 5: Webアプリで遊ぼう
    $ ros install clack # Webアプリを起動するラッパを入れる
    $ lem src/web.lisp
    (render #P”...”) となっている箇所を(render-json ‘(“a” “b” “c”))
    にしてみる
    $ ros -S . `which clackup` app.lisp --port 8080
    →JSONがもらえるようになった!!!

    View Slide

  14. HTTPアクセス
    (ql:quickload :dexador)
    (dex:get “http://localhost:8080/”)

    View Slide

  15. 6: Docker化できる!!!
    Docker-composeを使って動作中のコンテナで動いている関数をいじれる
    https://blog.3qe.us/entry/2018/06/21/025948
    ===
    https://bit.ly/2wkQAoO

    View Slide

  16. 100連発の続きはまたこんど・・・

    View Slide