Java 8 Stream API는 기능적 인 MapReduce 스타일 기능을 주류 프로그래밍 언어에 통합하는 유망한 새로운 프로그래밍 모델을 설정합니다. 그러나 스트림을 효율적으로 사용하려면 미묘한 고려가 필요할 수 있습니다.
이 도구는 개발자가 의미론 보존 방식으로 최적의 스트림 클라이언트 코드를 작성하는 데 도움이되는 Eclipse 용 자동 리팩토링 연구 프로토 타입 플러그인으로 구성됩니다. 안전하고 아마도 유리한시기를 자동으로 결정하기위한 리팩토링 전제 조건 및 변환은 순차적 스트림을 병렬로 변환하고 이미 평행 한 스트림에 개선하는 것이 유리합니다. 이 접근법은 Wala와 Safe를 모두 사용합니다.
(보려면 클릭)
리팩토링은 두 가지 방법으로 실행할 수 있습니다.
현재 리팩토링은 패키지 탐색기와 개요보기를 통해서만 작동합니다. 단일 프로젝트를 선택하여 여러 프로젝트를 최적화하거나 선택할 수 있습니다. 각각의 경우, 도구는 리팩터링에 동봉 된 프로젝트에서 스트림을 찾을 것입니다.
최신 릴리스는 V0.18.0입니다. RCP 및 RAP 개발자에 대한 Eclipse IDE에서 테스트되었습니다 : 2019-03 (4.11.0), Build ID : 20190314-1200 OpenJDK 런타임 환경 (빌드 1.8.0_212-8U212-B03-03-03.04.2-B03) 및 OpenJDK 6 개 MOTE (Build 25.212-B03). 우분투 19.04.
이 비디오는이 도구를 설치할 수있는 다양한 방법을 보여줍니다.
알파 버전의 도구는 https://raw.githubusercontent.com/ponder-lab/optimize-java-8-streams-refactoring/mas "Optimize Stream Refactoring"의 최신 버전을 선택하십시오.
이 아이콘을 실행중인 Eclipse Workspace로 끌어 Eclipse Marketplace를 통해 도구를 설치할 수도 있습니다.
리팩토링에는 아래에 나열된 몇 가지 종속성이 있습니다. 위의 업데이트 사이트를 사용하여 플러그인을 설치하는 데 어려움이있는 경우 종속성을 수동으로 설치할 수 있습니다. 플러그인의 최신 버전을 설치해야합니다. Safe를 설치하는 경우 Wala를 먼저 설치 해야합니다 .
| 의존 | 업데이트 사이트 |
|---|---|
| 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 리팩토링 프레임 워크 | https://raw.githubusercontent.com/ponder-lab/common-eclipse-java-refactoring-framework/master/edu.cuny.citytech.refactoring.common.updatesite |
Wala에 특별한 의존성이 있습니다. 현재 우리의 리팩토링에는 Wala 버전 1.3.10이 필요합니다. 공식 Wala 사이트의 버전이 이론적으로 작동하지만 플러그인은 업데이트 사이트가 위에 나열된 Wala 버전으로 테스트되었습니다. 이 버전의 Wala는 플러그인과 함께 사용하는 것이 좋습니다.이 버전은 현재 Eclipse 설치에서 다른 Wala 기능을 제거해야 할 수도 있습니다. 미래의 통합을 추적하기 위해 이슈 #192가 열렸습니다.
명시 적 진입 점은 해당 주석 라이브러리에있는 적절한 주석을 사용하여 표시 될 수 있습니다. 또한 entry_points.txt 라는 텍스트 파일을 사용하여 표시 할 수도 있습니다. 이 파일의 처리는 재귀 적입니다. 소스 코드와 동일한 디렉토리 에서이 파일을 검색하고 디렉토리 구조를 찾을 때까지 디렉토리 구조를 가로 질러 이동합니다. 따라서 파일은 예를 들어 패키지 디렉토리, 하위 프로젝트 디렉토리 및 프로젝트 루트에 배치 될 수 있습니다. 파일의 형식은 단순히 각 줄의 메소드 서명 목록입니다.
이 비디오는 진입 지점을 지정하는 방법에 대한 자세한 내용을 설명합니다.
현재 내장 스트림에는 몇 가지 제한이 있습니다 (즉, 중간 스트림 연산에 대한 인수로 전송 된 Lambda 표현식의 일부로 선언 된 스트림). 이는 Eclipse JDT와 Wala의 모델 차이로 인한 것입니다. 자세한 내용은 #155를 참조하십시오.
일반적으로, 특히 익명의 내부 클래스 (AIC)를 사용할 때 Eclipse Dom과 Wala Dom 간의 매핑에 문제가 있습니다. 우리는 현재 Wala 개발자와 협력 하여이 문제를 해결하고 있습니다.
기여에 대한 자세한 내용은 Contributing.md를 참조하십시오.
이 Wiki 페이지는 Scam 2018 논문에 요약 된 몇 가지 엔지니어링 문제를 해결하는 코드의 위치를 강조합니다.
자세한 내용은 위키를 참조하십시오.
Raffi Khatchadourian, Yiming Tang, Mehdi Bagherzadeh 및 Syed Ahmed. Java 8 스트림의 지능형 병렬화를위한 안전한 자동 리팩토링. 2019 년 5 월 미국 뉴저지 주 Piscataway, ICSE '19 페이지, ICSE '19, ICSE '19, ICSE '19 페이지 국제 회의 에서. ACM/IEEE, IEEE Press. [BIB | doi | 슬라이드 | http]
Raffi Khatchadourian, Yiming Tang, Mehdi Bagherzadeh 및 Syed Ahmed. 자동 리팩토링을 통해 Java 8 스트림 소프트웨어를 최적화하기위한 도구. 소스 코드 분석 및 조작에 관한 국제 작업 회의 에서 Scam '18, 34-39 페이지. IEEE, IEEE PRESS, 2018 년 9 월. 엔지니어링 트랙. [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 } ,
}