TGViewer
PLComp PLComp @plcomp · 843 subscribers
Post #60 839
https://www.jeffsmits.net/assets/articles/sle20-paper4.pdf
Gradually Typing Strategies

Статья рассказывает о применении популярной техники постепенной типизации (Gradual Typing) в необычной области -- к языку переписывания термов Stratego (который используется для "program normalization, type checkers, program analyses, code generators, and more"). Несмотря на отсутствие проверки типов в Stratego до сего момента, он тем не менее послужил для вдохновения авторов Haskell фреймворка SYB.

Использование Gradual Typing (постепенной типизации) мотивировано двумя факторами. Первый -- обратная совместимость, так как Stratego (в составе фреймворков Stratego/XT и Spoofax) используется в production-системах, разрабатываемых как в академии (researchr.org, conf.researchr.org, платформа онлайн-курсов TU Delft), так и в индустрии (где-то в недрах Oracle Labs). Второй -- высокая "динамичность" переписывания термов, которая в некоторых случаях используется (а кто-то скажет "эксплуатируется") для (временного) порождения нетипизируемых термов и превращения их обратно в типизируемые.

Дополнительно задача осложняется наличием в Stratego правил переписывания "высшего порядка" (называемых "стратегиями переписывания"), принимающих и применяющих другие правила переписывания (или стратегии). Отсюда возникает понятие Type-Preserving стратегий, реализующее ограниченную форму Higher-Kinded Types.

Кроме того, авторы применяют механизм "прозрачных" во время исполнения прокси-типов для того чтобы избежать накапливания лишних динамических преобразований типов при передаче правил переписывания из статически-типизированных стратегий в динамически-типизированные и обратно.

Проверка полученной системы типов на существующем проекте (учебный ассемблер для Java-байткода) продемонстрировала два достаточно ожидаемых результата: а) корректный динамический код написан так как если бы был статически типизирован, поэтому его легко аннотировать явными типами и почти не приходится при этом рефакторить; б) плохо протестированный динамический код содержит ошибки, которые легко обнаруживаются тайп-чекером (например, возврат списка вместо элемента — классика, сам на таком попадался).

#stratego #spoofax #gradual #types
More from @plcomp
  1. Oct 10, 2025В наше время может сложиться впечатление, что компиляторы вне LLVM уже не создаются. Это,…
  2. Jun 16, 2025#видеозаписи Начинаем публиковать видео докладов sysconf 2025. Первым — выступление Петра…
  3. May 21, 2025Недавно удалось лично пообщаться с несколькими известными преподавателями разработки компи…
  4. Nov 26, 2024В ближайшее время в Москве пройдет три конференции, связанные с системным программирование…
  5. Sep 29, 2024Я и мой студент, Кирилл Павлов, опубликовали статью "Библиотека llvm2py для анализа промеж…
  6. Jul 23, 2024Первый интерпретатор просто использует эти функции напрямую для рекурсивного аннотирования…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →