{"id":16306192,"url":"https://github.com/gfx/jsx-hacking-guide","last_synced_at":"2025-06-12T14:03:41.245Z","repository":{"id":10331087,"uuid":"12462005","full_name":"gfx/JSX-Hacking-Guide","owner":"gfx","description":"Memories of a possible future...","archived":false,"fork":false,"pushed_at":"2013-10-07T13:53:19.000Z","size":288,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-05T21:15:52.653Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gfx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-08-29T14:14:16.000Z","updated_at":"2015-10-26T02:48:26.000Z","dependencies_parsed_at":"2022-08-31T06:23:46.791Z","dependency_job_id":null,"html_url":"https://github.com/gfx/JSX-Hacking-Guide","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gfx/JSX-Hacking-Guide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gfx%2FJSX-Hacking-Guide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gfx%2FJSX-Hacking-Guide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gfx%2FJSX-Hacking-Guide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gfx%2FJSX-Hacking-Guide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gfx","download_url":"https://codeload.github.com/gfx/JSX-Hacking-Guide/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gfx%2FJSX-Hacking-Guide/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259479469,"owners_count":22864354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T21:09:54.523Z","updated_at":"2025-06-12T14:03:41.203Z","avatar_url":"https://github.com/gfx.png","language":null,"readme":"# JSXソースコード完全解説\n\n## Part 1. JSXの設計 (30%)\n\n### JSXの誕生\n\n- JavaScriptの発展\n- altJSの誕生\n- JSXの設計思想\n- JSXプログラムを実行する\n- セルフホスティング\n\n## インストール\n\n- JSXコンパイラの入手\n- JSXプログラムの実行\n\n### 基本的な構文\n\n- クラスとメンバー\n- 式と文\n- モジュール\n- ジェネレータ\n- JSXdoc\n\n### 総称的プログラミング\n\n- 型とオブジェクト\n- クラステンプレート\n- 関数テンプレート\n- ダックタイピング (型消去)\n\n### 開発とデバッグ\n\n- ユニットテスト\n- デバッグ機能\n- ソースマップ\n- プロファイラ\n- リリースビルド\n- ソースコード圧縮\n- grunt-jsx\n\n## Part 2. JSXの実装 (70%)\n\n### Part 2-1. コンパイラの実装 (25%)\n\n#### コンパイラの構造\n\n- コンパイラの概要\n- コンパイラの動作環境\n- 動作プラットフォームの抽象化\n\n#### 構文解析\n\n- parser.jsxの概要\n- 字句解析器\n- 再帰下降構文解析\n- 抽象構文木の構造\n- クラスとメンバー\n- 文と式\n\n#### 意味解析\n\n- analysis.jsxの概要\n- 型の解決\n- 型推論\n- テンプレートの実体化\n\n#### コード変換\n\n- 最適化\n- 識別子の圧縮\n\n#### コード生成\n\n- jsemitter.jsxの概要\n- クラス定義の生成\n- 式の生成\n- 文の生成\n- 識別子のマッピング\n\n#### JavaScriptランタイム\n\n- プロトタイプによる継承の実現\n- エントリポイントの呼び出し\n- テストケースの呼び出し\n\n### Part 2-2. 最適化 (30%)\n\n#### オプティマイザの構造\n\n- オプティマイザと最適化コマンド\n- リンク時最適化 (lto)\n\t- 静的リンクと動的リンク\n- 最適化ログ\n\n#### インライン展開 (inline)\n\n- 最適化戦略\n- 呼び出し先の決定 (determine-callee)\n- 展開条件\n- inlineとreturn-if\n\n#### 定数畳み込み (fold-const)\n\n- 定数伝搬と定数畳み込み\n- 式の畳み込み\n- 数式と等価判定\n- 関数呼び出し\n\n#### デッドコード削除 (dce)\n\n- デッドコード削除とは\n- 副作用のない式\n- 未使用変数\n- 無効な代入\n- 分岐先の確定\n\n#### 非BOX化 (unbox)\n\n- 非BOX化とは\n- 非BOX化条件\n- ローカル変数の非BOX化\n\n#### その他の最適化\n\n- no-assert/no-log/no-debug\n- 局所共通部分式除去 (lcse)\n- Array最適化 (array-length)\n- 非クラス化 (unclassify/staticize)\n- 末尾再帰の最適化 (tail-rec)\n\n#### 最適化の効果\n\n- releaseオプション\n- 個別の最適化コマンド\n\n### Part 2-3. CPS変換 (15%)\n\n#### CPS変換とは\n\n- なぜCPS変換が必要なのか\n- try-catchとCPS変換\n\n#### ジェネレータ\n\n- ジェネレータとは\n- JavaScript 1.8のジェネレータ\n- ECMAScript6のジェネレータ\n- JSXのジェネレータ\n- 型の扱いと糖衣構文\n\n#### 非同期処理\n\n- コールバックの問題点\n- 非同期処理とコルーチン\n- C#のasync/await\n- プロミスベースのQ\n- ES6の非同期処理\n\n#### CPS変換の実装戦略\n\n- C#の戦略\n- google-traceurの戦略\n- JSXの戦略(1. ナイーブな実装)\n- JSXの戦略(2. より高速な実装)\n\n#### トランスフォーマーの構造\n\n- 式の変換\n- 文の変換\n- コードの合成\n- Returnの変換\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgfx%2Fjsx-hacking-guide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgfx%2Fjsx-hacking-guide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgfx%2Fjsx-hacking-guide/lists"}