🧊

Node学園 25時限目 に行ってきたメモ #tng25

今度は銀座で会長が遅刻してくる回。

Node学園 25時限目 - connpass

Node v8 by abouthiroppy

abouthiroppy/node8

Node v8

おすすめアップデート内容

  • 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

Node学園 25限 Introduction to Rust // Speaker Deck

Rust

メモリ管理について

  • StackとHeap
  • Stack
    • スコープ内で
    • 使ってるものを詰んでいく
  • Heap
    • Stackより遅い
    • 解放しないとだめ
    • 使いまわされるものに
  • 今まで
    • C言語では`malloc() / free()`で手動でやってた <- 人類には無理
    • そこでGCを採用した言語が出てきた <- マシンが重い
  • Rustはその両者のいいとこどりを

Rustのメモリ管理

  • GCはない
  • 所有権(Ownership)
  • `=`は代入というより、所有権の委譲
  • `let foo = ...;`したものを、`&foo`とすると参照・借用できる
    • Readは何回でもWriteは1回だけ

Rustの何がいいの

  • 所有権によるメモリ管理の安全性
    • 並列処理でも
  • コンパイルできた = メモリ安全なコード
  • パターンマッチやエラー処理の記述も洗練されてて嬉しい

Rustを何に使おうか

  • CPU Intensiveな処理
  • スループットを求められるミドルウェア
  • URLに画像の情報を含めて、imageMagickで変換して返すやつ書いてみた
    • EventLoopでやるパターンと、EventLoop + MultiThreadのパターン
    • 前者は同時接続数が増えると、徐々にパフォーマンスが落ちていった
  • これからはhttpサーバー実装を書き直すところからやっていこうかと

Cycle.js by wakasmha

資料は見つけたら

リクルートのブログでRxのこと書いてた人。

コードの特徴

  • `main()`と`driver()`という区別に分ける
    • `main()`の範囲ではObservableを使ったStateの管理を
    • `driver()`の範囲ではそれ以外の処理を(描画・API・・etc)
  • この2つが流れるサイクルでやっていくからCycle.js

初めてのOSS初めてのNode.js contribute by chiiia12

初めてのOSS初めてのNode.js Contribute#tng25 // Speaker Deck

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
  • 今までよりオーバーヘッドが減ったらしい

Hello, MobX! by leader22

Hello, MobX!

発表した!
やっぱスライドちょっと多かったなー。

Slack CodeGolf by darai0512

資料は見つけたら

  • Slackでコードゴルフする話
  • 他人と競える順位だけわかる
  • Slack <-> Heroku <-> Docker
  • 外部コマンドでチートすると却下するとか

自分の発表の後でわたわたしててあんまりメモれんかった・・。