La API Java 8 Stream establece un nuevo modelo de programación prometedor que incorpora características de estilo MapReduce de tipo funcional en un lenguaje de programación convencional. Sin embargo, el uso de transmisiones de manera eficiente puede implicar consideraciones sutiles.
Esta herramienta consiste en complementos de prototipo de investigación de refactorización automatizada para Eclipse que ayuda a los desarrolladores a escribir el código de cliente de flujo óptimo de manera que preserve la semántica. La refactorización de condiciones previas y transformaciones para determinar automáticamente cuándo es seguro y posiblemente ventajoso convertir una corriente secuencial en paralelo y mejorar las transmisiones ya paralelas. El enfoque utiliza tanto Wala como SAFE.
(Haga clic para ver)
La refactorización se puede ejecutar de dos maneras diferentes:
Actualmente, la refactorización solo funciona a través del Explorador de paquetes y las vistas del esquema. Puede seleccionar un solo proyecto para optimizar o seleccionar múltiples proyectos. En cada caso, la herramienta encontrará transmisiones en los proyectos de encerrado para refactorizar.
El último lanzamiento es V0.18.0. Se ha probado en Eclipse IDE para los desarrolladores de RCP y RAP Versión: 2019-03 (4.11.0), ID de compilación: 20190314-1200 en OpenJDK Runtime Entorno (Build 1.8.0_212-8u212-B03-0ubuntu1.19.04.2-b03) y OpenJDK 64-bit Server VM (Build 25.212, 212, Mode Mode). Ubuntu 19.04.
Este video demuestra las diferentes formas en que se puede instalar esta herramienta.
Una versión alfa de nuestra herramienta está disponible a través de un sitio de actualización de Eclipse en: https://raw.githubusercontent.com/ponder-lab/optimize-java-8-streams-refactoring/master/edu.cuny.hunter.streamrefactoring.updeatesite. Elija la última versión de "Optimizar la refactorización de flujo".
También puede instalar la herramienta a través del mercado de eclipse arrastrando este icono a su espacio de trabajo Eclipse en ejecución:
La refactorización tiene varias dependencias como se enumeran a continuación. Si experimenta algún problema para instalar el complemento utilizando el sitio de actualización anterior, puede instalar manualmente las dependencias. Se debe instalar la última versión de los complementos. Si se instala Safe, tenga en cuenta que Wala debe instalarse primero:
| Dependencia | Sitio de actualización |
|---|---|
| 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 |
| Marco de refactorización de Java de eclipse común | https://raw.githubusercontent.com/ponder-lab/common-eclipse-java-refactoringframework/master/edu.cuny.citytech.refactoring.common.updatesite |
Tenga en cuenta que hay una dependencia especial de Wala. Actualmente, nuestra refactorización requiere WALA versión 1.3.10 . Aunque la versión del sitio oficial de Wala funcionaría teóricamente, el complemento ha sido probado con la versión Wala cuyo sitio de actualización se enumera anteriormente. Recomendamos encarecidamente que esta versión de Wala se use con el complemento, lo que puede requerir desinstalar otras funciones de Wala de su instalación actual de eclipse. El número 192 se ha abierto para rastrear la integración futura.
Los puntos de entrada explícitos pueden marcarse utilizando la anotación apropiada que se encuentra en la biblioteca de anotación correspondiente. También se pueden marcar usando un archivo de texto llamado entry_points.txt . El procesamiento de este archivo es recursivo; Buscará este archivo en el mismo directorio que el código fuente y atraviesará la estructura del directorio hasta que se encuentre uno. Como tal, el archivo se puede colocar, por ejemplo, directorios de paquetes, directorios de subproyectos y raíces del proyecto. El formato del archivo es simplemente una lista de firmas de métodos en cada línea.
Este video explica más detalles sobre cómo se pueden especificar los puntos de entrada.
Actualmente hay algunas limitaciones con las transmisiones integradas (es decir, las transmisiones declaradas como parte de las expresiones Lambda enviadas como argumentos a las operaciones de transmisión intermedia). Esto se debe a las diferencias de modelos entre el Eclipse JDT y Wala. Ver #155 para más detalles.
En general, existe un problema con el mapeo entre Eclipse Dom y Wala DOM, particularmente cuando se usa clases internas anónimas (AIC). Actualmente estamos trabajando con los desarrolladores de Wala para resolver este problema.
Para obtener información sobre la contribución, ver contribuyente. MD.
Esta página Wiki destaca las ubicaciones en nuestro código que resuelven varios desafíos de ingeniería descritos en nuestro documento de estafa 2018.
Consulte el wiki para obtener más información.
Raffi Khatchadourian, Yiming Tang, Mehdi Bagherzadeh y Syed Ahmed. Refactorización automatizada segura para la paralelización inteligente de las transmisiones Java 8. En Conferencia Internacional sobre Ingeniería de Software , ICSE '19, páginas 619-630, Piscataway, NJ, EE. UU., Mayo de 2019. ACM/IEEE, IEEE Press. [babero | Doi | Diapositivas | http]
Raffi Khatchadourian, Yiming Tang, Mehdi Bagherzadeh y Syed Ahmed. Una herramienta para optimizar el software Java 8 Stream a través de la refactorización automatizada. En la Conferencia Internacional de Trabajo sobre el Análisis y Manipulación del Código Fuente , Scam '18, páginas 34-39. IEEE, IEEE Press, septiembre de 2018. Track de ingeniería. [babero | Doi | Diapositivas | http]
Por favor cita este trabajo de la siguiente manera:
@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 } ,
}