КС:2015:Проект:jit — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(Новая страница: «== Что это за проект == === Введение === JIT компиляция (Just In Time, ещё называют динамической) - это…»)
 
(Требования на зачет в конце 1-го модуля)
Строка 24: Строка 24:
  
 
=== Требования на зачет в конце 1-го модуля ===
 
=== Требования на зачет в конце 1-го модуля ===
Нужно будет реализовать библиотеку регулярных выражений, которая умеет по регулярному выражению в диалекте POSIX extended построить автомат, скомпилировать этот автомат в байткод и затем его выполнить. Также программа должна уметь дампить байткод и считывать его из дампа.
+
В [https://github.com/google/re2/ re2] реализована компиляция регулярных выражений в инструкции виртуальной машины. Нужно написать библиотеку, которая использует re2 для синтаксического разбора регулярных выражений, получает из неё представление регулярного выражения в виде инструкций этой виртуальной машины, умеет при помощи [http://yasm.tortall.net/ libyasm] компилировать и запускать какое-то непустое подмножество этих инструкций. Например, так, как это описано в [http://eli.thegreenplace.net/2013/11/05/how-to-jit-an-introduction статье].
  
 
=== Итоговая оценка ===
 
=== Итоговая оценка ===

Версия 20:00, 24 сентября 2015

Что это за проект

Введение

JIT компиляция (Just In Time, ещё называют динамической) - это компиляция виртуальной машиной программы на интерпретируем байткоде в машинный код в процессе её выполнения. Позволяет увеличить скорость выполнения интерпретируемой программы. Применяется, в частности, в виртуальных машинах pypy и java hotspot.

Что требуется

Вам предлагается реализовать быструю библиотеку регулярных выражений, которая умеет компилировать регулярные выражения непосредственно в инструкции x86-64.

Чему вы научитесь

1. Узнаете, как устроена JIT компиляция.

2. Научитесь профилировать код и искать узкие места в производительности.

3. Научитесь писать интерпретаторы с JIT.

Начальные требования

1. Технический английский язык.

2. Знание C++.

3. Любознательность.

Критерии оценивания

Требования на зачет в конце 1-го модуля

В re2 реализована компиляция регулярных выражений в инструкции виртуальной машины. Нужно написать библиотеку, которая использует re2 для синтаксического разбора регулярных выражений, получает из неё представление регулярного выражения в виде инструкций этой виртуальной машины, умеет при помощи libyasm компилировать и запускать какое-то непустое подмножество этих инструкций. Например, так, как это описано в статье.

Итоговая оценка

  • 3 балла. Реализованы требования на зачёт в конце первого модуля.
  • 7 баллов. Байткод компилируется в машинный код, машинный код работает правильно.
  • +1 балл. Реализована поддержка юникода и capturing groups (захватывающих скобок).
  • +N баллов. N = 8 * max(0, (Time(re2) - Time(jit)) / Time(re2)) на предложенных тестах.