{"id":35620880,"url":"https://github.com/es-meta/esmeta","last_synced_at":"2026-06-21T20:52:48.002Z","repository":{"id":39112675,"uuid":"444999054","full_name":"es-meta/esmeta","owner":"es-meta","description":"ECMAScript Specification (ECMA-262) Metalanguage","archived":false,"fork":false,"pushed_at":"2026-06-14T09:43:32.000Z","size":50943,"stargazers_count":260,"open_issues_count":8,"forks_count":25,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-06-14T10:04:55.252Z","etag":null,"topics":["ecmascript","javascript"],"latest_commit_sha":null,"homepage":"https://es-meta.github.io/playground/","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/es-meta.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-01-06T01:12:12.000Z","updated_at":"2026-06-12T04:25:20.000Z","dependencies_parsed_at":"2023-09-29T03:27:08.227Z","dependency_job_id":"aaf4bd30-2774-406f-8d23-e7eb13eb088d","html_url":"https://github.com/es-meta/esmeta","commit_stats":null,"previous_names":["es-meta/es-meta"],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/es-meta/esmeta","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/es-meta%2Fesmeta","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/es-meta%2Fesmeta/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/es-meta%2Fesmeta/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/es-meta%2Fesmeta/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/es-meta","download_url":"https://codeload.github.com/es-meta/esmeta/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/es-meta%2Fesmeta/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34625624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ecmascript","javascript"],"created_at":"2026-01-05T06:24:48.916Z","updated_at":"2026-06-21T20:52:47.996Z","avatar_url":"https://github.com/es-meta.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![test](https://github.com/es-meta/esmeta/actions/workflows/ci.yml/badge.svg)](https://github.com/es-meta/esmeta/actions)\n[![license](https://badgen.net/github/license/es-meta/esmeta)](https://github.com/es-meta/esmeta/blob/main/LICENSE.md)\n[![release](https://badgen.net/github/release/es-meta/esmeta)](https://github.com/es-meta/esmeta/releases)\n[![prs](https://badgen.net/github/prs/es-meta/esmeta)](https://github.com/es-meta/esmeta/pulls)\n[![slack](https://badgen.net/badge/slack/esmeta/blue)](https://esmeta.slack.com/)\n[![site](https://badgen.net/badge/site/jekyll/blue)](https://es-meta.github.io/)\n[![doc](https://badgen.net/badge/doc/scaladoc/blue)](https://es-meta.github.io/esmeta)\n\n# ESMeta\n**ESMeta** is an **E**CMAScript **S**pecification **Meta**language. This\nframework extracts a mechanized specification from a given version of\nECMAScript/JavaScript specification ([ECMA-262](https://tc39.es/ecma262/)) and\nautomatically generates language-based tools.\n\n## Table of Contents\n\n  * [Installation Guide](#installation-guide)\n    + [Download ESMeta](#download-esmeta)\n    + [Environment Setting](#environment-setting)\n    + [Installation of ESMeta using `sbt`](#installation-of-esmeta-using--sbt-)\n  * [Basic Commands](#basic-commands)\n    + [Parsing and Executing ECMAScript files](#parsing-and-executing-ecmascript-files)\n    + [Executing Test262 tests](#executing-test262-tests)\n  * [Supported Features](#supported-features)\n    + [Specification Exemplified with ECMA Visualizer](#specification-exemplified-with-ecma-visualizer)\n    + [Interactive Execution with ECMAScript Double Debugger](#interactive-execution-with-ecmascript-double-debugger)\n    + [Conformance Test Synthesizer from ECMA-262](#conformance-test-synthesizer-from-ecma-262)\n    + [Type Analysis on ECMA-262](#type-analysis-on-ecma-262)\n    + ~~[Meta-Level Static Analyzer for ECMAScript](#meta-level-static-analyzer-for-ecmascript)~~ (temporarily removed)\n  * [Academic Achievement](#academic-achievement)\n    + [Publications](#publications)\n    + [PLDI 2022 Tutorial](#pldi-2022-tutorial)\n    + [Communications of the ACM (CACM)](#communications-of-the-acm-cacm)\n\n\n## Installation Guide\n\nWe explain how to install ESMeta with the necessary environment settings from\nscratch. Our framework is developed in Scala, which works on JDK 17+. So before\ninstallation, please install [JDK\n17+](https://www.oracle.com/java/technologies/downloads/) and\n[sbt](https://www.scala-sbt.org/), an interactive build tool for Scala.\n\n\n### Download ESMeta\n```bash\n$ git clone https://github.com/es-meta/esmeta.git\n```\n\n### Environment Setting\nInsert the following commands to `~/.bashrc` (or `~/.zshrc`):\n```bash\n# for ESMeta\nexport ESMETA_HOME=\"\u003cpath to ESMeta\u003e\" # IMPORTANT!!!\nexport PATH=\"$ESMETA_HOME/bin:$PATH\" # for executables `esmeta` and etc.\nsource $ESMETA_HOME/.completion # for auto-completion\n```\nThe `\u003cpath to ESMeta\u003e` should be the absolute path of the ESMeta repository.\n\n\n### Installation of ESMeta using `sbt`\n\nPlease type the following command to 1) update the git submodules, 2) generate\nbinary file `bin/esmeta`, and 3) apply the `.completion` for auto-completion.\n\n```bash\n$ cd esmeta \u0026\u0026 git submodule update --init \u0026\u0026 sbt assembly \u0026\u0026 source .completion\n```\n\nIf you see the following message, ESMeta is successfully installed:\n```bash\n$ esmeta\n# Welcome to ESMeta v0.7.3 - ECMAScript Specification Metalanguage.\n# Please type `esmeta help` to see the help message.\n```\n\n\n## Basic Commands\n\nYou can run this framework with the following command:\n```bash\n$ esmeta \u003ccommand\u003e \u003coption\u003e* \u003cfilename\u003e*\n```\nIt supports the following commands:\n- `help` shows help messages.\n- `extract` extracts specification model from ECMA-262 (`ecma262/spec.html`).\n- `compile` compiles a specification to an IR program.\n- `build-cfg` builds a control-flow graph (CFG) from an IR program.\n- `tycheck` performs a type analysis of ECMA-262.\n- `parse` parses an ECMAScript file.\n- `eval` evaluates an ECMAScript file.\n- `web` starts a web server for an ECMAScript double debugger.\n- `test262-test` tests Test262 tests with harness files (default: tests/test262).\n- `inject` injects assertions to check final state of an ECMAScript file.\n- `mutate` mutates an ECMAScript program.\n- `analyze` analyzes an ECMAScript file using meta-level static analysis. (temporarily removed)\n- `dump-debugger` dumps the resources required by the standalone debugger. (for internal use)\n- `dump-visualizer` dumps the resources required by the visualizer. (for internal use)\n\nand global options:\n- `-silent` does not show final results.\n- `-error` shows error stack traces.\n- `-status` exits with status.\n- `-time` displays the duration time.\n- `-test262dir={string}` sets the directory of Test262 (default: `$ESMETA_HOME/tests/test262`).\n\nIf you want to see the detailed help messages and command-specific options,\nplease use the `help` command:\n```bash\n# show help messages for all commands\n$ esmeta help\n\n# show help messages for specific commands with more details\n$ esmeta help \u003ccommand\u003e\n```\n\nPlease use the `build-cfg` command to extract a mechanized specification as a\ncontrol-flow graph from ECMA-262:\n```bash\n$ esmeta build-cfg\n# ========================================\n#  extract phase\n# ----------------------------------------\n# ========================================\n#  compile phase\n# ----------------------------------------\n# ========================================\n#  build-cfg phase\n# ----------------------------------------\n# 0: def \u003cBUILTIN\u003e:INTRINSICS.SyntaxError(...): Unknown {\n#   ...\n# }\n# 1: def \u003cINTERNAL\u003e:BuiltinFunctionObject.Construct(...): Normal[Object] | Abrupt[throw] {\n#   ...\n# }\n# ...\n```\nThe `build-cfg` command consists of three phases:\n  1. The `extract` phase extracts specification model (`esmeta.spec.Spec`) from\n     ECMA-262 (`spec.html`).\n  2. The `compile` phase compiles it into a program (`esmeta.ir.Program`) in\n     **IRES**, an **I**ntermediate **R**epresentations for **E**CMAScript\n     **S**pecification.\n  3. The `build-cfg` phase builds a control-flow graph (`esmeta.cfg.CFG`) for a\n     given IRES program.\n\nYou can extract mechanized specifications from other versions of ECMA-262 with\nthe `-extract:target` option. Please enter any git tag/branch names or commit\nhash as an input of the option:\n```bash\n# extract a mechanized specification from the origin/main branch version of ECMA-262\n$ esmeta build-cfg -extract:target=origin/main\n\n# extract a mechanized specification from the 2c78e6f commit version of ECMA-262\n$ esmeta build-cfg -extract:target=2c78e6f\n```\n\n### Parsing and Executing ECMAScript files\n\nAfter extracting mechanized specifications from ECMA-262, you can parse or\nexecute ECMAScript/JavaScript programs. For example, consider the following\nexample JavaScript file:\n```js\n// example.js\nlet x; x ??= class {}; function* f() {}\n```\nYou can parse or execute it with `parse` and `eval` commands.\n```bash\n# parse example.js\n$ esmeta parse example.js\n\n# execute example.js\n$ esmeta eval example.js\n```\n\n### Executing Test262 tests\n\nESMeta supports the execution of [Test262](https://github.com/tc39/test262)\ntests to check the conformance between Test262 and ECMA-262.\n```bash\n# run all the applicable Test262 tests\n$ esmeta test262-test\n# ...\n# ========================================\n#  test262-test phase\n# ----------------------------------------\n# - harness                       :    96 tests are removed\n# ...\n# ----------------------------------------\n# - total: 31,537 available tests\n#   - normal: 31,537 tests\n#   - error: 0 tests\n# ----------------------------------------\n# ...\n```\nIf you want to execute specific Test262 files or directories, please list their\npaths as arguments:\n```bash\n# run Test262 tests in a given directory\n$ esmeta test262-test tests/test262/test/language/expressions/addition\n```\n\n\n## Supported Features\n\nESMeta supports other features utilizing mechanized specifications, including 1) exemplify specification with ECMA Visualizer, 2)\ninteractive execution of ECMAScript/JavaScript file with a double debugger, 3)\nconformance test synthesizer, 4) type analysis of ECMA-262, and 5) meta-level\nstatic analysis for ECMAScript/JavaScript files.  All of them utilize mechanized\nspecifications from ECMA-262. Thus, ESMeta always extracts mechanized\nspecifications as control-flow graphs before performing these features.\n\n### Specification Exemplified with ECMA Visualizer\n\n\u003e [!NOTE]\n\u003e\n\u003e **A short [introduction video](https://youtu.be/4XMjJPNmuBM) for ECMA Visualizer and Double Debugger is available.**\n\n\u003cimg width=\"1150\" alt=\"ecma-visualizer\" src=\"https://github.com/user-attachments/assets/733403f5-03cc-4465-a773-e57d46d35180\" /\u003e\n\n[**ECMA Visualizer**](https://chromewebstore.google.com/detail/nlfpedidieegejndiikebcgclhggaocd) is a Chrome Extension that helps users understand specifications by displaying rich information alongside the ecma-262 web documentation, collected through pre-fuzzing/measurement using ESMeta. This allows users to see helpful examples directly within the ecma-262 web documents. It provides the following features:\n\n- Viewing minimal JavaScript program that passes through specific algorithm steps or control flow branches (`ReturnIfAbrupt`, denoted as `?`) in the specification\n- Viewing conformance tests (from test262) that pass through selected steps\n- Filtering displayed JS code using callpath\n- One-click debugging capability to execute the displayed minimal JS code, resuming from the selected step\n\n### Interactive Execution with ECMAScript Double Debugger\n\n\u003e [!NOTE]\n\u003e\n\u003e **A short [introduction video](https://youtu.be/4XMjJPNmuBM) for ECMA Visualizer and Double Debugger is available.**\n\n**ECMAScript Double Debugger** extends the ECMAScript/JavaScript interpreter in\nESMeta to help you understand how a JavaScript Program runs according to\nECMA-262. Currently, it is in an **beta stage** and supports following features:\n\n- Step-by-step execution of ECMA-262 algorithms\n- Line-by-line execution of ECMAScript/JavaScript code\n- Breakpoints by abstract algorithm names in ECMA-262\n- Inspection of ECMA-262 internal states\n- Seeing JavaScript state from the refined ECMA-262 state\n- Step backward, or even trace back to the provenance of specification record\n\nYou can access the standalone debugger for the latest official release of specification directly at [es-meta.github.io/playground/](https://es-meta.github.io/playground/). Using this link gives you immediate access without having to install ESMeta, Scala, or any other dependencies on your system.\n\nIf needed, you can also set up and run the debugger locally with the following instructions:\n```bash\n# turn on server of the double debugger\n$ esmeta web\n\n# install and turn on the client-side application using NPM\n$ cd client \u0026\u0026 npm install \u0026\u0026 npm start\n```\n\n\u003cimg width=\"1150\" alt=\"debugger\" src=\"https://github.com/user-attachments/assets/6c5f29a3-6d8a-458d-a4ed-478bb00666d7\"\u003e\n\nWe will enhance it with the following features:\n- Add more debugger features:\n  - Record timestamps during execution for resume \u0026 suspend steps (especially for Generator).\n  - ...\n- Show the type of each variable using the type analysis result.\n- Live-edit of `ecma262/spec.html` in the specification viewer.\n\n### Conformance Test Synthesizer from ECMA-262\n\nESMeta supports the synthesis of JavaScript files as conformance tests. We\nintroduced the main concept of the test synthesis in the [ICSE 2021\npaper](https://doi.org/10.1109/ICSE43902.2021.00015) with a tool named\n[JEST](https://github.com/kaist-plrg/jest), a **J**avaScript **E**ngines and\n**S**pecification **T**ester. The test synthesis technique consists of two\nparts: 1) _program synthesis_ of JavaScript programs using **specification\ncoverage** and 2) _assertion injection_ based on the mechanized specification\nextract from ECMA-262.\n\n#### Synthesis of JavaScript Programs\n\nIf you want to synthesize JavaScript programs, please use the `fuzz` command:\n```bash\nesmeta fuzz -fuzz:log\n```\nIt basically uses the **node/branch coverage** in the mechanized specification\nto synthesize JavaScript programs. The `-fuzz:log` option dumps the synthesized\nJavaScript programs into the `logs/fuzz/fuzz-\u003cdate\u003e` directory with the detailed\ninformation of the synthesis process:\n\n* `seed`: seed of the random number generator\n* `node-coverage.json`: node coverage information\n* `branch-coverage.json`: branch coverage information\n* `constructor.json`: constructor information\n* `mutation-stat.tsv`: statistics of mutation methods\n* `selector-stat.tsv`: statistics of selector methods\n* `summary.tsv`: summary of the synthesis process for each logging interval\n* `target-conds.json`: target conditions for the synthesis\n* `unreach-funcs`: unreachable functions\n* `version`: ESMeta version information\n\nIn addition, you can use **feature-sensitive coverage**, which is introduced in\nthe [PLDI 2023 paper](https://doi.org/10.1145/3591240), with the following\noptions:\n\n* `-fuzz:k-fs=\u003cint\u003e`: the depth of features for feature-sensitive coverage\n* `-fuzz:cp`: use the call path for feature-sensitive coverage\n\nFor example, you can synthesize JavaScript programs with the 2-FCPS coverage\n(2-feature-sensitive coverage with call path) as follows:\n```bash\nesmeta fuzz -fuzz:log -fuzz:k-fs=2 -fuzz:cp\n```\n\n#### Assertion Injection\n\nYou can inject assertions into the synthesized JavaScript programs according to\nthe mechanized specification. If you want to inject assertions, please use the\n`inject` command:\n```bash\n# inject assertions based on the semantics described in ECMA-262\n$ esmeta inject example.js\n# ...\n# ========================================\n#  inject phase\n# ----------------------------------------\n# // [EXIT] normal\n# let x; x ??= class {}; function* f() {}\n#\n# $algo.set(f, \"GeneratorDeclaration[0,0].InstantiateGeneratorFunctionObject\")\n# $assert.sameValue(Object.getPrototypeOf(f), GeneratorFunction.prototype);\n# $assert.sameValue(Object.isExtensible(f), true);\n# ...\n```\nIt prints the assertion-injected JavaScript program without definitions of\nassertions. The comment `// [EXIT] normal` denotes that this program should\nnormally terminate. From the fourth line, injected assertions represent the\nexpected value stored in variables, objects, or even internal properties.\n\nIf you want to dump the assertion-injected code to a program, please use the\n`-inject:out` option. If you want to inject definitions of assertions as well,\nplease use the `-inject:defs` option:\n```bash\n$ esmeta inject example.js -silent -inject:defs -inject:out=test.js\n# - Dumped an assertion-injected ECMAScript program into test.js.\n```\n\n\n### Type Analysis on ECMA-262\n\nESMeta provides a type analysis on ECMA-262 to infer unknown types in the\nspecification. We introduced its main concept in the [ASE 2021\npaper](https://doi.org/10.1109/ASE51524.2021.9678781) with a tool names\n[JSTAR](https://github.com/kaist-plrg/jstar), a **J**avaScript **S**pecification\n**T**ype **A**nalyzer using **R**efinement. It analyzes types of mechanized\nspecification by performing type analysis of IRES. We utilized _condition-based\ntype refinement_ to prune out infeasible types in each branch for enhanced\nanalysis precision.\n\nIf you want to perform a type analysis of\n[ES2022](https://262.ecma-international.org/13.0/) (or ES13), the latest\nofficial version of ECMA-262, please type the following command:\n```bash\n$ esmeta tycheck\n# ...\n# ========================================\n#  tycheck phase\n# ----------------------------------------\n# - 1806 functions are initial targets.\n# - 2372 functions are analyzed in 32493 iterations.\n```\n\nYou can perform type analysis on other versions of ECMA-262 with the\n`-extract:target` option. Please enter any git tag/branch names or commit hash\nas an input of the option:\n```bash\n# analyze types for origin/main branch version of ECMA-262\n$ esmeta tycheck -extract:target=origin/main\n\n# analyze types for 2c78e6f commit version of ECMA-262\n$ esmeta tycheck -extract:target=2c78e6f\n```\n\n\n### ~~Meta-Level Static Analyzer for ECMAScript~~\n\n\u003e [!WARNING]\n\u003e\n\u003e The meta-level static analyzer is temporarily removed from the current version\n\u003e of ESMeta. We are working on the improvement of the meta-level static analyzer\n\u003e for ECMAScript/JavaScript programs. We will re-introduce this feature in the\n\u003e future version of ESMeta.\n\nESMeta also supports a meta-level static analyzer for ECMAScript/JavaScript\nprograms based on mechanized specifications extracted from ECMA-262. A\nmechanized specification is an interpreter that can parse and execute JavaScript\nprograms. We introduced a way to indirectly analyze an ECMAScript/JavaScript\nprogram by analyzing its interpreter with a restriction with the given program.\nWe call it _meta-level static analysis_ and presented this technique at\n[ESEC/FSE 2022](https://dl.acm.org/doi/10.1145/3540250.3549097).\n\nIf you want to analyze JavaScript program using a meta-level static analysis,\nplease use the `analyze` command:\n```bash\n$ esmeta analyze example.js\n# ...\n# ========================================\n#  analyze phase\n# ----------------------------------------\n# - 108 functions are analyzed in 1688 iterations.\n```\n\nESMeta supports an interactive Read–eval–print loop (REPL) for the analysis with\nthe `-analyze:repl` option:\n```bash\n$ esmeta analyze example.js -analyze:repl\n# ========================================\n#  analyze phase\n# ----------------------------------------\n#\n# command list:\n# - help                     Show help message.\n# ...\n#\n# [1] RunJobs[42]:Call[339] -\u003e {\n#   ...\n# }\n\nanalyzer\u003e continue\n# - Static analysis finished. (# iter: 1688)\n\nanalyzer\u003e print -expr @REALM.GlobalObject.SubMap.f.Value.SubMap.name.Value\n# \"f\"\n\nanalyzer\u003e exit\n```\nIt showed that the property `name` of the global variable `f` points to a single\nstring `\"f\"`.\n\nIn the future version of ESMeta, we will add more kind documentation for this\nanalyzer REPL.\n\n## Academic Achievement\n\n### Publications\n\n- **[FSE 2025 Demo] JSSpecVis: A JavaScript Language Specification Visualization Tool**\n  ([old repo](https://github.com/ku-plrg/js-spec-vis))\n- **[PLDI 2023] [Feature-Sensitive Coverage for Conformance Testing of Programming Language Implementations](https://doi.org/10.1145/3591240)**\n  ([old repo](https://github.com/jestfs/jestfs))\n- **[ESEC/FSE 2022] [Automatically Deriving JavaScript Static Analyzers from Specifications using Meta-Level Static Analysis](https://doi.org/10.1145/3540250.3549097)**\n  ([old repo](https://github.com/kaist-plrg/jsaver))\n- **[ASE 2021] [JSTAR: JavaScript Specification Type Analyzer using Refinement](https://doi.org/10.1109/ASE51524.2021.9678781)**\n  ([old repo](https://github.com/kaist-plrg/jstar))\n- **[ICSE 2021] [JEST: N+1-version Differential Testing of Both JavaScript Engines](https://doi.org/10.1109/ICSE43902.2021.00015)**\n  ([old repo](https://github.com/kaist-plrg/jest))\n- **[ASE 2020] [JISET: JavaScript IR-based Semantics Extraction Toolchain](https://doi.org/10.1145/3324884.3416632)**\n  ([old repo](https://github.com/kaist-plrg/jiset))\n\n### PLDI 2022 Tutorial\n\n**Title**: **[Filling the gap between the JavaScript language specification and tools using the JISET family](https://pldi22.sigplan.org/details/pldi-2022-tutorials/1/Filling-the-gap-between-the-JavaScript-language-specification-and-tools-using-the-JIS)**\n- Presenters: [Jihyeok Park](https://park.jihyeok.site/), [Seungmin An](https://github.com/h2oche), and [Sukyoung Ryu](https://plrg.kaist.ac.kr/ryu)\n- [Session 1](https://plrg.korea.ac.kr/assets/data/slides/2022/pldi22-tutorial-1.pdf)\n- [Session 2-1](https://plrg.korea.ac.kr/assets/data/slides/2022/pldi22-tutorial-2.pdf)\n- [Session 2-2](https://plrg.korea.ac.kr/assets/data/slides/2022/pldi22-tutorial-3.pdf)\n\n### Communications of the ACM (CACM)\n\n- **Title**: **[JavaScript Language Design and Implementation in Tandem](https://cacm.acm.org/research/javascript-language-design-and-implementation-in-tandem/)**\n  - DOI: [10.1145/3624723](https://doi.org/10.1145/3624723)\n\nSee the following video for more details:\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"http://img.youtube.com/vi/JGxc-KIUnQY/maxresdefault.jpg\" width=\"500\"\u003e\u003c/p\u003e\n\n- link: [https://youtu.be/JGxc-KIUnQY](https://youtu.be/JGxc-KIUnQY)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fes-meta%2Fesmeta","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fes-meta%2Fesmeta","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fes-meta%2Fesmeta/lists"}