С-разработчик в команду Tarantool Language Runtime, удаленно
Tarantool — платформа, которая объединяет в себе свойства хорошей распределенной базы данных и возможности написания кода на различных языках программирования рядом с ней. Ключевыми особенностями нашего продукта являются скорость, надежность и масштабируемость, что в свою очередь требует выбора эффективных алгоритмов и структур данных, грамотного использования возможностей операционной системы и компилятора, написания чистого понятного кода.
Наш продукт быстро растет, и мы ищем С разработчика в команду Language Runtime, который будет вместе с нами продолжать работать над расширением возможностей сред исполнения Lua и SQL.
Задачи
Нам нужен инженер, который будет заниматься развитием нашей программной среды в Tarantool. Lua — основной язык программирования для написания кода на Tarantool. Его runtime — центральная компонента платформы, обеспечивающая взаимодействие различных подсистем. В качестве реализации у нас использован LuaJIT, который включает в себя как среду исполнения языка, так и трассирующий JIT компилятор. Также мы активно работаем не только над улучшением самой среды исполнения Lua, но и над встроенными модулями, а также сопутствующими инструментами разработчика.
Примеры задач, которые мы решали в последнее время:
- #1700 Handle fiber switches made on JIT traces: Tarantool использует Lua корутины для исполнения пользовательского кода. Однако, в Tarantool использован иной примитив для многозадачности -- fiber. Смена fiber-а является внешней операцией для Lua мира, и поэтому необходимо уведомлять подсистемы Lua среды (JIT, GC и т.д.) для сохранения консистентности платформы.
- #5187 LuaJIT platform metrics: В рамках развития Lua runtime мы добавили возможность получения различных метрик платформы (количество различных аллоцированных объектов, число созданных и использованных строк, характеристики работы JIT компилятора и т.д.).
- #5442 LuaJIT memory profiler: Развитие среды разработчика мы начали с профилировщика памяти, который позволяет следить за аллокацией/реаллокацией/освобождением памяти в Lua среде, а также инструментами для анализа этого профиля.
В ближайшее время мы планируем заниматься такими задачами:
- #1898 Detect infinity loops in Lua: В парадигме кооперативной многозадачности, реализованной в Tarantool, средства исполнения Lua кода (fiber) самостоятельно передают управление друг другу. Таким образом, бесконечные циклы без передачи управления в своем теле могут приводить к деградации всей платформы. Для предотвращения этой проблемы, мы хотим реализовать механизм принудительной передачи управления, сохранив при этом консистентность кооперативного взаимодействия fiber-ов.
- #4001 LuaJIT platform profiler: Имеющиеся средства профилирования не покрывают всех потребностей разработчиков, использующих Tarantool. Системные утилиты (perf) снимают только host stack traces; встроенный профилировщик LuaJIT (jit.p) работает только с Lua guest stack. В реальной жизни необходимо иметь инструмент, покрывающий обе среды и реализующий функциональность обоих профилировщиков.
- #5857 Inter-fiber debugger for Tarantool: Отладчик является ежедневным инструментом разработчика на разных языках программирования и платформах. Имеющиеся отладчики для Lua не подходят для работы со сложным кодом в Tarantool из-за различных особенностей платформы (многозадачность, асинхронность, неблокируемость), поэтому необходимо разработать отладчик платформы, который позволяет удобно и эффективно вести разработку на Lua в Tarantool.
Требования
- отличное знание языка С;
- навыки системного программирования под Linux.
Будет плюсом
- опыт работы с языком ассемблера x86 или ARM;
- опыт работы с языком Lua;
- уверенные знания технологий компиляторов и виртуальных машин;
- желание писать код в open source.
Мы предлагаем
Tarantool
Про Tarantool его разработчики говорят, что это сервер приложений и база данных в одном флаконе. Платформа может заменять более 30 серверов с обычной СУБД и обрабатывать до 1 млн запросов в секунду. Tarantool — open-source решение: когда пишешь код, создаёшь свою репутацию на GitHub.