Meguro.es #26
https://gyazo.com/710b423b1dc917e6caf59fc69ccc4dff
https://meguroes.connpass.com/event/305991/
ECMAScript仕様の読み方ガイド 〜比較演算子編〜
syumai
ECMAScript仕様の読み方ガイド 〜比較演算子編〜 - Speaker Deck
仕様書はどこにある?
TC39
ECMA-262は毎年版更新される
最新はEcmaScript 2023
比較演算子を読もう
Relational Operators
文法
斜体文字は非終端記号
:は定義
追っておくと終端記号が見えてくる
セマンティクス
どんな意味があるのか?
リンクで飛べるようになってる
ランタイムのセマンティクスを読む
アルゴリムステップを読んでいく
IsLessThan
Abstract Operation
booleanかundefinedを返す
Syntax-Directeved Operation
モノレポツールに頼らないモノレポ環境構築
sadnessOjisan
何を解決するものなのか
1つのレポジトリにまとめられている
micro frontend / service 間のモジュール共有ができる
packageの管理ができる
lerna、nx、turborepo
後発のツールは何を解決したか
並列実行のアイドル時間管理
ビルドキャッシュ
標準以外の機能を使いたくない
モノレポはビルドの中心
メンテナンスされなくなるライブラリに任せるのは怖い
パッケージマネージャの組み込み
npm workspace
yarn workspace
pnpm
workspace.yml
ビルドの最小化
コンテナに固めてdistrolessに移し替えてデプロイ
yarn workspace focus
pnpm i --filter
共有ライブラリのmainは何を設定するか
事前にビルドしたindex.jsがよいのでは
コストがかかる?
規模が大きくなると時間がかかってしまう
モノレポツールのキャッシュがそれを改善する
tsconfigを分割してインクリメンタルビルド
静的解析でもキャッシュがある
モノレポツールにしかできないことは?
ビルドがTypeScriptとバンドラで別れてる場合のキャッシュ再利用
いつ使うべき?
早くしないといけないことってあるのかな
パッケージマネージャでいいんじゃない
導入は慎重になろう
Web Components元年はくるのか
araya
おさらい
再利用可能マークアップ
templateで定義
slotは上書きできる
独自HTMLの定義
HTMLElement
customElement
shadow DOMでのカプセル化
HTTP Archiveで調査した使用率
徐々に増えてきている
何が足りてなかったか
SSR
Declarative Shadow DOMの浸透
クライアントサイドルーター
@lit-labs/router
Navigation API
バンドル
web bundle
事実無くなった技術
Import attributes
Chrome、Safariが採用
Declative UI
About Static Hermes
Naturalclar
Hermes Engineとは
JavaScript Engine
Meta社開発
React Nativeで使われている
何故作ったのか
スマートフォンは端末によってはスペックが違う
TTI、アプリサイズ、メモリの削減
従来のJSエンジンの問題点
JITによる効率化で時間かかる
ユーザーの実行環境スペックに依存する
アプリ起動時にJITの恩恵が得られない
Hermesはどう改善している?
アプリに渡る前にバンドル・パーサーで変換、バイトコードの作成するビルドを実行
JITの読み込みが不要になる
JIT Optimizationの恩恵が得られない
SSA iR
コンパイラによる中間表現のひとつ
Static Hermes
型付きのJSをビルド時にNativeCodeに変換する
sound typesで書かれているJSが必要
指数的バックトラックを回避するためのV8の試験的な正規表現エンジン
SosukeSuzuki
バックトラック
有限オートマトンは後方マッチなどができない
複数あるのを試して正しいのとマッチするのを見つける
指数的の問題
入力の文字の長さで指数的な数になってしまう
今のv8で起きてしまう問題
これを解決するための正規表現エンジン
バックトラックしないアルゴリズム
後方参照や先読み後読みを含まない
(概念的に)並列で試す
素のエンジンよりは遅い
プロトタイプが汚染されたヨ〜😭これからどうなっちゃうの!?
かるかん
当たり前だけど汚染は怖いよね
振る舞いが不可能になる、安全性の問題
サプライチェーン攻撃
3rd Partyは広告以外ある
Zone.jsのグローバル汚染
対策:realmを作る
Worker
非同期前提
iframe
CSP
Object.freeze()を使う
すでに汚染されていた場合はどうする?
Secure ECMAScript
厳格にすると使える仕様が小さくなっていく
mutable primordials
3つに分割されてる
ShadowRealm
realmを独立させる
Compartment
仮想環境を作れる
モジュールを第一級にいじれる用にする方向に
Hardened JavaScript
第74回 正規表現の脆弱性「ReDoS」徹底解説 ~原理と対策から、Perlでの最適化まで(1) | gihyo.jp
ReDosが発生してしまう
Operator Overloading is Hard
Jxck
Decimal
こういうのをエンジンで実装するのは大変
リテラルはいいけどオペレーターをオーバーロードするのは難しいよ
Decimal.add, Decimal.multiply
オブジェクトとメソッド化になっていきそう
演算子(===)
Record & Tuple
実は抜け道がある
オブジェクトとオブジェクトを渡したらアドレスとって終わりだった
オブジェクトをベースに比較することになったら
値もみながら分岐で比較するオーバーヘッドがかかる