Динамический вывод типов для языка Ruby на основе статистики запусков

Руководитель: Валентин Фондаратов (RubyMine)

Город стажировки: Санкт-Петербург

Проект:

Ruby — замечательный динамический язык программирования. Он позволяет определять поведение и реализацию программ во время исполнения, что явилось причиной порождения множества DSL — предметно-ориентированных языков, придуманных для быстрой и экспрессивной реализации определенного ряда задач. Популярный фреймворк для создания web-приложений Ruby on Rails — один из примеров таких DSL. С помощью него создание простейших web-приложений занимает считанные строки кода. Обратной стороной такого удобства является сложность статического анализа кода. Использование «волшебных» функций и объектов чревато ошибками в определении типов тех или иных переменных и даже методов. Первыми на помощь пришли языки аннотаций. Сначала это был RDoc, а теперь YARD. Они позволяют не только задокументировать возвращаемые и принимаемые типы методов, но даже утвердить существование некоторых динамически создаваемых методов! Полное документирование программ решает проблему использования динамически определенных типов и методов, однако противоречит сущности языка — краткости и экспрессивности. Что делать, когда непонятно, каков результат исполнения программы? Запустить ее! Что делать, когда необходимо сделать какое-то действие для множества похожих объектов? Написать программу. Проанализировав множество значений в определенных контрольных точках программ в течение множества ее запусков, можно сделать много интересных выводов. Например, найти закономерности в типизации полей в зависимости от их имен или составить неявные типовые аннотации для широко используемых библиотек. Это открывает широкие возможности как для поиска ошибок в программах, так и для предложения подсказок их авторам при написании. Данный проект можно разбить на два этапа.

Задачи:
  • В рамках первого этапа необходимо реализовать фреймворк с открытым исходным кодом для сбора статистики по динамическим объектам.
  • В рамках второго этапа предстоит создать статический анализатор кода проекта, использующий данные, полученные на первом этапе. Данный этап является исследовательской работой.
 
Требования:
  • уверенное владение Java и жажда приключений ;)
 
Комментарии:

Знание языка ruby рекомендуется, однако знакомства хотя бы с одним динамическим языком (python, javascript) и желания изучить ruby и писать на нем достаточно.

Презентация проекта 25 мая 2016  

Результат