Compilador como servicio: ¿Cómo construir herramientas de refactorización?

Lisa Feigenbaum de las conversaciones de Microsoft aquí sobre "Compilador como servicio". He leído que esto facilitaría la creación de herramientas de refactorización. ¿Cómo? CAAS de Mono es genial, pero si la versión de Microsoft es similar, no veo cómo se hace este caso de uso específico.

preguntado el 16 de mayo de 11 a las 16:05

MSFT es un símbolo de cotización. -

3 Respuestas

"Compilador como servicio" significa dividir el compilador en partes individuales.

En lugar de tener una gran caja negra monolítica donde el código fuente entra en un extremo y los ensamblajes compilados salen por el otro, obtienes muchas cajas más pequeñas (negras) con salida mecanografiada.

Entonces, podría, por ejemplo, introducir el código fuente en un cuadro y obtener un árbol de sintaxis abstracta (AST) en el otro. Luego, este árbol podría manipularse, antes de ingresar al optimizador, de donde proviene alguna otra representación del código, que podría ingresarse en el compilador, que luego genera el código ejecutable.

Como no sé mucho sobre los planes exactos para la parte del "compilador como servicio" de un futuro .NET, lo anterior es solo una suposición descabellada, pero así es como veo las posibilidades.

Entonces, la refactorización podría operar en el AST, y supongo que hay una manera de volver del AST al código fuente original, tanto a través del mapeo como de la conversión (mapeo significa que puede tomar un nodo en el AST y preguntar "qué parte de el código fuente al que corresponde este nodo ", y la conversión significaría" ¿podría darme el código fuente que representa ahora este AST, después de haberlo modificado ").

Por ejemplo, vería tanto a JetBrains como a DevExpress, ambos haciendo herramientas de refactorización para Microsoft, teniendo que evaluar sus propios esfuerzos para escribir código que lea y separe el código para refactorizar en lugar de usar el proporcionado por CAAS.

contestado el 16 de mayo de 11 a las 20:05

Gracias @Martinho, sabía que había un término que no recordaba allí :) - Lasse V. Karlsen

El CTP de Roslyn incluye un tutorial para crear "Code Action", que es nuestra terminología para algo que puede ser "solución rápida", si está vinculado a algo incorrecto en el código, o una refactorización si se ofrece contextualmente.

También eche un vistazo a la plantilla de proyecto CodeRefactoring que verá en Visual Studio si instala Roslyn CTP.

Respondido 20 Oct 11, 21:10

Mi empresa (Semantic Designs) ofrece un "compilador como servicio": el Kit de herramientas de reingeniería de software DMS.

DMS es genérico con respecto a los lenguajes informáticos (cualquier lenguaje formal). Dadas las descripciones de un idioma (DMS tiene versiones robustas de estas para C ++, C #, Java, PHP, COBOL y muchos otros lenguajes), DMS puede analizar el código fuente en AST y regenerar una fuente válida a partir de esos AST, incluidos los comentarios originales.

DMS proporciona varios motores de análisis, tanto evaluaciones de atributos configurables, análisis de flujo, solucionadores iterativos, análisis de definición de uso, construcción de gráficos de llamadas locales y globales y análisis de puntos globales. Los AST pueden modificarse mediante código de procedimiento (pirateo clásico del árbol del compilador) o mediante transformaciones de fuente a fuente. Las transformaciones pueden asignar AST en un idioma a ese mismo idioma ("optimización") oa otros idiomas ("refinamiento / traducción"). Esta es una infraestructura muy madura con más de 15 años de ingeniería continua detrás.

Usted usa DMS seleccionando / definiendo el conjunto de lenguajes de entrada / salida que desea y creando código personalizado escrito en DSL orientados al compilador (¡compilado por DMS para crear la herramienta deseada!) Para invocar los diversos bits de la maquinaria DMS que logran su propósito .

DMS se ha utilizado para crear herramientas de migración de idiomas (consulte Migración del software de la misión B-2 Stealth Bomber), C ++ a gran escala re-herramientas de arquitectura, herramientas de generación de código para ejecutar celdas de ensamblaje de fábricas de automóviles y muchas herramientas clásicas de ingeniería de software (cobertura de prueba, perfiladores, detección de clones, diferenciadores inteligentes). Es una base natural para refactorizar herramientas; estamos trabajando en estos: -}

Respondido el 06 de Septiembre de 11 a las 20:09

Desde que tu en cursiva usted mismo, tengo que preguntar: ¿qué es la ingeniería transcurrida? ¿Como en el tiempo transcurrido? - sehe

Eso está mal redactado, pero sí, son 15 años transcurridos de ingeniería. Cambié la palabra a "continuo" - Ira Baxter

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.