Портфолио: три системы на языке Rust
Здесь три самостоятельных проекта. Для каждого — что он делает, насколько готов и сколько в него вложено работы. Все числа получены измерением инструментами, а не прикидкой; где стоит «оценка» — так и написано.
Если вы не пишете на Rust, в конце есть короткая шпаргалка, как читать технические цифры в таблицах.
Коротко: три проекта одним взглядом
| Проект | Что делает | Размер | Насколько готов |
|---|---|---|---|
| xslt-transducer | Свой движок для языка запросов к XML-документам (аналог «SQL, но для XML») | ~49 000 строк | Рабочий, близок к промышленному качеству |
| kdsl | Из одного описания расчёта генерирует быстрый код сразу под процессор и видеокарты | ~7 800 строк | Рабочий прототип, часть задумки ещё впереди |
| colm-rs | Набор инструментов вокруг языка COLM для разбора и преобразования текста | ~1 400 строк | Исследовательские прототипы |
Ниже — подробно про каждый.
1. xslt-transducer — свой движок запросов к XML
Что это. Существует язык XPath (и его «старшие братья» XQuery и XSLT) — им спрашивают данные из XML-документов и преобразуют их. Проще всего представить так: как SQL достаёт данные из обычной базы, так XPath — это «SQL для XML».
Признанный эталон в этой области — коммерческий движок Saxon (написан на Java, стоит денег). Мы написали свой движок на Rust и полностью с нуля — не оборачивая чужие готовые библиотеки, а реализовав всё сами. Важная деталь: в мире Rust готового решения такого уровня просто не было — всё, что есть, либо застряло на версии стандарта 2018 года, либо является «обёрткой» над старой библиотекой на языке C.
Насколько готов. Рабочий движок, близкий к промышленному качеству. Основная часть — обработка XPath/XQuery версии 3.1 — работает уверенно. Поддержка преобразований XSLT — пока ранний прототип.
Чем доказывается качество — и это главный аргумент. У консорциума W3C (организация, которая утверждает интернет-стандарты) есть официальный набор проверочных тестов. Тем же набором проверяют и коммерческие движки — это честная, признанная в отрасли линейка. Результаты нашего движка:
- Из 31 703 официальных тестов проходит 30 139 — это 97,8% (среди тех проверок, что мы взялись поддерживать).
- Для черновика будущего стандарта (версия 4.0, который ещё дорабатывается) — уже 94,4% пройденных попыток.
- Ни одного аварийного падения программы на ~75 000 тестов. Это отдельный, очень весомый признак надёжности: движок не «роняется» даже на самых странных входных данных.
Сколько работы вложено (точные числа):
| Часть проекта | Что это | Строк кода | Структур | Перечисл. | Функций | Тестов |
|---|---|---|---|---|---|---|
| xpath-core | Сам движок (сердце проекта) | 40 653 | 52 | 48 | 474 | 314 |
| xpath-harness | Запуск и подсчёт официальных тестов | 3 758 | 18 | 7 | 85 | 3 |
| xpath-census | Инструмент статистики по возможностям | 1 466 | 5 | 0 | 36 | 0 |
| dss-core | Ранний слой преобразований XSLT | 3 481 | 13 | 13 | 89 | 79 |
| Итого | 49 358 | 88 | 68 | 684 | 396 |
Разбор языка написан вручную (89 отдельных функций-разборщиков) — это кропотливая работа, зато полный контроль над поведением.
Какие навыки показывает: построение разборщиков сложных языков, соответствие огромному отраслевому стандарту с измеримым доказательством (а не «на словах»), уверенный Rust на трудной задаче.
2. kdsl — генератор быстрого кода под разное «железо»
Что это. Когда нужен очень быстрый расчёт, его обычно приходится писать вручную отдельно под каждый тип «железа»: под обычный процессор, под видеокарту NVIDIA, под видеокарты других производителей. Это долго и легко наделать ошибок. kdsl позволяет описать расчёт один раз, а дальше программа сама генерирует три оптимизированные версии:
- ISPC — быстрый код для обычного процессора;
- CUDA — код для видеокарт NVIDIA;
- SPIR-V — универсальный стандарт для видеокарт разных марок.
Сама идея «опиши один раз — получи под всё» пришла из известного инструмента Halide (его используют, например, в Google и Adobe для обработки изображений).
Насколько готов. Рабочий прототип. Все три генератора кода запускаются (для процессора — самый полный; для видеокарт — частично). Главная «фишка» первоисточника — отдельная тонкая настройка того, как именно раскладывать вычисление по железу — пока только спроектирована, но ещё не построена. Отдельно отмечу честно: внутри проекта лежит очень амбициозный документ-манифест, и на собеседовании стоит сразу сказать, что рабочий код пока скромнее этого манифеста.
Чем доказывается. Результаты всех трёх сгенерированных версий сверяются с эталонным расчётом и совпадают до последнего бита — это доказывает, что автоматическая генерация кода не вносит ошибок. 56 автоматических тестов проходят, ни один не падает.
Сколько работы вложено (точные числа):
| Часть проекта | Что это | Строк кода | Структур | Перечисл. | Трейтов | Функций | Тестов |
|---|---|---|---|---|---|---|---|
| kdsl | Основной генератор (процессор + NVIDIA) | 6 838 | 13 | 6 | 2 | 103 | 56 |
| kdsl-spirv | Генератор под универсальный GPU-стандарт | 933 | 1 | 0 | 0 | 10 | 0 |
| Итого | 7 771 | 14 | 6 | 2 | 113 | 56 |
(В подсчёт вошёл только рукописный код. Автоматически сгенерированные программой примеры-крейты честно исключены — это не ручная работа, а результат работы самого генератора.)
Какие навыки показывает: написание компиляторов и генераторов кода, работа с видеокартами (CUDA, SPIR-V/Vulkan, ISPC), проектирование удобного языка описания расчётов, сравнительное («до бита») тестирование результатов.
3. colm-rs — инструменты для языка разбора текста COLM
Что это. COLM — специализированный язык для разбора и преобразования текста (например, чтобы автоматически переводить код из одного формата в другой). Его первоисточник написан на языке C автором самого языка. Мы построили вокруг него набор из четырёх небольших инструментов на Rust:
- связующий слой («мостик»), чтобы программы на Rust могли вызывать оригинальную библиотеку на C;
- компилятор COLM, встроенный в Rust — самый пригодный к практическому использованию из четырёх;
- переписанная на Rust часть «исполнителя» — того, что запускает уже скомпилированную программу COLM;
- сквозное демо, доводящее всю цепочку до реального применения внутри базы данных.
Попутно мы нашли и починили две ошибки в оригинальном C-коде — из-за них программа аварийно падала.
Насколько готов. Исследовательские прототипы, небольшие по объёму — но с реально работающими и проверенными частями.
Чем доказывается. Тесты запускались по-настоящему: переписанный исполнитель прошёл 7 тестов из 7, компилятор — 6 из 6, причём с проверкой, что его результат совпадает буква-в-букву с оригинальным инструментом COLM.
Сколько работы вложено (точные числа):
| Часть проекта | Что это | Строк кода | Структур | Функций | Тестов |
|---|---|---|---|---|---|
| colmc | Компилятор COLM внутри Rust (+ 2 почин. бага) | 261 | 0 | 11 | 6 |
| colm-rt | Переписанный на Rust «исполнитель» | 761 | 5 | 11 | 7 |
| colm-rs | Мостик к оригинальной C-библиотеке + демо | 343 | 8 | 12 | 0 |
| colm-udf-demo | Сквозное демо до базы данных | 70 | 0 | 2 | 0 |
| Итого | 1 435 | 13 | 36 | 13 |
Объём небольшой, но задача из тех, где строчек мало, а сложность высокая: нужно было аккуратно состыковать два языка (Rust и C), разобраться в чужом коде на 105 000 строк и починить в нём ошибки.
Какие навыки показывает: стыковка Rust с кодом на C/C++ (непростая, «низкоуровневая» работа), понимание внутреннего устройства языков и их «исполнителей», умение читать и чинить большой чужой код.
Шпаргалка: как читать технические цифры
Для тех, кто не пишет на Rust — что означают столбцы в таблицах:
- Строк кода — сколько строк написано (без пустых строк и комментариев). Грубая мера объёма работы.
- Структура (в Rust называется
struct) — «кирпичик» для хранения набора данных вместе. Близкий аналог — класс в других языках. - Перечисление (
enum) — тип «одно из нескольких значений». Как светофор: красный, жёлтый или зелёный — и ничего другого. - Трейт (
trait) — описание общего поведения, которое могут разделять разные типы данных. Близкий аналог — «интерфейс» в Java или C#. В этих проектах трейтов почти нет (всего 2) — и это не пробел, а стиль: движок и компилятор удобнее строить на конкретных типах данных, а не на абстрактных «контрактах». - Функция — отдельный кусок логики, который выполняет одну задачу.
- Тест — автоматическая проверка, которая сама убеждается, что код работает правильно. Много тестов = за качеством кода следят системно.
Все замеры сделаны 2026-07-01 инструментами: tokei (подсчёт
строк) и собственный анализатор кода на основе Rust-парсера
syn (подсчёт структур, функций и т.д.). Числа — не оценка,
а измерение.
Контакты
- Email: splinter.rat.pro@gmail.com
- Телефон: +7 (999) 815-22-92
- Telegram: @Splinter_Rat