Поиск ошибок в программах на языке Ruby с использованием вывода типов Санкт-Петербург, 2008г. Выполнил: Шпынов Олег, 545 гр. Научный руководитель: Ломов.

Презентация:



Advertisements
Похожие презентации
Вычисление типов в императивных динамически типизированных языках. Михаил Калугин, студент 3 курса ММФ Научные руководители: Игорь Николаевич Скопин Андрей.
Advertisements

Поддержка разработки Parallels Business Automation в среде Eclispe Научный руководитель: Сергушенков Ю. А. Рецензент: доцент кафедры системного программирования,
Автоматическая генерация каркасов клиентских приложений для систем с сервисно-ориентированной архитектурой Дипломная работа студента 545 группы Аязяна.
Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Факультет инноваций и высоких технологий Московский физико-технический институт.
ПОТОКО-ЧУВСТВИТЕЛЬНЫЙ АНАЛИЗ УКАЗАТЕЛЕЙ ЯЗЫКА С, ОСНОВАННЫЙ НА ДИАГРАММАХ ДВОИЧНЫХ РЕШЕНИЙ Санкт-Петербургский Государственный Университет Математико-Механический.
Обнаружение уязвимостей в web- приложениях, написанных на Python, средствами динамического анализа исходных кодов Заливин Д.А. Козлов Д.Д. Петухов А.А.
Сравнение различных технологий создания и использования web-сервисов Дипломная работа студентки 544 группы Григорьевой Елены Научный руководитель: Графеева.
Санкт-Петербургский Государственный Университет Математико-Механический факультет Кафедра системного программирования Межъязыковое взаимодействие OCaml.
«Поиск шаблонов в программном коде» Автор: студент 445 группы Евгений Куделевский Руководитель: к.ф.-м.н., ст. разработчик компании JetBrains Максим Мосиенко.
Разработка JRE на ECMA CLI Ушаков Денис Сергеевич Кафедра системного программирования, группа 545 Научный руководитель: Салищев Сергей Игоревич Рецензент:
Генерация скрипта создания базы данных с учетом зависимостей Автор : Максим Масунов, 545 группа Санкт - Петербургский государственный университет Математико.
ГОСТЕХКОМИССИЯ РОССИИ РУКОВОДЯЩИЙ ДОКУМЕНТ Защита от несанкционированного доступа к информации.
Кроссъязыковый рефакторинг « Изменение сигнатуры метода » Медведев Максим Юрьевич, 445 гр. Руководитель : Громов Петр Александрович.
Поддержка структурных изменений в процессах загрузки данных Долбешкин Андрей Николаевич, 545 группа Руководитель: Александр Сергеевич Дольник Рецензент:
Писать плагины проще на примере продуктов Atlassian Владимир Николаев Компания Teamlead.
Интерактивная языконезависимая система поиска шаблонов и дубликатов в программном коде Куделевский Евгений Валерьевич, 545 группа Научный руководитель:
Алгоритмы предоставления сервиса присутствия в сетях IMS Дипломная работа студентки 544 гр. Саперштейн О.А. Научный руководитель Дыдычкин Д.А. Рецензент,
Система управления проектами и задачами JIRA Выполнили: Студентки 5 курса БГУ отделения «Финансы и кредит» Грамотнева Анна Гуреева Ирина.
Студентка 545 группы Кантерина М.В. Элементы для Flash-приложений на языке haXe. Библиотека Sparkle. 1 Дипломная работа студентки 545 группы Кантериной.
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – валидация, валидационные элементы управления Из цикла.
Транксрипт:

Поиск ошибок в программах на языке Ruby с использованием вывода типов Санкт-Петербург, 2008г. Выполнил: Шпынов Олег, 545 гр. Научный руководитель: Ломов Д.С. Рецензент: Булычев (?) Санкт-Петебургский Государственный университет математико-механический факультет

