Тип работы:
Предмет:
Язык работы:


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

Работа №133034

Тип работы

Дипломные работы, ВКР

Предмет

программирование

Объем работы27
Год сдачи2017
Стоимость4750 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
25
Не подходит работа?

Узнай цену на написание


Введение 4
1. Постановка задачи 5
2. Обзор 6
3. Архитектура 10
4. Окружение для запуска программ 11
4.1. Опциональные аргументы 11
4.2. Ускорение сбора данных 14
5. Вывод контрактов 16
6. Облачное хранилище для типовых контрактов 20
7. Встраивание контрактов в алгоритм выделения типов 21
8. Тестирование и апробация 23
9. Заключение 25
Список литературы 26

Ruby — довольно популярный в наше время язык программирования. Динамиче­ская типизация придаёт языку гибкость и позволяет писать выразительный и ёмкий код. Он также позволяет определять поведение и реализацию программ во время исполнения, что явилось причиной порождения множества фреймворков, ускоряю­щих решение ряда задач. Один из таких фреймворков — Ruby on Rails. Он заметно упрощает и ускоряет создание web-приложений. Однако в наше время приложение не может долгое время оставаться без изменений, оно постоянно подвергается ре­факторингу и в него добавляется новая функциональность. В больших приложениях, написанных на языках с динамической типизацией такие мелкие изменения ведут к усложнению кода в совокупности, а также к усложнению отладки и поиска ошибок.
Первыми на помощь пришли языки аннотаций, такие как RDoc [10] и YARD [19]. Они позволяют не только задокументировать возвращаемые и принимаемые типы методов, но даже декларировать создание динамических методов [21]. Полное до­кументирование программ решает проблему, однако противоречит сущности языка — краткости и выразительности. Поэтому необходимо каким-то образом статически анализировать исходный код, чтобы получить информацию о типах аргументов и о возвращаемых типах методов.
Статический анализ тоже не позволяет разрешить все ситуации в силу специфики языка Ruby [12]. Поэтому было решено анализировать не исходный код программы, а фактические типы аргументов в процессе исполнения программы. Проанализировав большой набор таких данных, можно сделать некоторые выводы о типизированной сигнатуре методов. Например, составить неявные типовые аннотации для широко ис­пользуемых библиотек. Это открывает широкие возможности, как для поиска ошибок в программах, так и для предложения подсказок их авторам при написании.

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В ходе данной работы получены следующие результаты.
1. Разработана архитектура.
2. На языке Ruby/C реализовано окружение для запуска программ, собирающее данные о типах.
3. На языке Java разработан модуль для вывода контрактов, описывающих сигна­туру метода.
4. Создано облачное хранилище для сгенерированных контрактов.
5. Реализован плагин для IDE, встраивающий контракты в систему статического анализа.
6. Модуль протестирован и проведено нагрузочное тестирование.
В дальнейшем планируется активно использовать разработанный модуль в IDE RubyMine и поддерживать базу аннотаций для популярных библиотек.


[1] Batsov Bozhidar. RuboCop. — 2017. — URL: batsov.com/rubocop (online; accessed: 24.04.2017).
[2] Discource.— URL: https://github.com/discourse/discourse (online; accessed: 12.05.2017).
[3] Duck Typing. — URL: http://rubylearning.com/satishtalim/duck_typing.html (online; accessed: 12.05.2017).
[4] Dynamic runtime type inference in PyCharm 2.7. — URL: https://blog.jetbrains. com/pycharm/2013/02/dynamic-runtime-type-inference-in-pycharm-2-7/ (online; accessed: 07.05.2017).
[5] Flow Documentation.— URL: https://flow.org/en/docs/ (online; accessed: 07.05.2017).
[6] John E. Hopcroft Rajeev Motwani Jeffrey D. Ullman. Introduction to Automata Theory. — Addison-Wesley, 2001.
[7] Mike Furr David An Jeff Foster Mike Hicks. Diamondback Ruby Guide. — 2009. — URL: http://www.cs.umd.edu/projects/PL/druby/manual/manual.pdf (online; accessed: 24.04.2017).
[8] Mypy documentation.— URL: http://mypy.readthedocs.io/en/latest/ (online; accessed: 07.05.2017).
[9] PEP 8 - Style Guide for Python Code. — URL: https://www.python.org/dev/peps/ pep-0008/ (online; accessed: 07.05.2017).
[10] RDoc - Documentation from Ruby Source Files. — URL: http://rdoc.sourceforge. net/ (online; accessed: 07.05.2017).
[11] Ralf Hinze Johan Jeuring, LAndres.
[12] Ren Brianna M. The Ruby Type Checker.— URL: http://www.cs.umd.edu/ ~jfoster/papers/oops13.pdf (online; accessed: 21.12.2016).
[13] Review of Python Static Analysis Tools.— URL: https://blog.codacy. com/review-of-python-static-analysis-tools-ff8e7e27f972 (online; accessed: 07.05.2017).
[14] Ruby Documentation - TracePoint.— URL: http://ruby-doc.org/core-2.0.0/ TracePoint.html (online; accessed: 12.05.2017).
[15] Sasada Koichi. YARV: Yet Another Ruby VM.— 2006. — URL: http://www.atdot. net/yarv/ (online; accessed: 24.04.2017).
...


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