Preview

Труды Института системного программирования РАН

Расширенный поиск

Автоматизированная генерация типовых контрактов для языка Ruby

https://doi.org/10.15514/ISPRAS-2017-29(4)-1

Полный текст:

Аннотация

Элегантный синтаксис языка Ruby заметно усложняет поиск ошибок в больших кодовых базах. Статический анализ усложняется специфическими возможностями языка, такими как динамическое создание методов и исполнение строковых выражений. Даже в языках с динамической типизацией информация о типах важна, так как она позволяет улучшить типобезопасность и производить более надёжные статические проверки того, определён ли метод для объекта и передан ли метода корректный набор аргументов. Одним из путей решения проблемы является использование YARD нотаций. Они позволяют задокументировать входные и выходный типы методов или даже декларировать методы, добавляемые динамически. Такие аннотации позволяют улучшить анализ кода и автодополнение. В статье описывается новый подход к генерации типовых аннотаций. Мы отслеживаем непосредственные вызовы метода во время исполнения программы и сохраняем типы аргументов и выходной тип. На основе собранной информации для каждого метода строится неявная типовая аннотация. Каждому автомату сопоставляется конечный автомат, составленный из различных типовых сигнатур метода. К автомату применяется эффективный алгоритм минимизации с целью снизить затраты на хранение и позволяет привести автомат к виду, который может быть легко представлен в виде регулярного выражения. В сгенерированном автомате учитывается только та функциональность метода, которая была покрыта программой, которую исполнил пользователь. Поэтому в подходе предусмотрено объединение автоматов, полученных у разных пользователей с целью увеличения репрезентативности и покрытия функциональности метода.

Об авторах

Н. Ю. Вьюгинов
СПбГУ; JetBrains
Россия


В. С. Фондаратов
JetBrains
Россия


Список литературы

1. Brianna M. Ren., J. Toman, T. Stephen Strickland and Jeffrey S. Foster. The ruby type checker. Доступно по ссылке: http://www.cs.umd.edu/~jfoster/papers/oops13.pdf

2. blog.codeclimate. Gradual type checking for ruby, 2014. [Online]. Доступно по ссылке: blog.codeclimate.com/blog/2014/05/06/gradual-type-checking-for-ruby/

3. O. Shivers. Control flow analysis in scheme. ACM SIGPLAN 1988 conference on Programming language design and implementation, 1988.

4. Bozhidar Batsov. Rubocop, 2017. [Online]. Доступно по ссылке: http://batsov.com/rubocop/

5. Jeff Foster, Mike Hicks, Mike Furr, David An. Diamond-back ruby guide, 2009.[Online]. Доступно по ссылке: http://www.cs.umd.edu/projects/PL/druby/manual/manual.pdf

6. Pat Shaughnessy. Ruby Under a Microscope. No Starch Press, 2013.

7. Madsen M. Static Analysis of Dynamic Languages. Доступно по ссылке: http://pure.au.dk/ws/files/85299449/Thesis.pdf

8. Duck Typing [Online]. Доступно по ссылке: http://rubylearning.com/satishtalim/duck_typing.html


Для цитирования:


Вьюгинов Н.Ю., Фондаратов В.С. Автоматизированная генерация типовых контрактов для языка Ruby. Труды Института системного программирования РАН. 2017;29(4):7-20. https://doi.org/10.15514/ISPRAS-2017-29(4)-1

For citation:


Viuginov N.Y., Fondaratov V.S. Automated Type Contracts Generation in Ruby. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2017;29(4):7-20. https://doi.org/10.15514/ISPRAS-2017-29(4)-1

Просмотров: 69


Creative Commons License
Контент доступен под лицензией Creative Commons Attribution 4.0 License.


ISSN 2079-8156 (Print)
ISSN 2220-6426 (Online)