読者です 読者をやめる 読者になる 読者になる

Shibuya.ex #1 の様子

Shibuya.ex #1 - Shibuya.ex | Doorkeeper

参加してきました。スライドの簡単なメモとツイートをピックアップして載せておきます

Elixirご紹介(@naoya_ito さん)

speakerdeck.com

ざっくり特徴

  • ErlangVMの上で動く
  • 最近の言語的なトレンドがある
  • 軽量プロセス、アクターによる並列処理
  • Rubyっぽくない
    • 似てるのはdefとdoぐらい
      • ユーザフレンドリー

なぜElixir?

  • ランタイムが強力
  • 重要なのはErlang/OTPの上に乗っていること

関数型

  • 動的型付けの関数型言語
    • なし
      • 静的型付け
      • 純粋関数型
      • 部分適用、カリー化
      • オプション型(Maybe)
    • ある
      • リスト内包表記
      • 遅延評価、無限リスト

参考

次の10年の為にElixirをハックする(@mizchi さん)

speakerdeck.com

Elixiriはどういう言語か

  • 文法は気持ちの問題
  • すぐにErlangを学ぶハメになる

Elixirへの不満

  • いまさら型がない言語を学ぶこと

Elixirに解決して欲しい問題

  • Let it crashしたい
  • GCセンシティブ

本音

  • つまらない言語で消耗したくない
  • Elixirみたいな面白機能積んだ言語流行ってくれ

割り切り

  • Erlangは結局Network DSL言語として割り切ったほうが良い(by @voluntas)
  • CPUヘヴィが速くなるわけではない

Elixirを本番環境で使ってみた事例紹介(@ohrdev さん)

www.slideshare.net

サービス紹介

  • DreeVee

採用の経緯

  • 旧システムはRails
  • やりたいこと
    • 大量のリクストを安全
    • サーバコスト
    • スケール
    • サービス止まらないように
  • 候補

どう使っているか

  • API部分に限定
  • バックエンドはRedis、Dynamodb
  • デプロイ
    • exrm
  • maru
    • grapeのelixir実装
  • その他
    • exredis, poolboy, ex_aws, rave_elixir

困ったこと

困らなかったこと

感想

  • Erlangを知らないと辛い
    • エラーログはErlangベース
    • ErlangRubyで書いている感じ
    • ElixirのライブラリはまだErlangのラッパーがほとんど
  • ドキュメント少ない
  • コミュニティが少ない
    • sapporo.beamおすすめ
  • Erlangのコミュニティ、エコシスエテムは偉大
    • 時雨堂さんのドキュメントが参考になる
  • Elixirならではの機能が便利
    • パイプ演算子がないとやっていけない体に
    • struct、protocol、遅延処理、etc
    • マクロが強力
  • debug、Perf関連はErlangのプロダクトが充実
    • observer、eper、
    • Elixirも徐々に充実
  • Erlangをざっと把握しておくと良い

Cowboyを使ってみる(@hayabusa333 さん)

www.slideshare.net

Cowboyとは

  • モジュラー形式のHTTPサーバ
  • ErlangVMで動くHTTPサーバとしては一強
  • Plugを使えばもっと簡単

DBにseedにするライブラリつくった(@Joe-noh さん)

www.slideshare.net

exseedがある

要望

  • モデル名繰り返したくない
  • 1行1属性縛りは避けたい
  • 複数Repo使えたい
  • Elixirらしく、パイプを使いたい

    tane

Rails TutorialをPhoenixで移植してみた(@hagiyat さん)

speakerdeck.com

Elixirのライバル達を紹介する(@moccos さん)

speakerdeck.com

Fantasyスタックの話(@yodatomato さん)

おわり

Shinjuku.ex #10 行ってきたメモ

shinjukuex.connpass.com

新宿で迷子になっていたので、2つめの途中から参加しています。

パーフェクト"Elixir情報収集" @keithseahus さん

www.slideshare.net

exgettextの話 @k1complete さん

www.slideshare.net

ドキュメントの地域化

gnu gettextとほぼ同じような地域化

ElixirユーザのためのOTP入門 @mururururu さん

shinjuku.ex #10 発表資料

Elixirアプリケーションの設計

  • どう設計するのか、他の言語とは異なる設計になる
    • コード読むしかない
    • よく出てくるパターンを知る
    • 闇雲に読んでもダメ。OTPを勉強するのは大事

OTPとは何か

  • Erlangでシステムを設計するときの原則
  • それに従って実装するためのライブラリ群
  • 木構造の設計をする
    • スーパーバイザ:ワーカの監視などを行う
    • ワーカ:実際に仕事を行う

ビヘイビア

よくあるパターン

  • GenServer
    • クライアント、サーバ
  • Agent
    • 状態を持つ
  • GenEvent
    • イベントハンドリング
  • Task
    • ただ計算を行うなど
  • Supervisior
    • プロセスの監視
  • Application
    • 始点

実際に何が起きているのか、実際にどんな風にできているのか、サンプルアプリ(KVS)を作ってみていくことで学ぶ

samples for shinjuku.ex #10

OTPをよしなに選択して使えるとElixirがかけると言って良いのでは?

Phoenix

使うのに意識することはないが…

まとめ

OTPはパターン

Eilixirを書くということは、スーパーバイザツリーを設計するということ

Ruby on Rails vs Phoenix @ma2ge さん

speakerdeck.com

ここ2、3ヶ月海外でも記事が増えている。流行りだしている

  • Elixir/Phoenixはバックエンド、ミドルウェアだけ?
  • そろそろRails置き換える力があるのでは
    • scaffold
    • eex like erb
    • ドキュメント充実
    • WebSocket
    • Performance Railsアプリのパフォーマンスを改善するにはPhoenixと言いたい

Ruby on Rails

プログラマの幸せと生産性

Phoenix

  • Speedと開発環境を楽しくあろうと作られている
  • Phoenixのスター数はRailsの10分の1
  • 今年中に1.0?

違い

  • ウェブソケット
  • アセットパイプラインがない
    • nodeに頼る
  • SQLite Adapterなかったが開発されている

開発における違い

  • ファイル構造
  • scaffold
    • 同じ
    • named_routeほぼ同じ
  • controller
    • Rails
      • renderを明示的に指定する必要がない
  • View/Template
    • Phoenix
      • templateとViewは独立
        • Viewはプレゼンテーションレイヤのみ
      • form_forが最近実装された
      • ラベル未対応くらい
  • Model
    • Elixir
  • Query
    • ecto
  • Mailer
  • assets
    • brunch.io, gulp, etc..
      • JSはJSに任せる
  • Test
    • Rails
    • Elixir
      • ExUnit
        • アサートがマクロで読みやすい
        • Rspec likeはライブラリもある
  • Ecosystem
    • Rails
      • gems
    • Eilxir
      • hex
        • 数は少ない
        • よく出来ていて作りやすい
        • 他の言語のいいところを吸収していて、可能性がある

PhoenixRails

  • Performance
    • Phoenix > Rails
      • development: 1.7倍
      • production: 3倍
      • 並列: 9倍

まとめ

ミドルウェアだけでなくウェブアプリケーションに使ってもいいのでは

ポテンシャルはある


個人的には、@mururururuさんのOTP入門で、実際にOTPが何をどういう風に抽象化しているのかというところをライブコーディングで学べたのが良かったですね。また機会があれば参加したいです。

コンパイラ読んだ

コンパイラ [コンピュータサイエンス教科書シリーズ] (コンピュータサイエンス教科書シリーズ 8)

コンパイラ [コンピュータサイエンス教科書シリーズ] (コンピュータサイエンス教科書シリーズ 8)

コンパイラという本を読んだ.コンパイラに関する本といえば,

コンパイラ―原理・技法・ツール (Information & Computing)

コンパイラ―原理・技法・ツール (Information & Computing)

最新コンパイラ構成技法

最新コンパイラ構成技法

この辺が定番だと思うのだけれど,まだまだ敷居が高かったのでとりあえずこれを読んでみた. 監修は中田育夫という人です. 中田さんはのRuby仕様書のISO規格に関わっている方で,日本でコンパイラで有名な方です. 学生時代にMatzさんは,中田さんの研究室に所属していて,恩師でもあるそう. ちなみに中田さんのコンパイラ本はこれ.

コンパイラの構成と最適化

コンパイラの構成と最適化

これも日本人が書いたコンパイラ本としては定番らしい.

話は戻って今回の本ですが,大きく「字句解析」「構文解析」「意味解析」「実行時環境」「仮想計算機とコード生成」の章がある. lexとyaccを実際に使いながら簡単な字句解析や構文解析,意味解析などを学び,ミニ言語をつくったりする. 教科書として書かれているので,大学の講義レベルで,それぞれの章のテーマについて基本的な説明から始まり,演習問題とその解答もあって勉強になる. 以下,簡単な章の内容の紹介です.

字句解析

まず字句解析については,lexを使いながら,簡単な字句解析やC言語のソースにたいして,予約語,識別子の認識やクロスリファレンサをつくることが学べる. オートマトンや状態遷移図についても書かれている.

構文解析

いくつかの上向き構文解析,下向き構文解析などについて書かれている.四則演算やミニ言語の開発が学べる.

意味解析

トークンの並びが文法に合っていても,例えばC言語では,宣言された変数でなければ使用することができないなど,コンパイラはそれを発見しなければならない. このようなチェック処理が意味解析と呼ばれる. 例えば,どのような変数が存在するのかなどの管理を行なう入れ子型の静的スコープを扱った記号表の実装が学べる.

実行時環境

実行時のメモリ管理の仕方について書かれている.特に活性レコードと呼ばれる,関数呼び出しに対するメモリ割り当てられるメモリ領域について説明されている.

仮想計算機とコード生成

PL/0言語を用いて仮想計算機のためのコード生成について学べる.

以上です.次は,

言語実装パターン ―コンパイラ技術によるテキスト処理から言語実装まで

言語実装パターン ―コンパイラ技術によるテキスト処理から言語実装まで

理論よりも実践的に書かれているらしい,この辺を読もうかなと思っている.