L'API Java 8 Stream définit un nouveau modèle de programmation prometteur qui intègre des fonctionnalités de style MapReduce de type fonctionnel dans un langage de programmation grand public. Cependant, l'utilisation efficace des flux peut impliquer des considérations subtiles.
Cet outil consiste en des plug-in inscriptions automatisés de Research Research pour Eclipse qui aide les développeurs à écrire un code client de flux optimal d'une manière préservante de sémantique. Les conditions de refactorisation et les transformations pour déterminer automatiquement quand il est sûr et éventuellement avantageux de convertir un flux séquentiel en parallèle et améliorer les flux déjà parallèles est inclus. L'approche utilise à la fois Wala et Safe.
(cliquez pour voir)
Le refactorisation peut être exécuté de deux manières différentes:
Actuellement, le refactoring ne fonctionne que via le package Explorer et les vues de contour. Vous pouvez sélectionner un seul projet pour optimiser ou sélectionner plusieurs projets. Dans chaque cas, l'outil trouvera des flux dans les projets entorants à refactor.
La dernière version est V0.18.0. It has been tested on Eclipse IDE for RCP and RAP Developers Version: 2019-03 (4.11.0), Build id: 20190314-1200 under OpenJDK Runtime Environment (build 1.8.0_212-8u212-b03-0ubuntu1.19.04.2-b03) and OpenJDK 64-Bit Server VM (build 25.212-b03, mixed mode) on Ubuntu 19.04.
Cette vidéo montre les différentes façons dont cet outil peut être installé.
Une version alpha de notre outil est disponible via un site de mise à jour Eclipse à: https://raw.githubusercontent.com/ponder-lab/optimize-java-8-streams-refactoring/master/edu.cuny.hunter.streamrefactoring.updatesite. Veuillez choisir la dernière version du "Optimiser le refactorisation de flux".
Vous pouvez également installer l'outil via le marché Eclipse en faisant glisser cette icône vers votre espace de travail Eclipse en cours d'exécution:
Le refactorisation a plusieurs dépendances indiquées ci-dessous. Si vous rencontrez des problèmes d'installation du plug-in à l'aide du site de mise à jour ci-dessus, vous pouvez installer manuellement les dépendances. La dernière version des plug-ins doit être installée. Si vous installez sûr, notez que Wala doit être installé en premier:
| Dépendance | Mettre à jour le site |
|---|---|
| Wala | https://raw.githubusercontent.com/ponder-bab/wala/streams/com.ibm.wala.updatesite |
| SÛR | https://raw.githubusercontent.com/tech-srl/safe/master/com.ibm.safe.updatesite |
| Frame de refactorisation Java Eclipse Common | https://raw.githubusercontent.com/ponder-lab/common-eclipse-java-refactoring-framework/master/edu.cuny.citytech.refactoring.common.updatesite |
Veuillez noter qu'il existe une dépendance spéciale à l'égard de Wala. Actuellement, notre refactorisation nécessite Wala Version 1.3.10 . Bien que la version du site officiel de Wala fonctionnerait théoriquement, le plug-in a été testé avec la version Wala dont le site de mise à jour est répertorié ci-dessus. Nous recommandons fortement que cette version de Wala soit utilisée avec le plug-in, qui peut nécessiter la désinstallation d'autres fonctionnalités Wala de votre installation Eclipse actuelle. Le numéro 192 a été ouvert pour suivre l'intégration future.
Les points d'entrée explicites peuvent être marqués en utilisant l'annotation appropriée trouvée dans la bibliothèque d'annotation correspondante. Ils peuvent également être marqués à l'aide d'un fichier texte nommé entry_points.txt . Le traitement de ce fichier est récursif; Il recherchera ce fichier dans le même répertoire que le code source et traversera la structure du répertoire jusqu'à ce que l'on soit trouvé. En tant que tel, le fichier peut être placé, par exemple, les répertoires de package, les répertoires de sous-projet et les racines de projet. Le format du fichier est simplement une liste de signatures de méthode sur chaque ligne.
Cette vidéo explique plus de détails sur la façon dont les points d'entrée peuvent être spécifiés.
Il y a actuellement certaines limites avec les flux intégrés (c'est-à-dire, les flux déclarés dans le cadre des expressions Lambda envoyées comme arguments aux opérations de flux intermédiaires). Cela est dû aux différences de modèle entre l'éclipse JDT et Wala. Voir # 155 pour plus de détails.
En général, il y a un problème avec la cartographie entre l'éclipse Dom et Wala Dom, en particulier lors de l'utilisation de classes intérieures anonymes (AIC). Nous travaillons actuellement avec les développeurs Wala pour résoudre ce problème.
Pour plus d'informations sur la contribution, voir contribution.md.
Cette page wiki met en évidence les emplacements de notre code qui résolvent plusieurs défis d'ingénierie décrits dans notre article Scam 2018.
Voir le wiki pour plus d'informations.
Raffi Khatchadourian, Yiming Tang, Mehdi Bagherzadeh et Syed Ahmed. Refactorisation automatisée sûre pour la parallélisation intelligente des flux Java 8. Dans International Conference on Software Engineering , ICSE '19, pages 619-630, Piscataway, NJ, USA, mai 2019. ACM / IEEE, IEEE Press. [Bib | Doi | Diapositives | http]
Raffi Khatchadourian, Yiming Tang, Mehdi Bagherzadeh et Syed Ahmed. Un outil pour optimiser le logiciel Java 8 Stream via une refactorisation automatisée. Dans International Working Conference on Source Code Analysis and Manipulation , Scam '18, pages 34-39. IEEE, IEEE Press, septembre 2018. Piste d'ingénierie. [Bib | Doi | Diapositives | http]
Veuillez citer ce travail comme suit:
@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 } ,
}