A API Java 8 Stream estabelece um novo modelo promissor de programação que incorpora recursos funcionais de estilo MapReduce em uma linguagem de programação convencional. No entanto, o uso de fluxos com eficiência pode envolver considerações sutis.
Essa ferramenta consiste em protótipo de pesquisa de refatoração automatizada para o Eclipse, que auxilia os desenvolvedores a escrever o código ideal do cliente de fluxo de maneira semântica que preserva. A refatoração de pré -condições e transformações para determinar automaticamente quando é segura e possivelmente vantajosa para converter um fluxo seqüencial para paralelo e melhorar os fluxos já paralelos estão incluídos. A abordagem utiliza Wala e Safe.
(clique para visualizar)
A refatoração pode ser executada de duas maneiras diferentes:
Atualmente, a refatoração funciona apenas através do pacote Explorer e das visualizações de esboço. Você pode selecionar um único projeto para otimizar ou selecionar vários projetos. Em cada caso, a ferramenta encontrará fluxos nos projetos de anexo para refatorar.
A versão mais recente é v0.18.0. Ele foi testado no Eclipse IDE para RCP e Rap Developers Version: 2019-03 (4.11.0), ID de construção: 20190314-1200 em ambiente de execução OpenJDK (Build 1.8.0_212-8U212-B03-0UBUNTU1.19.04.2-B03) e OpenJDK Ubuntu 19.04.
Este vídeo demonstra as diferentes maneiras pelas quais essa ferramenta pode ser instalada.
Uma versão alfa da nossa ferramenta está disponível por meio de um site de atualização do Eclipse em: https://raw.githubusercontent.com/ponder-lab/optimize-java-8-streams-refactoring/master/edu.cuny.hunter.streamRefacoring.updatesite. Escolha a versão mais recente do "Otimize Stream Refatoring".
Você também pode instalar a ferramenta através do Eclipse Marketplace, arrastando esse ícone para o seu espaço de trabalho Eclipse em execução:
A refatoração tem várias dependências listadas abaixo. Se você tiver problemas para instalar o plug-in usando o site de atualização acima, poderá instalar manualmente as dependências. A versão mais recente dos plug-ins deve ser instalada. Se instalar seguro, observe que o Wala deve ser instalado primeiro:
| Dependência | Site de atualização |
|---|---|
| Wala | https://raw.githubusercontent.com/ponder-lab/wala/streams/com.ibm.wala.updatesite |
| SEGURO | https://raw.githubusercontent.com/tech-srl/safe/master/com.ibm.safe.updatesite |
| Estrutura de refatoramento Java Eclipse comum | https://raw.githubusercontent.com/ponder-lab/common-eclipse-java-refactoring-framework/master/edu.cuny.citytech.refactoring.common.updatesite |
Observe que há uma dependência especial do Wala. Atualmente, nossa refatoração requer Wala versão 1.3.10 . Embora a versão do site oficial do Wala teoricamente funcionasse, o plug-in foi testado com a versão Wala cujo site de atualização está listado acima. É altamente recomendável que esta versão do Wala seja usada com o plug-in, que pode exigir desinstalar outros recursos do Wala da sua instalação atual do Eclipse. A edição #192 foi aberta para rastrear a integração futura.
Os pontos de entrada explícitos podem ser marcados usando a anotação apropriada encontrada na biblioteca de anotação correspondente. Eles também podem ser marcados usando um arquivo de texto chamado entry_points.txt . O processamento deste arquivo é recursivo; Ele procurará esse arquivo no mesmo diretório que o código -fonte e atravessará a estrutura do diretório até que um seja encontrado. Como tal, o arquivo pode ser colocado, por exemplo, diretórios de pacotes, diretórios de subproject e raízes do projeto. O formato do arquivo é simplesmente uma lista de assinaturas de método em cada linha.
Este vídeo explica mais detalhes sobre como os pontos de entrada podem ser especificados.
Atualmente, existem algumas limitações com fluxos incorporados (ou seja, fluxos declarados como parte das expressões Lambda enviadas como argumentos para operações de fluxo intermediário). Isso se deve às diferenças de modelo entre o Eclipse JDT e o Wala. Veja #155 para obter detalhes.
Em geral, há um problema com o mapeamento entre o Eclipse Dom e Wala Dom, principalmente ao usar classes internas anônimas (AICs). No momento, estamos trabalhando com os desenvolvedores da Wala para resolver esse problema.
Para obter informações sobre a contribuição, consulte Contribuindo.md.
Esta página do Wiki destaca os locais em nosso código que resolvem vários desafios de engenharia descritos em nosso artigo Scam 2018.
Veja o wiki para obter mais informações.
Raffi Khatchadourian, Yiming Tang, Mehdi Bagherzadeh e Syed Ahmed. Refatoração automatizada segura para paralelização inteligente de fluxos Java 8. Em Conferência Internacional sobre Engenharia de Software , ICSE '19, páginas 619--630, Piscataway, NJ, EUA, maio de 2019. ACM/IEEE, IEEE Press. [babador | Doi | Slides | http]
Raffi Khatchadourian, Yiming Tang, Mehdi Bagherzadeh e Syed Ahmed. Uma ferramenta para otimizar o software Java 8 Stream via refatoração automatizada. Na Conferência Internacional de Trabalho sobre Análise e Manipulação do Código-fonte , Scam '18, páginas 34--39. IEEE, IEEE Press, setembro de 2018. Trilha de engenharia. [babador | Doi | Slides | http]
Cite este trabalho da seguinte forma:
@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 } ,
}