Rust

и инкрементальные парсеры

Илья Лахин

RustCon, Москва 2022

1

Содержание доклада

  • Компилятор
  • Инкрементальность
  • Парсеры
  • Lady Deirdre

2

Комиплятор

  • Source Code -> Assembly
  • Source Code -> Interpretation
  • Составные части
    • Front-end
    • Middle-end
    • Back-end

Front-end

  1. Source Code -> Parse Tree
  2. Parse Tree -> Abstract Syntax Tree
  3. AST correctness (syntax and semantic)

3

Комиплятор

Front-end

4

Парсеры

Инструменты создания парсеров

  • Быстрый.
  • Устройчивый.
  • Удобный.
  • Инкрементальный?
  • LL
  • PEG
  • LR

Парсер должен быть

Грамматики

5

Инкрементальность

Локальная перекомпиляция изменений

Incremental Builders

  • Rust Compiler
  • Java Compiler
  • C++ Compiler

Incremental Parsers

  • Rust Analyzer
  • IntelliJ Idea Java
  • Eclipse Java
  • VSCode JavaScript

Пересборка

целых файлов проекта.

Доразбор

внутри файлов проекта.

6

Парсеры

Инструменты создания парсеров

Incremental Non-Incremental
Rust Lady Deirdre nom

lalrpop

pest
 
Non-Rust Tree-Sitter (C, Rust bindings)

JetBrains PSI Framework (JRE)

Papa Carlo (Scala)
ANTLR (Java)

YACC/BISON (C)

7

Парсеры

Общие проблемы IDE

  1. Хранение текста (Ropes).
  2. Error-resistancy / Error-recovery.
  3. Сохрнанение структуры синтаксиса и лексики.
  4. Кросс-сылки между файлами.
  5. Code Formatters.
  6. Отделимость компиляторной системы(LSP).

8

Lady Deirdre

Технология для создания front-end компиляторов

  1. Фреймворк инкрементальных компилятора.
  2. Error-resistancy из коробки.
  3. Хранение текста в rope-структурах.
  4. Быстрее Tree Sitter.
  5. Dependency-free no-std Rust Crate.
  6. Подробная документация.
  7. Расширяемое API.

9

Спасибо!

10

RustCon 2022

By Ilya Lakhin