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

🇨🇿 FrontKon 2026

🇨🇿 FrontKon 2026

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

October 06, 2026

More Decks by Matheus Albuquerque

Other Decks in Programming

Transcript

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

    GOOGLE DEVELOPER EXPERT ↝ 🌐 YTHECOMBINATOR
  2. COMPILERS &… ME: JAVASCRIPT! ↝ LOOKING BACK, NOT EVERY JAVASCRIPT

    FEATURE BECAME A MACRO… ↝ OUR ECOSYSTEM LARGELY MOVED TOWARD PARSERS, BABEL PLUGINS, TRANSFORMS, CODEMODS, AND SPECIALIZED COMPILERS. ↝ BUT THE IDEA SURVIVED: COMPILE-TIME EXTENSIBILITY BECAME A PART OF JAVASCRIPT ENGINEERING.
  3. “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
  4. “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
  5. “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
  6. 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)…
  7. COMPILERS & STATIC ANALYSIS… ↝ TRANSPILERS: Babel (2014), SWC (2020)…

    ↝ TYPE CHECKERS: TypeScript (2012), Flow (2014)… ↝ MINIFIERS: UglifyJS (2010), Terser (2018)… ↝ CSS PREPROCESSORS: PostCSS (2013), CSSO (2015), cssnano (2015), LightningCSS (2022)…
  8. MY GOALS FOR TODAY… Bridge the gap between Open your

    mind to—or even foundational CS concepts empower you with—tools to and practical front-end tackle a variety of complex development. challenges.
  9. ALIAS ANALYSIS: OVERVIEW ↝ A CLASS OF TECHNIQUES THAT ATTEMPT

    TO DETERMINE IF VARIABLES REFER TO THE SAME UNDERLYING DATA. ↝ IT HELPS COMPILERS GENERATE EFFICIENT AND OPTIMIZED CODE.
  10. SSA FORM: OVERVIEW BEFORE AFTER x = y - z

    x = y - z s = x + s s2 = x + s x = s + p x2 = s2 + p s = z * q s3 = z * q s = x * s s4 = x2 * s3
  11. SSA FORM: OVERVIEW BEFORE AFTER x = y - z

    x = y - z s = x + s s2 = x + s x = s + p x2 = s2 + p s = z * q s3 = z * q s = x * s s4 = x2 * s3
  12. SSA FORM: OVERVIEW ↝ MAINTAINING USE-DEFINED CHAINS IS EASIER, SINCE

    FOR EVERY USE YOU HAVE TO KEEP TRACK OF ONLY ONE DEFINITION. ↝ THIS SIMPLIFIED STRUCTURE ENABLES MORE POWERFUL AND EFFICIENT OPTIMIZATION TECHNIQUES.
  13. CODEMODS: JSCODESHIFT 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(); = = = }
  14. CODEMODS: JSCODESHIFT 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(); = = = }
  15. CODEMODS: JSCODESHIFT 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. 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.
  17. HYRUM'S LAW & ME — BASICS OF THE G2 +

    MEDALLIA INTEGRATION • G2 DOCUMENTATION
  18. 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.
  19. 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; }
  20. 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'); } }); > = > = | | = = = / / / / / / });
  21. 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'); } }); > = > = | | = = = / / / / / / });
  22. 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…
  23. 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.
  24. REACT DOCTOR: OVERVIEW ↝ A DIAGNOSTIC TOOL THAT ANALYZES REACT

    CODEBASES FOR SECURITY, PERFORMANCE, AND CORRECTNESS. ↝ @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.
  25. COMPILERS, USER INTERFACES & THE REST OF US ✨ CODE

    REFACTORING ast-grep Agents Skills 2025
  26. 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
  27. 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
  28. 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
  29. 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
  30. COMPILERS, USER INTERFACES & THE REST OF US ✨ CODE

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

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

    compilers can make you a better JavaScript developer.
  33. COMPILERS, USER INTERFACES & THE REST OF US #3 🌶

    Fundamentals like these matter more in the AI era.
  34. COMPILERS, USER INTERFACES & THE REST OF US THAT’S ALL,

    FOLKS! DÍKY! 👋 🇨🇿 QUESTIONS? MATHEUS ALBUQUERQUE • @ythecombinator