MakeupElixir
A Makeup lexer for the Elixir language.
Installation
Add makeup_elixir to your list of dependencies in mix.exs:
def deps do
[
{:makeup_elixir, "~> 0.14.0"}
]
endThe lexer will be automatically registered in Makeup for the languages “elixir” and “iex” as well as the extensions “.ex” and “.exs”.
Benchmarks
Schism: “inline vs no inline”
Should we inline parsec or not? Currently this can be done using a config option. By default, parsers are not inlined because inlining doubles compilation time.
Lexing speed: comparison; with inlined parsecs; without inlined parsecs. Very weird performance characteristics. Faster on average but extremely high latency in the worst case.
Compilation speed: comparison; with inlined parsecs; without inlined parsecs. As expected, compiling the inlined parsecs is much slower (about 2x slower)
Schism: “map lookup vs pattern matching”
Postprocessing the token lists using map lookup VS pattern matching
Lexing speed: comparison; map lookup; pattern matching. Very weird performance characteristics. Faster on average but extremely high latency in the worst case.
Compilation speed: comparison; map lookup; pattern matching.
Schism: “parse delimiter pairs”
This lexer used to use a very expensive operation to match some delimiters, which seemed to have supralinear complexity. Now, only a couple delimiters are parsed like this.