Что такое PPX?
Во многих проектах, использующих ReasonML, часто используется аббревиатура PPX, но редко объясняется.
Что такое PPX?
Зачем они нужны ReasonML?
2 ответа
PPX (расширение препроцессора) - это средство перезаписи абстрактного синтаксического дерева (AST). По сути, просто функцияast => ast
.
AST - это представление синтаксиса, древовидной структуры данных, полученной в результате анализа исходного кода. Поскольку PPX может принимать и возвращать только этот AST, он ограничен существующим синтаксисом OCaml/ReasonML. Однако он может переосмыслить синтаксис и может встроить совершенно другой синтаксис в строку, обеспечивая ограниченную и инкапсулированную форму расширения синтаксиса.
PPX также не могут перезаписывать весь AST. Они ограничены узлами, которые были помечены пользователем с помощью любого из атрибутов ([@...)
), которые связаны с существующими узлами или узлами расширения ([%...]
), которые являются автономными узлами AST. PPX зарегистрирует одну или несколько ловушек, которые получат связанный с ними AST, когда они обнаруживаются компилятором, и сможет преобразовать эти части AST до того, как компилятор перейдет на свою фазу.
Примеры
ppx_deriving
пожалуй, наиболее широко используемый PPX. Это позволяет "выводить" определенные функции из сигнатур типов. Например:
[@deriving show]
type t = {
foo: int,
bar: string,
};
создаст show
функция (а также некоторые другие), которая при задании значения типа t
вернет красиво напечатанное строковое представление.
ppx_bx_css
а также styled-ppx
Оба являются PPX, которые анализируют CSS в некоторую структуру данных OCaml/ReasonML для использования с различными библиотеками CSS-in-JS. Они встраивают синтаксис CSS в строку в кавычках, которая, по крайней мере, для этой цели, представляет собой обычную строку, которая допускает разрывы строк и не требует экранирования"
а также \
.
[%style
{|
color: red;
margin: auto 0 10px 1em;
width: 70%;
background: url(http://example.com/test.jpg)
|}
];
PPX происходит из экосистемы Ocaml, частью которой является ReasonML. По сути, PPX предоставляет вам API для расширения синтаксиса языка.
Посетите http://ocamllabs.io/doc/ppx.html
спасибо за ефоз