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 } ,
}