Clojureを勉強している7

ns関数の引数に(gen-class)を入れないとREPLが立ち上がったときに環境を読んでくれないのでハマった。

  • Basics of core.async Channels
    • まずは同期:
      • chanでチャネルを作成
      • chanの引数に数字を与えるとその分だけバッファが作られる
      • >!!ブロッキングput
      • <!!ブロッキングgetl
      • close!でチャネルを閉じることができる
        • が、バッファを空にするまではgetできる
        • nilをputすることはできない(チャネルが閉じられているときにgetする値がnilだから)
    • 次は非同期:
      • >!でノンブロッキングput。goブロックで囲う必要がある。
      • <!でノンブロッキングget。goブロックで囲う必要がある。
      • go-looprecurで待ち受けできる
      • alts!複数のチャネルを扱うことができる。
  • Serving Tea at a core.async Tea Party
    • Google検索とYahoo!検索の2つのチャネルを作って速い方の結果を取得するサンプルコード
    • と思ったらgoogleとyahooは例えだった。中でランダムミリ秒数スリープして定形の値を返すだけ。
  • Creating a Tea Party to Be Run from the Command Line

    • おお、jar作るのか。起動が速くなるのかな?
    • project.clj(:aot project-name.core)オプションを足すだけ。
    • lein uberjarで作成!
      • コンパイル遅い。もしや、Scalaと同じ悩みがあるのでは? いやいや、立ち上がりが遅いだけだろう。
    • targetディレクトリにjarが出来上がっている
      • -standalone.jarClojureクラスも全部入り。もう一個の方は自分と(この例では)core.asyncのみ入っているjar。
      • java -jar project-name-0.1.0-SNAPSHOT-standalone.jarで実行!
      • やっぱり立ち上がりが遅かった。
  • Chapter 6 Communication with core.async

    • Basics of core.async Channels
    • Serving Tea at a core.async Tea Party
    • Creating a Tea Party to Be Run from the Command Line

Living Clojure

Living Clojure