Node学園 16時限目 ES2015発行記念 - connpass に参加してきたメモ


Run Through ES6 - @teppeis

スライド: Run through ES6

  • ES6 総復習
  • ES6 or ES2015 ? 〜WEB+DB PRESS Vol.87 ES6特集に寄せて〜 | Cybozu Inside Out | サイボウズエンジニアのブログ
  • ECMAScript
    • Ecmaで策定されてる仕様
  • ES6
    • ES3から16年、ES5から6年
  • 特徴
    • モダンなシンタックス
    • 大規模開発
    • 後方互換性が高い
    • 今すぐ動かせる
  • ES6とES2015
    • 一年ごとにリリースしていきたいよね
  • ES6 Features
    • 新しいシンタックス
    • 新しいグローバルオブジェクト
    • 既存のオブジェクトの拡張
  • 新しいシンタックス
    • 色々
    • Class
      • Subclassing
    • Module
      • CommonJSとかは関数で同期的に読み込む
      • 宣言的(静的)に読み込む
      • パスの解決方法についてなどは定義されてない
      • 構文が決まってる
    • Arrow Function
      • thisの解決方法が違う
      • Lexical this
    • Enhanced Object Literal
      • メソッドのショートハンド
      • Computed Properties
      • Method Definition
    • let
      • ブロックスコープ
      • forループの初期化子にも使える
    • const
      • 定数宣言
    • Default パラメータ
    • Rest パラメータ
    • Spread Operator
    • Destructuring
      • 分割代入とか言われてたもの
    • Iterator
      • next()というメソッドを呼ぶと次へ進む
    • Generator
    • Template Strings
  • New Global Object
    • Promise
    • Map/Set
    • WeakMap/WeakSet
    • Typed Arrays
      • WebGL
    • Symbol
      • ユニークなプリミティブな値
      • Well-Known Symbol
    • Proxy
    • Reflect
  • 既存クラスの拡張
    • Object
    • Array
    • Unicode
      • サロゲートペアの扱い
    • String
    • Number
      • SafeIntegerの扱い
      • Number.isNaNでまともに
    • Math
      • 乗算便利
  • Tail Call optimization

ESDoc by @h13i32maru

スライド: ESDoc - ES6時代のドキュメンテーションツール // Speaker Deck

  • ESDoc - A Documentation Generator For JavaScript(ES6)
  • ES6の開発環境
  • コード
    • ES6 + Babel
  • テスト
    • Mocha + power-assert
  • ドキュメント
    • JSDoc
  • JSDocへの不満
  • JSDoc -> ESDoc
    • ES6に対応
    • React-JSXにも対応
    • パーサにeslint/espreeを使ってる
  • ESDocのゴール
    • ソースコードを見なくてもソフトウェアを使うことができるドキュメントを生成すること
  • ドキュメントとの性質
    • 継続性
      • 継続的に使える
    • 実用性
      • 読むだけで使える
    • 網羅性
      • Aというメソッドについて書いてあっても、Bというメソッドについて書いてないと使い物にならない。なので網羅して表示する
    • 関連性
      • 関連するものを一緒に表示してあげる
    • 検索性
      • 検索出来るドキュメント
  • ESDocでの実現方法
    • 継続性
      • カバレッジ
      • ドキュメントのカバレッジを表示している
    • 実用性
      • 詳細な情報
      • 色々な情報を出す
      • ES6のimportのパス表示
    • 網羅性
      • 静的解析
      • タグを書かれなくてもドキュメントを生成
      • ES6のクラス、デフォルト引数などから型の推測をしてる
    • 関連性
      • テスト
      • ドキュメント <-> テスト をリンクしてる
      • APIのドキュメントの方にテストのdescriptionを表示する
    • 検索性
      • 検索出来るドキュメント
      • ファイル名、クラス名、メソッド名、プロパティ名、テスト名を検索できる
      • importのパスなどを出す
  • 改善が必要なところ
    • ドキュメントのビルド時間がかかる
    • まだバグがある
    • ホスティングする場所がない

「StrongScript + SoundScript」 by @yosuke_furukawa

スライド: StrongMode And SoundScript // Speaker Deck

  • "use strong"
    • Strong mode
  • Experiments with Strengthening JavaScript   |   Chrome V8   |   Google Developers
  • varを使うと怒られる
    • 代わりにletを使え
  • undefinedへの代入を制限
  • オブジェクトのプロパティの形を変更するのを制限
  • Optimizer Killer
    • Hidden classを壊すやつなどを防止する
    • argumentsそのものを使うとOptimizerを壊す
    • arguments[0]などは問題ない
  • Experimental
  • SoundScript
    • TypeScriptライクっぽい型記法
    • 最適化のための型
  • まとめ
    • StrongModeはより厳格なモード
    • 最適化にやさしい
    • SoundScriptはTypeScriptライクな型記法

ファイルDB"NeDB"のススメ by @moomooya

スライド: ファイルDB"NeDB"のススメ

  • ちょっとしたものを作るときに使えるDB
  • セットアップが不要でnpm installするだけで使える
  • louischatriot/nedb
    • Node embedded database
  • ファイル名を指定してnewするだけ
  • 使い方(find)
    • find+正規表現などで検索できる
    • メソッドチェーンで条件を色々できr
    • MongoDBっぽいAPI
  • update, remove などもMongoDBと同じAPI
  • MongoDB APIのsubset
  • MongoDBへ移るのが簡単

continuation.jsの紹介 by @dai_shi

スライド: http://dai-shi.github.io/continuation.js/tng16/tng16_tailcalls.html

  • 末尾呼び出し最適化(Tail Calls)
  • 実装してるブラウザがまだない
  • Direct Recursion
  • Mutual Recursion
    • 末尾再帰を相互にやるパターン
  • dai-shi/continuation.js
    • EsprimaでASTにしてCPS変換する
  • ベストエフォートでCPS変換する仕組み

Latest ES6 work on Webkit by @Constellation

  • WebkitのJavaScriptエンジン
  • Safari9
    • Safari 9.0
    • ES6の機能が色々
    • リストに乗ってない
  • Iterator & for-of
  • destructuringなどを実装してる
  • Default initializer の assignなどのサポート
  • Map, Set, WeakMp
    • 中途半端な時期に実装されたものがあったけど、今は最新仕様にアップデートされた
  • 今やってる
    • Arrow Function
      • 今日landした
      • thisのbindingを今やってる
    • Block scoped variable(let,const)
      • 今最終状態
    • Default parametes
      • Block Scopeのサポートがまだなので
      • TDZがまだ対応してないので、デフォルトパラメータ
  • JSCの中
    • JSCの中のビルドイン関数がJSで書かれてる(一部)
    • forEachとかsortなど
    • 特権的なコード
      • V8は%
      • JSCは@
    • JavaScriptで書くとインライン化ができる
    • Iteratorは毎回オブジェクトを返す
      • 毎回オブジェクトを作ったらコスト高い
      • コードを事前に見て、必要なオブジェクトをスタックに展開しておく最適化

どうやってECMAScript 6を学び始めるか - azu

スライド: どうやってECMAScript 6を学び始めるか

  • ES6の前にES5大丈夫?
  • ES6は幅広い
  • どこから学ぶべきかについて簡単にまとめる
  • ES6の次はどこを見ればいいのかについて

などについて簡単にまとめたものをLTしました。