Трансляция кода из Groovy в Java в IntelliJ IDEA Дипломная работа Медведева Максима Научный руководитель: Громов П. С.

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



Advertisements
Похожие презентации
Кроссъязыковый рефакторинг « Изменение сигнатуры метода » Медведев Максим Юрьевич, 445 гр. Руководитель : Громов Петр Александрович.
Advertisements

Интерактивная языконезависимая система поиска шаблонов и дубликатов в программном коде Куделевский Евгений Валерьевич, 545 группа Научный руководитель:
Java Puzzlers Автор: Фофанова Мария Руководитель: Симончик Сергей.
ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ (ООП) 1.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
ЯЗЫКИ ПРОГРАММИРОВАНИЯ С РАСШИРЯЕМЫМ СИНТАКСИСОМ П.В. Егоров Екатеринбург, Июнь 2006.
Расширение метода рефакторинга документации семейств программных продуктов Лебедкова Т.А., 461 гр Научный руководитель: к.ф.-м.н., доцент Кознов Д.В. Рецензент:
Java : массивы и коллекции. Массивы Массивы простых типов: int []a = new int[10]; int []b = new int[]{ 0, 1, 2, 3, 4, 5 }; Массивы ссылочных типов (reference.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
Веб-фреймворк для Java платформы. Что такое Grails? Веб-фреймворк для Java платформы на языке Groovy Инспирирован RoR Open source. Активно поддерживается.
1 © Luxoft Training 2012 Java: расширенные вопросы Модуль #8.
Программная инженерия Дмитриев Андрей Владиславович
1 Java 6. ИНТЕРФЕЙСЫ И ВНУТРЕННИЕ КЛАССЫ. 2 Интерфейсы Не являются классами Ни один из объявленных методов не может быть реализован внутри интерфейса.
OpenMP. Различие между тредами и процессами ПроцессыТреды.
Лекция 2: Описание класса 1. Поля 2. Методы 3. Конструкторы.
Подбор материала и презентация: Сазонов Д.О. Кафедра ПМиЭММ ВГТА Динамические объекты, ссылки.
Контейнеры Сортировка Метод sort() Интерфейс Comparable метод int compareTo(Object o) вызов: Arrays.sort(a) Интерфейс Comparator метод int compare(Object.
Классы в C# Ссылочный тип, определенный пользователем (аналогично языкам C++ и Java) Единичное наследование классов Множественное наследование интерфейсов.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Транксрипт:

Трансляция кода из Groovy в Java в IntelliJ IDEA Дипломная работа Медведева Максима Научный руководитель: Громов П. С.

Groovy Динамический Объектно-ориентированный Совместим с Java На JVM Groovy-класс является Java-классом и наоборот Наследование сохраняет динамические свойства Расширяет синтаксис Java

Мотивация Ускорение критических частей кода Groovy медленнее Java в 5-10 раз Кроссъязыковые рефакторинги Изменение сигнатуры метода Добавление параметра Пожелания пользователей InetlliJ IDEA

Постановка задачи Транслятор исходного кода на Groovy в исходный код на Java в контексте IntelliJ IDEA Трансляция всех конструкций языка Около 90 Избавление от «динамичности» Вычисление типов Расстановка статических ссылок

Архитектура Транслятор блоков Транслятор выражений Транслятор классов Метод Выражение Замыкание Анон. класс Контекст трансляции

Трансляция ссылок def list=[1, 2, 3] print list[0] print list.get(1); print list.empty List list = new ArrayList (Arrays.asList(1, 2, 3)); print(DefaultGroovyMethods.getAt(list, 0)) print(list.get(1)); print(list.isEmpty());

Трансляция замыканий def x=0 list.each{int y -> x+=y } print x final Reference x=new Reference (0); DefaultGroovyMethods.each(list, new Closure (this, this) { public Number doCall(int y) { int i=x.get()+y; x.set(i); return i; }

Результаты Транслятор реализован Вывод типов Расстановка ссылок Улучшен вывод типов бинарных и унарных операторов Внедрен в IntelliJ IDEA Рефакторинг «Трансляция в Java» Появится в следующей версии IntelliJ IDEA