Java 8 Stream API излагает новую многообещающую модель программирования, которая включает функциональные функции, в стиле MapReduce в основной язык программирования. Однако использование потоков эффективно может включать тонкие соображения.
Этот инструмент состоит из автоматизированных плагинов прототипов исследований исследований для Eclipse, который помогает разработчикам в написании оптимального клиентского кода покой в стиле семантики. Рефакторирование предварительных условий и преобразования для автоматического определения, когда это безопасно и, возможно, выгодно преобразовать последовательный поток для параллельного и улучшения при уже параллельных потоках. Подход использует как вала, так и безопасную.
(Нажмите, чтобы просмотреть)
Рефакторинг может быть запущен двумя разными способами:
В настоящее время рефакторинг работает только через проводник пакета и обзорные представления. Вы можете выбрать один проект для оптимизации или выбрать несколько проектов. В каждом случае инструмент найдет потоки в оболочках проектов для Refactor.
Последний релиз v0.18.0. Он был протестирован на Eclipse IDE для RCP и разработчиков RAP Версия: 2019-03 (4.11.0), идентификатор Build: 20190314-1200 в среде OpenJDK выполнения (Build 1.8.0_212-8U212-B03-0Ubuntu1.19.04.2-B03) и OpenJDK 64-BIT Server VMER (Build n-Build 25.213.19.04.2-B03) и OpenJDK 64-BIT SERVER VMED 25.1213.19.04.2-B03) и OpenJDK 64-BIT Server VMED 25.213.19.04.2-B03) и OpenJDK 64-BIT Server VMED Ubuntu 19.04.
Это видео демонстрирует различные способы установки этого инструмента.
Альфа-версия нашего инструмента доступна через сайт обновления Eclipse по адресу: https://raw.githubusercontent.com/ponder-lab/optimize-java-8-streams-refactoring/master/edu.cuny.hunter.streamRefactoring.Updatesite. Пожалуйста, выберите последнюю версию «Оптимизировать рефакторинг потока».
Вы также можете установить инструмент через рынок Eclipse, перетаскивая этот значок в свое рабочее пространство Eclipse:
Рефакторинг имеет несколько зависимостей, как указано ниже. Если вы испытываете какие-либо проблемы с установкой плагина с помощью вышеуказанного сайта обновления, вы можете вручную установить зависимости. Последняя версия плагинов должна быть установлена. При установке Safe обратите внимание, что Wala должен быть установлен в первую очередь:
| Зависимость | Обновить сайт |
|---|---|
| Вала | https://raw.githubusercontent.com/ponder-lab/wala/streams/com.ibm.wala.updatesite |
| БЕЗОПАСНЫЙ | https://raw.githubusercontent.com/tech-srl/safe/master/com.ibm.safe.updatesite |
| Обычная рамка рефакторинга Java Eclipse | https://raw.githubusercontent.com/ponder-lab/common-eclipse-java-refactoring-framework/master/edu.cuny.citytech.refactoring.common.updatesitite |
Обратите внимание, что есть особая зависимость от Вала. В настоящее время наше рефакторинг требует WALA версии 1.3.10 . Хотя версия с официального сайта Wala теоретически будет работать, плагин был протестирован с версией Wala, сайт обновления которой указан выше. Мы настоятельно рекомендуем использовать эту версию Wala с помощью плагина, которая может потребовать удаления других функций Wala из вашей текущей установки Eclipse. Выпуск № 192 был открыт для отслеживания будущей интеграции.
Явные точки входа могут быть помечены с использованием соответствующей аннотации, найденной в соответствующей библиотеке аннотаций. Они также могут быть помечены с использованием текстового файла с именем entry_points.txt . Обработка этого файла является рекурсивной; Он будет искать этот файл в том же каталоге, что и исходный код, и будет пересекать структуру каталога, пока не найден. Таким образом, файл может быть помещен, например, каталоги пакетов, каталоги подпроекта и корни проектов. Формат файла - это просто список подписей метода на каждой строке.
Это видео объясняет более подробную информацию о том, как могут быть указаны точки входа.
В настоящее время существуют некоторые ограничения со встроенными потоками (то есть потоки, объявленные как часть выражений Lambda, отправленных в качестве аргументов для операций промежуточного потока). Это связано с различиями в моделях между Eclipse JDT и Wala. Смотрите #155 для деталей.
В целом, существует проблема с отображением между Eclipse Dom и Wala Dom, особенно при использовании анонимных внутренних классов (AICS). В настоящее время мы работаем с разработчиками Wala, чтобы решить эту проблему.
Для получения информации о внесении вклад см. Appling.md.
На этой странице вики подчеркивается местоположения в нашем коде, которые решают несколько инженерных задач, изложенных в нашей статье SCAM 2018.
Смотрите вики для получения дополнительной информации.
Раффи Хатчадуриан, Йиминг Тан, Мехди Багерзаде и Сайед Ахмед. Безопасный автоматический рефакторинг для интеллектуальной параллелизации потоков Java 8. На Международной конференции по разработке программного обеспечения , ICSE '19, страницы 619--630, Piscataway, NJ, USA, май 2019 года. ACM/IEEE, IEEE Press. [bib | Doi | слайды | http]
Раффи Хатчадуриан, Йиминг Тан, Мехди Багерзаде и Сайед Ахмед. Инструмент для оптимизации программного обеспечения Java 8 с помощью автоматического рефакторинга. На международной рабочей конференции по анализу исходного кода и манипуляции , SCAM '18, стр. 34--39. IEEE, IEEE Press, сентябрь 2018 года. Инженерный трек. [bib | Doi | слайды | http]
Пожалуйста, укажите эту работу следующим образом:
@InProceedings { Khatchadourian2019 ,
author = { Raffi Khatchadourian and Yiming Tang and Mehdi Bagherzadeh and Syed Ahmed } ,
booktitle = { International Conference on Software Engineering } ,
title = { Safe Automated Refactoring for Intelligent Parallelization of {Java} 8 Streams } ,
year = { 2019 } ,
address = { Piscataway, NJ, USA } ,
month = may,
organization = { ACM/IEEE } ,
pages = { 619--630 } ,
publisher = { {IEEE} } ,
series = { ICSE '19 } ,
acmid = { 3339586 } ,
doi = { 10.1109/icse.2019.00072 } ,
keywords = { Java 8, automatic parallelization, refactoring, static analysis, streams, typestate analysis } ,
location = { Montr'eal, QC, Canada } ,
numpages = { 12 } ,
url = { http://academicworks.cuny.edu/hc_pubs/489 } ,
}
@InProceedings { Khatchadourian2018 ,
author = { Raffi Khatchadourian and Yiming Tang and Mehdi Bagherzadeh and Syed Ahmed } ,
booktitle = { International Working Conference on Source Code Analysis and Manipulation } ,
title = { A Tool for Optimizing {Java} 8 Stream Software via Automated Refactoring } ,
year = { 2018 } ,
month = sep,
note = { Engineering Track. } ,
organization = { IEEE } ,
pages = { 34--39 } ,
publisher = { IEEE Press } ,
series = { IEEE SCAM '18 } ,
doi = { 10.1109/SCAM.2018.00011 } ,
issn = { 2470-6892 } ,
keywords = { refactoring, automatic parallelization, typestate analysis, ordering, Java 8, streams, eclipse, WALA, SAFE } ,
location = { Madrid, Spain } ,
numpages = { 6 } ,
url = { http://academicworks.cuny.edu/hc_pubs/429 } ,
}