www.lakhin.com

Инкрементальная компиляция

Хочу написать свой редактор кода

Только на Маке

Не понимает Джаву и Плюсы

Только в браузере

Редактор моей мечты

  1. Запускается где угодно
  2. Понимает любой язык
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Print the string to the console.
    }
}
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Print the string to the console.
    }
}

Подсветка синтаксиса

Лексический парсер

function HelloWorld ( )

[a..zA..Z]+ => id

'function' => keyword

'(' | ')' => terminal

<?php

  ehco "Hello world";

?>

Подсветка ошибок

ehco -> echo

Синтаксический парсер

1 * (2 + 3)

сложить => умножить ('+' умножить)*

умножить => операнд ('*' операнд)*

операнд => [0..9]+ | '(' сложить ')'

1 * (2 - 3)
1 * (2 )

Семантика

a * (b + a)

*

+

b

a

a

Скорость?

4000 строк кода на Scala за 64 секунды

Инкрементальный компилятор

a * (b + a)

*

+

b

a

a

a * (b + c)

*

+

b

a

c

Папа Карло

github.com/Eliah-Lakhin/papa-carlo

github.com/Eliah-Lakhin/papa-carlo

  • в сотне наиболее популярных проектов на Github
  • 3 контрибьютора
  • более 150 коммитов

Sébastien Doeraene  @sjrd

автор ScalaJS

Папа Карло на Scala Days 2014

Federico Tomassetti @ftomassetti

Java Incremental Parser

Martin Mauch @nightscape

Papa Carlo Aunt

Проекты на Папе Карло

Спасибо!

Software Freedom Day Novosibirsk 2014 [in Russian]

By Ilya Lakhin

Software Freedom Day Novosibirsk 2014 [in Russian]

  • 4,684