今度は銀座で会長が遅刻してくる回。
Node v8 by abouthiroppy
Node v8
- 新たなLTSバージョン
- 高速化がメインのアップデート
- WebAssemblyがデフォルトで有効に
- TURBOFUN
- https://github.com/v8/v8/wiki/TurboFan
- V8に最適化されたJITコンパイラ
- ES2015+なコードにも対応できるように
- 従来のCrankshaftではそこが難しかった
- IGNITION
- インタプリタ
- V8のJITの非効率だった部分を、予め変換することで解消
- リリースは05/30
おすすめアップデート内容
- N-API
- ABI互換性の保証
- N-APIに対応してればバージョンが変わっても再コンパイルなしで使える
- 対応してれば、バージョンが変わると動かない・・V8以外で動かない・・とかがなくなる
- `node-sass` / `canvas` / `node-sqlite3`とか
- `fs`で`file://`読めるように
- `whatwg-url`
- さよなら`node --debug`
- `Promise`内のエラーのStackTraceが改善
- `util.promisify()`
- Shared memory and atomics 以外のES2017が使える
- etc...
細かすぎてメモ取ってられないので、気になる人はリリースノートをどうぞ・・!
[WIP] 8.0.0 Release Proposal by jasnell · Pull Request #12220 · nodejs/node · GitHub
Introduction to Rust by Akito0107
Rust
- The Rust Programming Language
- 2015年10月にv1.0
- マルチパラダイムの言語
- System / Networkプログラミングに強い
- LLVM!WebAssembly!
- 文法がモダンとかもあるけどもそれよりもメモリ管理が賢い
- 所有権という概念
メモリ管理について
- StackとHeap
- Stack
- スコープ内で
- 使ってるものを詰んでいく
- Heap
- Stackより遅い
- 解放しないとだめ
- 使いまわされるものに
- 今まで
- C言語では`malloc() / free()`で手動でやってた <- 人類には無理
- そこでGCを採用した言語が出てきた <- マシンが重い
- Rustはその両者のいいとこどりを
Rustのメモリ管理
- GCはない
- 所有権(Ownership)
- 所有権に違反したコードは、コンパイルが通らない
- `=`は代入というより、所有権の委譲
- `let foo = ...;`したものを、`&foo`とすると参照・借用できる
- Readは何回でもWriteは1回だけ
Rustの何がいいの
- 所有権によるメモリ管理の安全性
- 並列処理でも
- コンパイルできた = メモリ安全なコード
- パターンマッチやエラー処理の記述も洗練されてて嬉しい
Rustを何に使おうか
- CPU Intensiveな処理
- 高スループットを求められるミドルウェア
- メディアのエンコードとか
- SSRとか
- URLに画像の情報を含めて、imageMagickで変換して返すやつ書いてみた
- EventLoopでやるパターンと、EventLoop + MultiThreadのパターン
- 前者は同時接続数が増えると、徐々にパフォーマンスが落ちていった
- これからはhttpサーバー実装を書き直すところからやっていこうかと
Cycle.js by wakasmha
資料は見つけたら
リクルートのブログでRxのこと書いてた人。
Cycle.jsとは
- GitHub - cyclejs/cyclejs: A functional and reactive JavaScript framework for predictable code
- Observable + VirtualDOM = Cycle.js
- `rxjs`ではなく`xstream`という軽量版でも
- VDOM実装は`hyperscript`
- GitHub - snabbdom/snabbdom: A virtual DOM library with focus on simplicity, modularity, powerful features and performance.
コードの特徴
- `main()`と`driver()`という区別に分ける
- `main()`の範囲ではObservableを使ったStateの管理を
- `driver()`の範囲ではそれ以外の処理を(描画・API・・etc)
- この2つが流れるサイクルでやっていくからCycle.js
初めてのOSS初めてのNode.js contribute by chiiia12
OSSの魅力
- 何かあったら自分でPull Requestできる
- やってみた
- 1回目はdup
- 2回目はそもそも論になって消失
- 3回目にやっとマージされた
学び
- PullRequestに対する抵抗がなくなった
- 有名な人にレビューしてもらえる!
- レビューが勉強になる
- GitHubにも詳しくなる
- `Land`の意味を知る
何から始めればいいか
- テスト
- 表示崩れ
- チュートリアルを実際に動かしてみて気付いたこと
v8のインタープリタについて by brn0227
資料は見つけたら
Ignition interpreter
- V8にはインタープリターがなかった
- 特定のケースでコードサイズがデカくて辛い
- 今まで
- JS
- AST
- FullCodegen
- これから
- JS
- AST
- Ignition <- new!
Ignitionの中身
- Bytecode generator
- Bytecode execution
- IgnitionはASTをBytecodeに変換して
- そのBytecodeをブラウザはV8経由で実行する
Turbofan
- InlineCaching
- 今までよりオーバーヘッドが減ったらしい
Slack CodeGolf by darai0512
資料は見つけたら
- Slackでコードゴルフする話
- 他人と競える順位だけわかる
- Slack <-> Heroku <-> Docker
- 外部コマンドでチートすると却下するとか
自分の発表の後でわたわたしててあんまりメモれんかった・・。