Java 8流API提出了一個有希望的新編程模型,該模型將類似功能的MapReduce風格功能融合到主流編程語言中。但是,有效地使用流可能涉及微妙的考慮。
該工具由自動重構研究原型插件組成,用於Eclipse,該插件可幫助開發人員以語義傳播方式編寫最佳流客戶端代碼。包括重構前提和轉換,以自動確定何時安全且可能有利於將順序流轉換為並行並在已經平行的流上進行改進。該方法同時利用Wala和安全。
(單擊查看)
重構可以通過兩種不同的方式進行:
當前,重構僅通過軟件包資源管理器和輪廓視圖來工作。您可以選擇一個單個項目以優化或選擇多個項目。在每種情況下,該工具都會在封閉項目中找到用於重構的流。
最新版本是v0.18.0。它已在Eclipse IDE上針對RCP和RAP開發人員進行了測試:2019-03(4.11.0),構建ID:20190314-1200 OpenJDK運行時環境(構建1.8.212-8U212-8U212-B03-03-03-0B03-0BUNTU1.19.04.2-B03)和OpenJdk 64-Bit Server Sirser(Build ot Moild cons oon Openjdk 64-bit vm)( Ubuntu 19.04。
該視頻演示了可以安裝此工具的不同方式。
我們的工具的Alpha版本可通過Eclipse Update站點獲得:https://raw.githubusercontent.com/ponder-lab/optimize-java-8-streams-refactoring/master/master/edu.cuny.hunter.hunter.streamrefactoring.updatesite.updatesite.updatesite.updatesite.updatesite.updatesite。請選擇最新版本的“優化流重構”。
您也可以通過將此圖標拖動到運行的Eclipse工作區來通過Eclipse Marketplace安裝工具:
重構具有以下列出的幾個依賴關係。如果您使用上述更新站點在安裝插件時遇到任何麻煩,則可以手動安裝依賴項。應安裝最新版本的插件。如果安裝安全,請注意必須首先安裝WALA:
| 依賴性 | 更新站點 |
|---|---|
| 瓦拉 | https://raw.githubusercontent.com/ponder-lab/wala/streams/com.ib.m.wala.updatesite |
| 安全的 | https://raw.githubusercontent.com/tech-srl/safe/master/com.ib.safe.updatesite |
| 常見的Eclipse Java重構框架 | https://raw.githubusercontent.com/ponder-lab/common-eclipse-java-refactoring-framework/master/master/edu.citytech.citytech.refactoring.common.updatesite |
請注意,對Wala有特殊的依賴性。目前,我們的重構需要Wala版本1.3.10 。儘管理論上是官方WALA網站的版本,但已使用上面列出的更新站點的Wala版本對插件進行了測試。我們強烈建議將此版本的Wala與插件一起使用,這可能需要從您當前的Eclipse安裝中卸載其他Wala功能。問題#192已開放以跟踪未來的整合。
可以使用在相應的註釋庫中發現的適當註釋來標記顯式入口點。它們也可以使用名為entry_points.txt的文本文件進行標記。該文件的處理是遞歸的;它將在與源代碼相同的目錄中搜索此文件,並將遍歷目錄結構,直到找到一個目錄。因此,可以將文件放入,例如包裝目錄,子標記目錄和項目根。文件的格式只是每行上的方法簽名列表。
該視頻介紹了有關如何指定入口點的更多詳細信息。
當前,嵌入式流有一些局限性(即,將流作為lambda表達式作為中間流操作的參數發出的lambda表達式的一部分)。這是由於Eclipse JDT和Wala之間的模型差異所致。有關詳細信息,請參見#155。
通常,Eclipse Dom和Wala Dom之間的映射存在問題,尤其是在使用匿名內部類(AIC)時。我們目前正在與Wala開發人員合作解決此問題。
有關貢獻的信息,請參見貢獻。
此Wiki頁面強調了我們的代碼中的位置,這些位置解決了我們的騙局2018年論文中概述的幾個工程挑戰。
有關更多信息,請參見Wiki。
Raffi Khatchadourian,Yiming Tang,Mehdi Bagherzadeh和Syed Ahmed。安全自動重構,用於Java 8流的智能並行化。在國際軟件工程會議上,ICSE '19,第619--630頁,2019年5月,美國新澤西州Piscataway,美國新澤西州。 ACM/IEEE,IEEE PRESS。 [bib | doi |幻燈片| HTTP]
Raffi Khatchadourian,Yiming Tang,Mehdi Bagherzadeh和Syed Ahmed。通過自動重構優化Java 8流軟件的工具。在國際源代碼分析和操縱的國際工作會議上,184--39頁騙局'18。 IEEE,IEEE出版社,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 } ,
}