Описание услуги
Я разработчик на Racket и Scheme и занимаюсь тем уголком мира Lisp, куда обычные бэкенд-инженеры почти не заглядывают: я делаю языки, а не только пользуюсь готовыми. Когда задача упорно выворачивает ваш код общего назначения наизнанку, честный ответ нередко звучит так — нужен небольшой предметный язык под саму задачу. Именно его я проектирую и реализую. Пишу аккуратные, хорошо структурированные функциональные программы, гигиенические макросы, собственные ридеры и вычислители, а также ту оснастку, которая превращает сырую идею в работающий интерпретатор, о котором можно рассуждать.
Моя работа обычно распадается на три формы. Первая — DSL и системы макросов: я использую языково-ориентированные возможности Racket, чтобы дать вашей команде нотацию под конкретную задачу, с проверками синтаксиса, понятными сообщениями об ошибках и ридером, который ощущается родным, а не прикрученным сбоку. Вторая — интерпретаторы и небольшие компиляторы: парсеры, вычислители, обходчики деревьев и байткод-бэкенды для форматов конфигурации, движков правил, скриптовых слоёв и экспериментальных языков. Третья — учебные и исследовательские инструменты: я неравнодушен к программам, которые объясняют сами себя, поэтому делаю визуализаторы, пошаговые отладчики, проверяльщики упражнений и интерактивные материалы для тех, кто осваивает функциональное программирование и лежащее в его основе лямбда-исчисление.
Поскольку я вырос из семейства Lisp, а не из мейнстримного бэкенда или работы на Clojure, для меня особенно важны корректность и предельно маленькое ядро. Опираюсь на контракты, свойство-ориентированное тестирование и маленькие компонуемые функции, документирую грамматику и инварианты, чтобы следующему человеку не пришлось разбирать ваш парсер по кусочкам. Если у вас есть полурабочий прототип, груда макросов, которую никто не решается трогать, или свежая идея маленького языка — я доведу это от наброска до надёжного результата.
— Предметные языки и гигиенические макросы на Racket
— Интерпретаторы, вычислители и небольшие компиляторы на Scheme
— Парсеры, собственные ридеры и движки правил
— Учебные инструменты: пошаговые отладчики, визуализаторы, проверка упражнений
— Функциональный рефакторинг, контракты и свойство-ориентированные тесты
— Перенос и модернизация старого кода на Scheme и Lisp
Моя работа обычно распадается на три формы. Первая — DSL и системы макросов: я использую языково-ориентированные возможности Racket, чтобы дать вашей команде нотацию под конкретную задачу, с проверками синтаксиса, понятными сообщениями об ошибках и ридером, который ощущается родным, а не прикрученным сбоку. Вторая — интерпретаторы и небольшие компиляторы: парсеры, вычислители, обходчики деревьев и байткод-бэкенды для форматов конфигурации, движков правил, скриптовых слоёв и экспериментальных языков. Третья — учебные и исследовательские инструменты: я неравнодушен к программам, которые объясняют сами себя, поэтому делаю визуализаторы, пошаговые отладчики, проверяльщики упражнений и интерактивные материалы для тех, кто осваивает функциональное программирование и лежащее в его основе лямбда-исчисление.
Поскольку я вырос из семейства Lisp, а не из мейнстримного бэкенда или работы на Clojure, для меня особенно важны корректность и предельно маленькое ядро. Опираюсь на контракты, свойство-ориентированное тестирование и маленькие компонуемые функции, документирую грамматику и инварианты, чтобы следующему человеку не пришлось разбирать ваш парсер по кусочкам. Если у вас есть полурабочий прототип, груда макросов, которую никто не решается трогать, или свежая идея маленького языка — я доведу это от наброска до надёжного результата.
— Предметные языки и гигиенические макросы на Racket
— Интерпретаторы, вычислители и небольшие компиляторы на Scheme
— Парсеры, собственные ридеры и движки правил
— Учебные инструменты: пошаговые отладчики, визуализаторы, проверка упражнений
— Функциональный рефакторинг, контракты и свойство-ориентированные тесты
— Перенос и модернизация старого кода на Scheme и Lisp