Upgrade to Pro — share decks privately, control downloads, hide ads and more …

🇺🇸 iJS New York 2026 (Sept 30 ⋅ 3:30 pm)

🇺🇸 iJS New York 2026 (Sept 30 ⋅ 3:30 pm)

Compilers, User Interfaces & the Rest of Us

Compilers have long been seen as one of the most complex topics in computer science. Today, web frameworks are evolving from runtime libraries into optimizing compilers, reshaping how we build user interfaces. Different topics in front-end development—e.g., reactive programming—are now entering this era, fueled by insights from static analysis.

This talk will explore how modern UI compilers are redefining performance and developer experience. We’ll discuss how compilers are designed, including various open-source and enterprise solutions, and the growing role of compilers in automating tasks.

By the end of the session, you'll likely be optimistic about a future where compilers understand our entire codebase and offload much of our mental burden.

Avatar for Matheus Albuquerque

Matheus Albuquerque PRO

September 30, 2026

More Decks by Matheus Albuquerque

Other Decks in Programming

Transcript

  1. Matheus Albuquerque ↝ 👨💻 STAFF SWE @ MEDALLIA ↝ ⚛

    CHAIR @ REACT SUMMIT NYC ↝ ⚡ GOOGLE DEVELOPER EXPERT ↝ 🌐 YTHECOMBINATOR
  2. COMPILERS &… ME: JAVASCRIPT! YOUR MACRO YOUR CODE unless (user.isLoggedIn)

    { macro unless { rule { ($condition) { $body } } } if (!$condition) { $body } } > = . . . . . } . showLogin(); {
  3. COMPILERS &… ME: JAVASCRIPT! YOUR MACRO YOUR CODE unless (user.isLoggedIn)

    { macro unless { showLogin(); rule { ($condition) { $body } if (!$condition) { $body } } > . }
  4. COMPILERS &… ME: JAVASCRIPT! YOUR MACRO unless (user.isLoggedIn) { YOUR

    RESULT if (!user.isLoggedIn) { showLogin(); showLogin(); } }
  5. COMPILERS &… ME: JAVASCRIPT! ↝ LANGUAGE EXPERIMENTS COULD HAPPEN THROUGH

    COMPOSABLE USER-LAND SYNTAX EXTENSIONS. ↝ INDEPENDENTLY AUTHORED SYNTAX TRANSFORMATIONS COULD PARTICIPATE IN THE SAME COMPILATION PIPELINE. ↝ THIS GAVE US A PLAYGROUND WHERE SYNTAX IDEAS COULD EXIST AS LIBRARIES BEFORE/WITHOUT BECOMING PART OF ECMASCRIPT.
  6. COMPILERS &… ME: JAVASCRIPT! ↝ IN RETROSPECT, NOT EVERY JAVASCRIPT

    FEATURE BECAME A MACRO… ↝ OUR ECOSYSTEM LARGELY MOVED TOWARD PARSERS, BABEL PLUGINS, TRANSFORMS, CODEMODS, AND SPECIALIZED COMPILERS. ↝ BUT THE UNDERLYING IDEA SURVIVED: COMPILE-TIME EXTENSIBILITY BECAME REGULAR JAVASCRIPT ENGINEERING.
  7. #insight 💡 JavaScript source doesn't have to be the program

    that executes. It can be input to another program that understands and rewrites it.
  8. “So here’s my advice for anyone who wants to make

    a dent in the future of web development: time to learn how compilers work.” Compilers are the New Frameworks • Tom Dale, 2017
  9. “Reactive systems have existed even in this space for years.

    In fact, reactivity was seen as a bad thing for a while with the rise of the popularity of React. The thing that has made reactive programming interesting again are compilers.” Marko: Compiling Fine-Grained Reactivity • Ryan Carniato, 2022
  10. “Static analysis and compilation let us take what we know

    of your code's structure and optimize the creation paths as we already know what you are trying to create.” Marko: Compiling Fine-Grained Reactivity • Ryan Carniato, 2022
  11. COMPILERS & STATIC ANALYSIS… ↝ LINTERS: ESLint (2013), TSLint (2015),

    Biome (2023), Oxlint (2023)… ↝ FORMATTERS: Prettier (2017), dprint (2020), Biome (2023)… ↝ BUNDLERS: Webpack (2012), Rollup (2015), Vite (2020), esbuild (2020), Rspack (2022), Rolldown (2023)…
  12. COMPILERS & STATIC ANALYSIS… ↝ TRANSPILERS: Babel (2014), SWC (2020)…

    ↝ TYPE CHECKERS: TypeScript (2012), Flow (2014)… ↝ MINIFIERS: UglifyJS (2010), Terser (2018)… ↝ CSS PROCESSING: PostCSS (2013), CSSO (2015), cssnano (2015), LightningCSS (2022)…
  13. MY GOALS FOR TODAY… Open your mind to—or even Bridge

    the gap between empower you with—tools to foundational CS concepts tackle a variety of complex and practical front-end challenges. development.
  14. #definition 🧐 jscodeshift is a tool that runs a transformation

    script fi over one or more JavaScript or TypeScript les.
  15. JSCODESHIFT: HELLO WORLD export default function transformer(file: FileInfo, api: API)

    { const j api.jscodeshift; const root j(file.source); const variableDeclarators root.findVariableDeclarators('foo'); variableDeclarators.renameTo('bar'); return root.toSource(); = = = }
  16. JSCODESHIFT: HELLO WORLD export default function transformer(file: FileInfo, api: API)

    { const j api.jscodeshift; const root j(file.source); const variableDeclarators root.findVariableDeclarators('foo'); variableDeclarators.renameTo('bar'); return root.toSource(); = = = }
  17. JSCODESHIFT: HELLO WORLD export default function transformer(file: FileInfo, api: API)

    { const j api.jscodeshift; const root j(file.source); const variableDeclarators root.findVariableDeclarators('foo'); variableDeclarators.renameTo('bar'); return root.toSource(); = = = }
  18. STATIC ANALYSIS ENABLED… GRADUAL ROLLOUT OF TWO ENTIRELY DIFFERENT, FEATURE

    -FLAG-PROTECTED, BUILDS OF THE SAME CODEBASE, WITH: ↝ DIFFERENT VERSIONS OF DEV DEPENDENCIES. ↝ DIFFERENT VERSIONS OF APP DEPENDENCIES. ↝ DIFFERENT STRATEGIES FOR BUNDLING AND SERVING.
  19. HYRUM'S LAW & ME — BASICS OF THE G2 +

    MEDALLIA INTEGRATION • G2 DOCUMENTATION
  20. STATIC ANALYSIS ENABLED… ↝ METRICS AROUND USER-GENERATED CONTENT BASED ON

    PLUGIN COMPOSITION. ↝ ACTUAL DATA IS THE SINGLE SOURCE OF TRUTH AND CONSISTENCY IS GUARANTEED ACROSS ALL API ENDPOINTS AND THE REACT APP. ↝ RAPID ITERATION WITH INSTANT TYPED APIS AND ENHANCED DX WHEN IMPLEMENTING NEW METRICS.
  21. TS-MORPH: HELLO WORLD BEFORE interface Welcome { } AFTER interface

    ApiResponse { the_user_data?: UserData; userData?: UserData; "api-version"?: string; apiVersion?: string; isActive?: boolean; isActive?: boolean; user_preferences?: any; userPreferences?: UserPreferences; }
  22. TS-MORPH: HELLO WORLD sourceFile.getInterfaces().forEach(iface { Convert snake_case to camelCase const

    newName toCamelCase(iface.getName()); iface.rename(newName); Transform properties iface.getProperties().forEach(prop const propName { prop.getName(); if (propName.includes('_') const camelName propName.includes('-')) { toCamelCase(propName.replace(/["-]/g, '_')); prop.rename(camelName); } Replace 'any' types with proper interfaces if (prop.getTypeNode()?.getText() === 'any') { prop.setType('UserPreferences'); } }); > = > = | | = = = / / / / / / });
  23. TS-MORPH: HELLO WORLD sourceFile.getInterfaces().forEach(iface { Convert snake_case to camelCase const

    newName toCamelCase(iface.getName()); iface.rename(newName); Transform properties iface.getProperties().forEach(prop const propName { prop.getName(); if (propName.includes('_') const camelName propName.includes('-')) { toCamelCase(propName.replace(/["-]/g, '_')); prop.rename(camelName); } Replace 'any' types with proper interfaces if (prop.getTypeNode()?.getText() === 'any') { prop.setType('UserPreferences'); } }); > = > = | | = = = / / / / / / });
  24. BREAKING CHANGES DETECTION ↝ THE RENDERED DOM (TAGS, CLASSES, ID,

    ETC.) IS A CUSTOMER CONTRACT. THEY WRITE CSS/JS AGAINST IT. ↝ WE NEED TO CATCH WHEN A PR CHANGES IT WITHOUT A HAND-MAINTAINED SELECTOR LIST. ↝ FOR THAT, WE CAN PARSE EVERY COMPONENT'S TSX/JSX AND WALK THE TREE TO EXTRACT A STRUCTURAL DOM CONTRACT: TAGS, RESOLVED CLASS TOKENS, ID/NAME…
  25. TYPESAFE DOM LOCATOR DSL ↝ QUALITY ASSURANCE TEAMS NEED STABLE

    SELECTORS TO AUTOMATE AGAINST, BUT HAND-WRITTEN LOCATORS IN TEST CODE OFTEN DRIFT FROM THE ACTUAL DOM. ↝ TO IMPROVE THIS, WE CAN SCAN THE ACTUAL SOURCE OF TRUTH (E.G. JSX + SCSS) AND GENERATE A LOCATOR DSL QE CONSUMES.
  26. ALIAS ANALYSIS: OVERVIEW ↝ IT'S A CLASS OF TECHNIQUES THAT

    ATTEMPT TO DETERMINE IF VARIABLES REFER TO THE SAME UNDERLYING DATA. ↝ IT HELPS COMPILERS GENERATE EFFICIENT AND OPTIMIZED CODE.
  27. SSA FORM: OVERVIEW ↝ A TECHNIQUE WHERE EVERY VARIABLE HAS

    A SINGLE DEFINITION. ↝ MAINTAINING USE-DEFINED CHAINS IS EASIER, SINCE FOR EVERY USE YOU HAVE TO KEEP TRACK OF ONLY ONE DEFINITION. ↝ THAT SIMPLIFIED STRUCTURE ENABLES MORE POWERFUL AND EFFICIENT OPTIMIZATION TECHNIQUES.
  28. V8 & COMPILERS TWO EXAMPLES: ↝ MAGLEV: GETS TYPE FEEDBACK

    FROM THE INTERPRETER AND RUNS QUICK OPTIMIZATIONS. ↝ TURBOFAN: TRANSLATES BYTE-CODE INTO HIGHLY OPTIMIZED MACHINE CODE, USING SEA OF NODES (SON) AND CONTROL-FLOW GRAPH (CFG) IR.
  29. JAVASCRIPTCORE & COMPILERS TWO EXAMPLES: ↝ DFG JIT: BUILDS A

    DATA-FLOW GRAPH IR, USES PROFILING TO SPECIALIZE TYPES, REMOVE CHECKS, AND MORE, BUT WITH MODERATE COMPILE COST. ↝ FTL JIT: USES MULTIPLE IR (INCLUDING B3 AND LLVM) FOR AGGRESSIVE OPTIMIZATIONS AND HIGHER THROUGHPUT FOR HOT CODE.
  30. REACT DOCTOR: OVERVIEW ↝ A DIAGNOSTIC TOOL THAT ANALYZES REACT

    CODEBASES FOR SECURITY, PERFORMANCE, AND CORRECTNESS. ↝ IT SUPPORTS BOTH MANUAL USE BY DEVELOPERS AND AUTOMATED CONSUMPTION BY AI CODING AGENTS. ↝ @react-doctor/core DOES THE HEAVY LIFTING AND ORCHESTRATES THE ANALYSIS PIPELINE. IT LEVERAGES oxlint-plugin-react-doctor FOR HIGH-PERFORMANCE LINTING AND deslop-js FOR DEAD-CODE ANALYSIS.
  31. COMPILERS, USER INTERFACES & THE REST OF US ✨ CODE

    REFACTORING ast-grep Agents Skills 2025
  32. AST-GREP AGENT SKILLS: OVERVIEW ↝ A CLAUDE CODE PLUGIN DESIGNED

    TO EMPOWER AGENTS WITH STRUCTURAL CODE SEARCH CAPABILITIES. ↝ THE SKILL CONVERTS REQUESTS SUCH AS “FIND ASYNC FUNCTIONS THAT CALL THIS API WITHOUT ERROR HANDLING” INTO EXPLICIT STRUCTURAL CONDITIONS. ↝ IT EVALUATES THOSE CONDITIONS AGAINST TREESITTER SYNTAX NODES, MAKING MATCHES INDEPENDENT OF FORMATTING, INDENTATION, AND COMMENTS.
  33. AST-GREP AGENT SKILLS: SEARCHING FEATURE TEXT SEARCH (GREP) STRUCTURAL SEARCH

    (AST-GREP) MATCHING UNIT LINES/STRINGS AST NODES AWARENESS LITERAL CHARACTERS SYNTAX, SCOPE, AND GRAMMAR FORMATTING SENSITIVE TO SPACES/NEWLINES AGNOSTIC TO FORMATTING COMPLEXITY LIMITED TO REGEX RELATIONAL & COMPOSITE LOGIC
  34. MILLION LINT: COMPILER function App({ start }) { const [count,

    setCount] useEffect(() useState(start); { console.log("double: ", count * 2); }, [count]); return <Button onClick={() setCount(count + 1)}>{count}</Button>; } > = = > = — MILLION LINT IS IN PUBLIC BETA • 2024
  35. MILLION LINT: COMPILER function App({ start }) { Million.capture({ start

    }); const [count, setCount] Million.capture(useState)(start); useEffect( () { console.log("double: ", count * 2); }, Million.capture([count]), ); return Million.capture( <Button onClick={() setCount(count + 1)}>{count}</Button>, ); } = > = > = — MILLION LINT IS IN PUBLIC BETA • 2024
  36. MILLION LINT: COMPILER [ [ 'src/App.jsx': { { components: {

    kind: 'state', App: { count: 7, renders: [{ count: 7, time: 0.1 }, ], time: 0.1, instances: 3, changes: [{ prev: 0, next: 8 }, count: 70, ], } time: 1, ]; location: [13, 0, 23, 1], } } } ]; . . . . . . — MILLION LINT IS IN PUBLIC BETA • 2024
  37. COMPILERS, USER INTERFACES & THE REST OF US ✨ CODE

    REFACTORING Enzyme to RTL codemod 2024
  38. COMPILERS, USER INTERFACES & THE REST OF US Compilers are

    no #1 longer just for systems programming.
  39. COMPILERS, USER INTERFACES & THE REST OF US Understanding #2

    compilers can make you a better JavaScript developer.
  40. COMPILERS, USER INTERFACES & THE REST OF US Fundamentals matter

    more in the #3 AI era. Agents can automate code. But only engineers can understand the ff tradeo s. 🌶
  41. COMPILERS, USER INTERFACES & THE REST OF US THAT’S ALL,

    FOLKS! THANKS! 👋 🇺🇸 QUESTIONS? MATHEUS ALBUQUERQUE • @ythecombinator