Ruby динамический язык! Динамически типизируемый, интерпретируемый. Функциональный. Программы легко читаемы. Удобен для прототипирования, написания небольших программ. Популярный Web фрэймворк Ruby On Rails, собственная система распространения библиотек на Ruby (gem packaging system), огромное коммьюнити Отсутствие статической типизации! Сложно писать объёмные программы безопасные с точки зрения системы типов. Сложно изменять и преобразовывать код. + -

Постановка задачи Создать инструмент анализа программы на Ruby: Синтаксические Типовые Все языковые анализы - внешние по отношению к программе на Ruby: Не меняем язык! Не вводим никаких типовых аннотаций! Анализировать код на лету. Помогать разработчику при написании кода: автодополнение, переход к определению метода/класса. Реализовать всё вышеперечисленное в рамках плагина для среды разработки IntelliJ IDEA

Программа с ошибками Не видно ошибок!

Результат анализа Ошибка: у выражения нет метода capitaliz Оределяем функцию foo с параметрами a, b cо значением по умолчанию «yes» и оставшимися в массиве rest Ошибка: b предположительно тип не шире чем у значения по умолчанию. Нет метода bzzzz Ошибка: у *rest тип соответсвующий классу Array. Нет метода fooo. Ошибка: у а уже известен тип Array! Нет метода no()! Ошибка: у 0 нет метода boo(), необходимый для корректной работы метода foo Ошибка: у «no» действительно нет метода bzzzz. Ошибка: неизвестный метод Ошибка: у у нет метода yahooo

Вывод типов 24: у выражения (...) тип String, нет capitaliz У id тип для любого α. α -> α 5: у a тип Unknown, у b тип String, у rest тип Array 6: у a тип Unknown &.boo() 7: у b тип String &.bzzzz() 9: у rest тип Array &.fooo() 11: у a тип Fixnum 12: у a тип Fixnum &.no!() 17: У y тип (Fixnum &.boo()) | (Fixnum &.no()) 20: У y тип (Fixnum &.boo()) | (Fixnum &.no()) &.yahooo()

Реализация Разработана система типов с полиморфизмом и intersection types. Вычисляются типы методов, полей, локальных переменных итд. Вычисляются типы встроенных классов, методов. Вычисляются необходимые условия на типы параметров методов. Строится граф потока управления. Для вывода типов решается прямая задача потока данных. Анализируются вызовы методов (наличие метода, наличие необходимого кол-ва аргументов). Анализируются аргументы в вызовах методов на предмет соответствия требованиям к параметрам.

Схожие работы Static Type Inference for Ruby. Michael Furr, Jong-hoon (David), Jeffrey S. Foster, Michael Hicks. University of Maryland, College Park. Simon Marlow and Philip Wadler. A practical subtyping system for erlang. In ICFP, pages 136–149, Peter Thiemann. Towards a type system for analyzing javascript programs. In ESOP, pages 408–422, Davide Ancona, Massimo Ancona, Antonio Cuni, and Nicholas Matsakis. Rpython: Reconciling dynamically and statically typed oo languages. In DLS, Kristian Kristensen. Ecstatic – Type Inference for Ruby Using the Cartesian Product Algorithm. Masters thesis, Aalborg University, Jason Morrison. Type Inference in Ruby. Google Summer of Code Project, 2006.

Сравнение В работе « Static Type Inference for Ruby. Michael Furr, Jong- hoon (David), Jeffrey S. Foster, Michael Hicks. University of Maryland, College Park. » типизируется только некое надмножество языка Ruby Типизация программ: Схожие работы - вся программа единовременно Наша реализация - анализ на лету Ни одна из работ не подразумевает интеграцию в среду разработки

Заключение Успешно реализован алгоритм решения прямой задачи потока данных На основе полученного решения возможно проводить типизацию программ на языке Ruby Различные типовые анализы Автодополнение кода Всё вышеперечисленное успешно реализовано в рамках open source проекта Ruby plugin для среды разработки программного обеспечения IntelliJ IDEA