SlideShare una empresa de Scribd logo
C++ Meetup Madrid
Febrero 2019
Míryam Gómez
Software Engineer
@miryamgsm
Violeta Sánchez
Software Engineer
@vio_woman
Objetivo de la
presentación
• Introducción: empresa y
productos.
• Motivación del desarrollo de
un parser de C++.
• Parser de C++ basado en
Eclipse CDT.
• Aplicaciones prácticas:
• Herramienta de merge: semanticmerge
• Control de versiones: plastic y gmaster
• Bot que resuelve conflictos de PR sin
intervención manual: mergedroid
Códice Software
Quiénes somos y
qué productos
hacemos
Códice Software
• Arrancamos en 2005 (llevamos en control de versiones 14 años!!)
• Situados en el Parque Tecnológico de Boecillo (Valladolid)
https://www.plasticscm.com/company/team.html
Clientes en más de 20 países
Financial Sector IT & Embedded SW Automobile & Transportation
Games & 3D DesignDefense & Gov.
Utilities, Logistics & Misc
Medical Devices
Marine Royale Canadienne
Productos
Distributed Version Control System
Essential tool for software development
Semantic Merge
Language aware diff & merge tool for any VCS
Mergedroid
A server side semantic merge engine tool (Beta)
Inbeta
readytolaunch
Comercial
gmaster
A Git Client Tool with all UI & Semantic Technology (Beta)
Branching/Merging + Visual
Linux GUI
OS X GUI
Muchos en vídeo juegos
https://www.plasticscm.com/games/success-stories/index.html
Gluon (Windows – artistas games)
Semantic Merge
Language aware diff & merge tool for any VCS
gmaster
A Git Client Tool with all UI & Semantic Technology (Beta)
Desarrollo de un
parser de C++
El reto a conseguir
• Principales características de PlasticSCM:
• Gestión de ramas: patrón rama por tarea.
• Sistema de merge: a nivel de estructura de directorios, ficheros y estructura dentro del fichero.
• Reto: crear una buena herramienta de merge.
• Objetivo: hacer el proceso de refactorización sencillo.
• Hasta ahora todas las herramientas de merge se basan en
texto, reconocen línea a línea sin entender el código.
El merge a resolver
Fases del merge:
• Detección de conflictos a nivel de estructura de directorios.
• Detección de conflictos de ficheros.
• Resolución de conflictos dentro de ficheros.
Así surgen nuestras herramientas de merge:
1. Xmerge: basada en texto que sabe identificar fragmentos de código movido.
2. SemanticMerge: basada en estructura. El siguiente nivel!
SemanticMerge – cómo funciona
Es una herramienta dependiente del lenguaje a procesar
Entrada
Las tres versiones del fichero, una por cada
contribuidor.
Proceso
1. Parsear código fuente para obtener las
estructuras.
2. Calcular diferencias entre las estructuras de
código para obtener los cambios.
3. Realizar el merge de los cambios para obtener
los conflictos si los hubiese.
Salida
Fichero resultado del merge.
¿Por qué desarrollar un parser de C++?
• Motivo principal: entender el código para poder mezclarlo.
• ¿Qué nos aporta?
• Mejorar las operaciones de diff y merge.
• Facilita la realización de tareas que se evitan por miedo a los conflictos.
• Incremento en la resolución de conflictos de forma automática.
• Minimizar los tiempos de integración en un proyecto.
¿Se os ocurre alguna más?
¡Quizás sí! Lo veremos más adelante 😉
La importancia de entender el código
Parser de C++ basado
en Eclipse CDT
SemanticMerge - especificación de parsers
API para parser externos
Un parser externo es una aplicación de línea de commandos que
se comunica con SemanticMerge a través de un API
SemanticMerge - especificación de parsers
¿Cómo es una sesión de parseo?
SemanticMerge - especificación de parsers
Cómo construir el árbol de declaraciones
¿Por qué usar Eclipse CDT?
Evaluación de las distintas alternativas
• Parsers disponibles: C#, VB.net (Roslyn), Java (Eclipse JDT) y C (libclang).
• Pasaron unos años, hasta que en 2017… abordamos C++!
• Estudiamos distintas alternativas:
• Antlr for C++, semanticdesigns, gccxml:
• Fueron descartadas rápidamente (la gramática no era completa, necesidad de compilar para obtener el AST, etc.)
• libclang:
• Problema: el árbol AST que generaba no era completo porque no incluía los nodos con tipos desconocidos.
• Tenía dependencia de los ficheros cabecera y de las librerías del sistema.
• Nos encontramos con el clásico problema de parseo: A B(C) ¿declaración de función o definición de objeto?
• Y es que C++ es un lenguaje dependiente del contexto.
• El proceso de parseo y análisis semántico no se puede separar, cuando encuentra un tipo desconocido el nodo no se incluyen en el
AST.
• La solución pasaría por incluir las cabeceras para poder resolver los tipos.
• En nuestro caso no es viable porque tendríamos que indicar dónde localizarlas y además estar disponibles.
• En nuestra situación no es posible porque necesitamos los 3 contribuidores y no están en disco (control de versiones).
¿Por qué usar Eclipse CDT?
Evaluación de las distintas alternativas
• Eclipse C/C++ Development Toolkit (CDT):
• Necesitamos el análisis semántico sintáctico del código para parsear todo el fichero y obtener su estructura.
• Justo lo que hace Eclipse CDT, no es un compilador sino un IDE cuyo requisito principal es el rendimiento.
• Es lo que permite al editor hacer folding, formatear un documento o mostrar la vista de outline.
• https://wiki.eclipse.org/CDT/designs/Overview_of_Parsing
• https://wiki.eclipse.org/images/c/c7/CDT_APIs_for_code_introspection.pdf
Las fases incluyen:
1. Escaneo y preprocesamiento: convierte caracteres a tokens y se hace el
preprocesamiento (expansión de macros, compilación condicional,
inclusión de cabeceras)
2. Parseo: convierte los tokens en un AST + location map.
Parser de C++ basado en Eclipse CDT
Conceptos
TranslationUnit: fichero de código fuente + cabeceras.
El árbol AST se puede analizar recorriéndolo de forma transversal
(ASTVisitor).
Entrada
Fichero de código fuente + encoding.
Proceso
1. Crear el parser.
2. Obtener el TranslationUnit.
3. Crear el ASTVisitor y establecer propiedades.
4. Lanzar el recorrido a través del árbol:
• Obtener el mapa de comentarios.
• Obtener las macros y directivas de preprocesador.
• Generar las declaraciones.
• Obtener los errores de parseo.
5. Convertir las directivas condicionales en contenedores.
Salida
Fichero de resultado con el árbol de declaraciones.
Cómo funciona
1
2
3
4
5
Parser de C++ basado en Eclipse CDT
Macros
• Hay que manejar los distintos escenarios:
¿están dentro de una declaración? ¿definen una declaración?
Directivas condicionales
• Son un grupo contenedor.
• Hay que procesar los nodos inactivos.
Comentarios
• Los comentarios son parte de la declaración.
Detección de errores de parseo
• Por ejemplo, si falta un ‘;’ al final de una instrucción
Problemas encontrados
Parser de C++ basado en Eclipse CDT
Regla de oro
Cualquier carácter del fichero tiene que estar contenido en una declaración de forma que a
partir del conjunto de las mismas se pueda construir el fichero resultado.
Check salva-vidas :P
• Comprobación de reconstrucción del fichero a partir del árbol de declaraciones, en caso de detectar
algún problema se lanza Xmerge.
Testing
• Millones de ficheros parseados de los repositorios más relevantes de GitHub.
Siguientes pasos
• Formateador de declaraciones para automatizar conflictos por cambios de formato.
Bonus track!
Aplicaciones
prácticas del parser
• Herramienta de merge:
semanticmerge
• Control de versiones:
plasticscm y gmaster
• Bot que resuelve conflictos
de PR sin intervención
manual: mergedroid
SemanticMerge (srcdiffs)
SemanticMerge (dstdiffs)
SemanticMerge (merge!)
PlasticSCM
gmaster
mergedroid
mergedroid
https://github.com/gmasterscm/gitextensions
Comentarios / Otras experiencias
THANKS
FOR YOUR
TIME

Más contenido relacionado

La actualidad más candente

Programacion c# vbnet
Programacion c# vbnetProgramacion c# vbnet
Programacion c# vbnet
Kevin Reaño
 
Preguntas de programacion
Preguntas de programacionPreguntas de programacion
Preguntas de programacion
ariannalizeeth
 
Ejercicios de test - desarrollo y programación
Ejercicios de test  -  desarrollo y programaciónEjercicios de test  -  desarrollo y programación
Ejercicios de test - desarrollo y programación
oposicionestic
 
tutorial de c++
tutorial de c++tutorial de c++
tutorial de c++
Jesus22barrera
 
Preguntas de examen1
Preguntas de examen1Preguntas de examen1
Preguntas de examen1
alexisrm11
 
Cuestionario java
Cuestionario javaCuestionario java
Cuestionario java
jaky9727
 
Cuestionario de java
Cuestionario de javaCuestionario de java
Cuestionario de java
Jenifer Monroy
 
Manual de el lenguaje de programacion c# ( español spanish) x richy
Manual de el lenguaje de programacion c# ( español spanish) x richyManual de el lenguaje de programacion c# ( español spanish) x richy
Manual de el lenguaje de programacion c# ( español spanish) x richy
Roberto Lll
 
Preguntasss
PreguntasssPreguntasss
Preguntasss
0cero
 
Introduccion a Visual C Sharp
Introduccion a Visual C SharpIntroduccion a Visual C Sharp
Introduccion a Visual C Sharp
Pedro Antonio Villalta (Pavillalta)
 
Cuestionario 40 preguntas DSAUPOO
Cuestionario 40 preguntas DSAUPOOCuestionario 40 preguntas DSAUPOO
Cuestionario 40 preguntas DSAUPOO
Michelle Peña
 
Presentación de C++
Presentación de C++Presentación de C++
Presentación de C++
Sylvert
 
Todo sobre C#
Todo sobre C#Todo sobre C#
Todo sobre C#
Ale_Hernandez
 
PRESENTACION LENGUAJE C
 PRESENTACION LENGUAJE C  PRESENTACION LENGUAJE C
PRESENTACION LENGUAJE C
Niel Velasquez
 
C++
C++ C++
Preguntas ham
Preguntas hamPreguntas ham
Preguntas ham
Frida Cordero
 
Lenguaje C (pdf)
Lenguaje C (pdf)Lenguaje C (pdf)
Lenguaje C (pdf)
Dani Gutiérrez Porset
 
Preguntas de introiducción a java
Preguntas de introiducción a javaPreguntas de introiducción a java
Preguntas de introiducción a java
Ana Ruth G H
 
Código Limpio
Código LimpioCódigo Limpio

La actualidad más candente (19)

Programacion c# vbnet
Programacion c# vbnetProgramacion c# vbnet
Programacion c# vbnet
 
Preguntas de programacion
Preguntas de programacionPreguntas de programacion
Preguntas de programacion
 
Ejercicios de test - desarrollo y programación
Ejercicios de test  -  desarrollo y programaciónEjercicios de test  -  desarrollo y programación
Ejercicios de test - desarrollo y programación
 
tutorial de c++
tutorial de c++tutorial de c++
tutorial de c++
 
Preguntas de examen1
Preguntas de examen1Preguntas de examen1
Preguntas de examen1
 
Cuestionario java
Cuestionario javaCuestionario java
Cuestionario java
 
Cuestionario de java
Cuestionario de javaCuestionario de java
Cuestionario de java
 
Manual de el lenguaje de programacion c# ( español spanish) x richy
Manual de el lenguaje de programacion c# ( español spanish) x richyManual de el lenguaje de programacion c# ( español spanish) x richy
Manual de el lenguaje de programacion c# ( español spanish) x richy
 
Preguntasss
PreguntasssPreguntasss
Preguntasss
 
Introduccion a Visual C Sharp
Introduccion a Visual C SharpIntroduccion a Visual C Sharp
Introduccion a Visual C Sharp
 
Cuestionario 40 preguntas DSAUPOO
Cuestionario 40 preguntas DSAUPOOCuestionario 40 preguntas DSAUPOO
Cuestionario 40 preguntas DSAUPOO
 
Presentación de C++
Presentación de C++Presentación de C++
Presentación de C++
 
Todo sobre C#
Todo sobre C#Todo sobre C#
Todo sobre C#
 
PRESENTACION LENGUAJE C
 PRESENTACION LENGUAJE C  PRESENTACION LENGUAJE C
PRESENTACION LENGUAJE C
 
C++
C++ C++
C++
 
Preguntas ham
Preguntas hamPreguntas ham
Preguntas ham
 
Lenguaje C (pdf)
Lenguaje C (pdf)Lenguaje C (pdf)
Lenguaje C (pdf)
 
Preguntas de introiducción a java
Preguntas de introiducción a javaPreguntas de introiducción a java
Preguntas de introiducción a java
 
Código Limpio
Código LimpioCódigo Limpio
Código Limpio
 

Similar a C++ Meetup Madrid

Tutorial C++
Tutorial C++Tutorial C++
Tutorial C++
ValeriaBerrones
 
Programación de nivel básico 1. c1.
Programación de nivel básico 1. c1.Programación de nivel básico 1. c1.
Programación de nivel básico 1. c1.
DENIRAMIREZANDRADE
 
Lenguaje c nardy y daniela
Lenguaje c nardy y danielaLenguaje c nardy y daniela
Lenguaje c nardy y daniela
nardy daniela araque peña
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C Sharp
Edgardo Martinez
 
Csharp
CsharpCsharp
Reporte_de_microsoft_visual_c#
Reporte_de_microsoft_visual_c#Reporte_de_microsoft_visual_c#
Reporte_de_microsoft_visual_c#
José García
 
20150415 roslyn
20150415 roslyn20150415 roslyn
20150415 roslyn
Ricardo González
 
Cursocpp
CursocppCursocpp
Cursocpp
zotek
 
2154086 curso-c-c-con-clase
2154086 curso-c-c-con-clase2154086 curso-c-c-con-clase
2154086 curso-c-c-con-clase
Edgar Rodriguez
 
Programación de nivel básico 1. c1. p1.
Programación de nivel básico 1. c1. p1.Programación de nivel básico 1. c1. p1.
Programación de nivel básico 1. c1. p1.
DENIRAMIREZANDRADE
 
C4model - Arquitectura de Software
C4model - Arquitectura de SoftwareC4model - Arquitectura de Software
C4model - Arquitectura de Software
Rene Guaman-Quinche
 
Manual de-c-dev
Manual de-c-devManual de-c-dev
Manual de-c-dev
grupoinformatica1
 
Cursocpp
CursocppCursocpp
Manual C++ 3ra parte
Manual C++ 3ra parteManual C++ 3ra parte
Manual C++ 3ra parte
Universidad de Guayaquil
 
/Media/tom nissim/cursocpp
/Media/tom nissim/cursocpp/Media/tom nissim/cursocpp
/Media/tom nissim/cursocpp
Tom Zambrano
 
Tutorial de visual c++
Tutorial de visual c++Tutorial de visual c++
Tutorial de visual c++
oscar020615
 
Tutorial de visual_c_
Tutorial de visual_c_Tutorial de visual_c_
Tutorial de visual_c_
oscar020615
 
Tutorial de visual c++
Tutorial de visual c++Tutorial de visual c++
Tutorial de visual c++
juliancetis109
 
Tutorial de visual C++
Tutorial de visual C++Tutorial de visual C++
Tutorial de visual C++
juliancetis109
 
C++ Introducción de elementos del lenguaje
C++ Introducción de elementos del lenguajeC++ Introducción de elementos del lenguaje
C++ Introducción de elementos del lenguaje
PedroGonzalez183426
 

Similar a C++ Meetup Madrid (20)

Tutorial C++
Tutorial C++Tutorial C++
Tutorial C++
 
Programación de nivel básico 1. c1.
Programación de nivel básico 1. c1.Programación de nivel básico 1. c1.
Programación de nivel básico 1. c1.
 
Lenguaje c nardy y daniela
Lenguaje c nardy y danielaLenguaje c nardy y daniela
Lenguaje c nardy y daniela
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C Sharp
 
Csharp
CsharpCsharp
Csharp
 
Reporte_de_microsoft_visual_c#
Reporte_de_microsoft_visual_c#Reporte_de_microsoft_visual_c#
Reporte_de_microsoft_visual_c#
 
20150415 roslyn
20150415 roslyn20150415 roslyn
20150415 roslyn
 
Cursocpp
CursocppCursocpp
Cursocpp
 
2154086 curso-c-c-con-clase
2154086 curso-c-c-con-clase2154086 curso-c-c-con-clase
2154086 curso-c-c-con-clase
 
Programación de nivel básico 1. c1. p1.
Programación de nivel básico 1. c1. p1.Programación de nivel básico 1. c1. p1.
Programación de nivel básico 1. c1. p1.
 
C4model - Arquitectura de Software
C4model - Arquitectura de SoftwareC4model - Arquitectura de Software
C4model - Arquitectura de Software
 
Manual de-c-dev
Manual de-c-devManual de-c-dev
Manual de-c-dev
 
Cursocpp
CursocppCursocpp
Cursocpp
 
Manual C++ 3ra parte
Manual C++ 3ra parteManual C++ 3ra parte
Manual C++ 3ra parte
 
/Media/tom nissim/cursocpp
/Media/tom nissim/cursocpp/Media/tom nissim/cursocpp
/Media/tom nissim/cursocpp
 
Tutorial de visual c++
Tutorial de visual c++Tutorial de visual c++
Tutorial de visual c++
 
Tutorial de visual_c_
Tutorial de visual_c_Tutorial de visual_c_
Tutorial de visual_c_
 
Tutorial de visual c++
Tutorial de visual c++Tutorial de visual c++
Tutorial de visual c++
 
Tutorial de visual C++
Tutorial de visual C++Tutorial de visual C++
Tutorial de visual C++
 
C++ Introducción de elementos del lenguaje
C++ Introducción de elementos del lenguajeC++ Introducción de elementos del lenguaje
C++ Introducción de elementos del lenguaje
 

Último

OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTOOPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
GERARDO GONZALEZ
 
PRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICA
PRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICAPRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICA
PRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICA
carmenquintana18
 
SESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtual
SESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtualSESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtual
SESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtual
JuanGavidia2
 
SISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOS
SISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOSSISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOS
SISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOS
micoltadaniel2024
 
Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...
Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...
Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...
Eliana Gomajoa
 
INVENTARIO CEROO Y DINAMICAA FABRIL.pptx
INVENTARIO CEROO Y DINAMICAA FABRIL.pptxINVENTARIO CEROO Y DINAMICAA FABRIL.pptx
INVENTARIO CEROO Y DINAMICAA FABRIL.pptx
FernandoRodrigoEscal
 
SLIDEHARE.docx..........................
SLIDEHARE.docx..........................SLIDEHARE.docx..........................
SLIDEHARE.docx..........................
azulsarase
 
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptxS09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
yamilbailonw
 
Características de los suelos como los histosoles.pptx
Características de los suelos como los histosoles.pptxCaracterísticas de los suelos como los histosoles.pptx
Características de los suelos como los histosoles.pptx
MONICADELROCIOMUNZON1
 
Informe Municipal provincial de la ciudad de Tacna
Informe Municipal provincial de la ciudad de TacnaInforme Municipal provincial de la ciudad de Tacna
Informe Municipal provincial de la ciudad de Tacna
BrusCiriloPintoApaza
 
GRAFICA POR ATRIBUTOS EN CONTROL DE LA CALIDAD.pptx
GRAFICA POR ATRIBUTOS EN CONTROL DE LA CALIDAD.pptxGRAFICA POR ATRIBUTOS EN CONTROL DE LA CALIDAD.pptx
GRAFICA POR ATRIBUTOS EN CONTROL DE LA CALIDAD.pptx
JhonathanBaptista2
 
TIA portal Bloques PLC Siemens______.pdf
TIA portal Bloques PLC Siemens______.pdfTIA portal Bloques PLC Siemens______.pdf
TIA portal Bloques PLC Siemens______.pdf
ArmandoSarco
 
Sistema de sobrealimentacion de un motor
Sistema de sobrealimentacion de un motorSistema de sobrealimentacion de un motor
Sistema de sobrealimentacion de un motor
mauriciok961
 
Aletas de Transferencia de Calor Jefferson Colina.pptx
Aletas de Transferencia de Calor Jefferson Colina.pptxAletas de Transferencia de Calor Jefferson Colina.pptx
Aletas de Transferencia de Calor Jefferson Colina.pptx
jeffersoncolina427
 
Propiedades Electricas de los Materiales
Propiedades Electricas de los MaterialesPropiedades Electricas de los Materiales
Propiedades Electricas de los Materiales
rogeliorodriguezt
 
Infografía de operaciones básicas....pdf
Infografía de operaciones básicas....pdfInfografía de operaciones básicas....pdf
Infografía de operaciones básicas....pdf
jahirrtorresa
 
Presentación transferencia de calor Jesus Morales.pdf
Presentación transferencia de calor Jesus Morales.pdfPresentación transferencia de calor Jesus Morales.pdf
Presentación transferencia de calor Jesus Morales.pdf
jdcumarem02
 
Operaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica MaizOperaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica Maiz
carolina838317
 
tema alcanos cicloalcanos de quimica.pdf
tema alcanos cicloalcanos de quimica.pdftema alcanos cicloalcanos de quimica.pdf
tema alcanos cicloalcanos de quimica.pdf
veronicaluna80
 
Sesión 03 universidad cesar vallejo 2024
Sesión 03 universidad cesar vallejo 2024Sesión 03 universidad cesar vallejo 2024
Sesión 03 universidad cesar vallejo 2024
FantasticVideo1
 

Último (20)

OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTOOPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
 
PRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICA
PRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICAPRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICA
PRIMERA Y SEGUNDA LEY DE LA TERMODINÁMICA
 
SESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtual
SESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtualSESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtual
SESIÓN 3 ÓXIDOS-HIDRÓXIDOS trabajo virtual
 
SISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOS
SISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOSSISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOS
SISTEMA AUTOMATIZADO DE LIMPIEZA PARA ACUARIOS
 
Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...
Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...
Enjoy Pasto Bot - "Tu guía virtual para disfrutar del Carnaval de Negros y Bl...
 
INVENTARIO CEROO Y DINAMICAA FABRIL.pptx
INVENTARIO CEROO Y DINAMICAA FABRIL.pptxINVENTARIO CEROO Y DINAMICAA FABRIL.pptx
INVENTARIO CEROO Y DINAMICAA FABRIL.pptx
 
SLIDEHARE.docx..........................
SLIDEHARE.docx..........................SLIDEHARE.docx..........................
SLIDEHARE.docx..........................
 
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptxS09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
 
Características de los suelos como los histosoles.pptx
Características de los suelos como los histosoles.pptxCaracterísticas de los suelos como los histosoles.pptx
Características de los suelos como los histosoles.pptx
 
Informe Municipal provincial de la ciudad de Tacna
Informe Municipal provincial de la ciudad de TacnaInforme Municipal provincial de la ciudad de Tacna
Informe Municipal provincial de la ciudad de Tacna
 
GRAFICA POR ATRIBUTOS EN CONTROL DE LA CALIDAD.pptx
GRAFICA POR ATRIBUTOS EN CONTROL DE LA CALIDAD.pptxGRAFICA POR ATRIBUTOS EN CONTROL DE LA CALIDAD.pptx
GRAFICA POR ATRIBUTOS EN CONTROL DE LA CALIDAD.pptx
 
TIA portal Bloques PLC Siemens______.pdf
TIA portal Bloques PLC Siemens______.pdfTIA portal Bloques PLC Siemens______.pdf
TIA portal Bloques PLC Siemens______.pdf
 
Sistema de sobrealimentacion de un motor
Sistema de sobrealimentacion de un motorSistema de sobrealimentacion de un motor
Sistema de sobrealimentacion de un motor
 
Aletas de Transferencia de Calor Jefferson Colina.pptx
Aletas de Transferencia de Calor Jefferson Colina.pptxAletas de Transferencia de Calor Jefferson Colina.pptx
Aletas de Transferencia de Calor Jefferson Colina.pptx
 
Propiedades Electricas de los Materiales
Propiedades Electricas de los MaterialesPropiedades Electricas de los Materiales
Propiedades Electricas de los Materiales
 
Infografía de operaciones básicas....pdf
Infografía de operaciones básicas....pdfInfografía de operaciones básicas....pdf
Infografía de operaciones básicas....pdf
 
Presentación transferencia de calor Jesus Morales.pdf
Presentación transferencia de calor Jesus Morales.pdfPresentación transferencia de calor Jesus Morales.pdf
Presentación transferencia de calor Jesus Morales.pdf
 
Operaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica MaizOperaciones Básicas creadora Veronica Maiz
Operaciones Básicas creadora Veronica Maiz
 
tema alcanos cicloalcanos de quimica.pdf
tema alcanos cicloalcanos de quimica.pdftema alcanos cicloalcanos de quimica.pdf
tema alcanos cicloalcanos de quimica.pdf
 
Sesión 03 universidad cesar vallejo 2024
Sesión 03 universidad cesar vallejo 2024Sesión 03 universidad cesar vallejo 2024
Sesión 03 universidad cesar vallejo 2024
 

C++ Meetup Madrid

  • 2. Míryam Gómez Software Engineer @miryamgsm Violeta Sánchez Software Engineer @vio_woman
  • 3. Objetivo de la presentación • Introducción: empresa y productos. • Motivación del desarrollo de un parser de C++. • Parser de C++ basado en Eclipse CDT. • Aplicaciones prácticas: • Herramienta de merge: semanticmerge • Control de versiones: plastic y gmaster • Bot que resuelve conflictos de PR sin intervención manual: mergedroid
  • 4. Códice Software Quiénes somos y qué productos hacemos
  • 5. Códice Software • Arrancamos en 2005 (llevamos en control de versiones 14 años!!) • Situados en el Parque Tecnológico de Boecillo (Valladolid)
  • 7. Clientes en más de 20 países Financial Sector IT & Embedded SW Automobile & Transportation Games & 3D DesignDefense & Gov. Utilities, Logistics & Misc Medical Devices Marine Royale Canadienne
  • 8. Productos Distributed Version Control System Essential tool for software development Semantic Merge Language aware diff & merge tool for any VCS Mergedroid A server side semantic merge engine tool (Beta) Inbeta readytolaunch Comercial gmaster A Git Client Tool with all UI & Semantic Technology (Beta)
  • 12. Muchos en vídeo juegos https://www.plasticscm.com/games/success-stories/index.html
  • 13. Gluon (Windows – artistas games)
  • 14.
  • 15. Semantic Merge Language aware diff & merge tool for any VCS
  • 16. gmaster A Git Client Tool with all UI & Semantic Technology (Beta)
  • 18. El reto a conseguir • Principales características de PlasticSCM: • Gestión de ramas: patrón rama por tarea. • Sistema de merge: a nivel de estructura de directorios, ficheros y estructura dentro del fichero. • Reto: crear una buena herramienta de merge. • Objetivo: hacer el proceso de refactorización sencillo. • Hasta ahora todas las herramientas de merge se basan en texto, reconocen línea a línea sin entender el código.
  • 19. El merge a resolver Fases del merge: • Detección de conflictos a nivel de estructura de directorios. • Detección de conflictos de ficheros. • Resolución de conflictos dentro de ficheros. Así surgen nuestras herramientas de merge: 1. Xmerge: basada en texto que sabe identificar fragmentos de código movido. 2. SemanticMerge: basada en estructura. El siguiente nivel!
  • 20. SemanticMerge – cómo funciona Es una herramienta dependiente del lenguaje a procesar Entrada Las tres versiones del fichero, una por cada contribuidor. Proceso 1. Parsear código fuente para obtener las estructuras. 2. Calcular diferencias entre las estructuras de código para obtener los cambios. 3. Realizar el merge de los cambios para obtener los conflictos si los hubiese. Salida Fichero resultado del merge.
  • 21. ¿Por qué desarrollar un parser de C++? • Motivo principal: entender el código para poder mezclarlo. • ¿Qué nos aporta? • Mejorar las operaciones de diff y merge. • Facilita la realización de tareas que se evitan por miedo a los conflictos. • Incremento en la resolución de conflictos de forma automática. • Minimizar los tiempos de integración en un proyecto. ¿Se os ocurre alguna más? ¡Quizás sí! Lo veremos más adelante 😉 La importancia de entender el código
  • 22. Parser de C++ basado en Eclipse CDT
  • 23. SemanticMerge - especificación de parsers API para parser externos Un parser externo es una aplicación de línea de commandos que se comunica con SemanticMerge a través de un API
  • 24. SemanticMerge - especificación de parsers ¿Cómo es una sesión de parseo?
  • 25. SemanticMerge - especificación de parsers Cómo construir el árbol de declaraciones
  • 26. ¿Por qué usar Eclipse CDT? Evaluación de las distintas alternativas • Parsers disponibles: C#, VB.net (Roslyn), Java (Eclipse JDT) y C (libclang). • Pasaron unos años, hasta que en 2017… abordamos C++! • Estudiamos distintas alternativas: • Antlr for C++, semanticdesigns, gccxml: • Fueron descartadas rápidamente (la gramática no era completa, necesidad de compilar para obtener el AST, etc.) • libclang: • Problema: el árbol AST que generaba no era completo porque no incluía los nodos con tipos desconocidos. • Tenía dependencia de los ficheros cabecera y de las librerías del sistema. • Nos encontramos con el clásico problema de parseo: A B(C) ¿declaración de función o definición de objeto? • Y es que C++ es un lenguaje dependiente del contexto. • El proceso de parseo y análisis semántico no se puede separar, cuando encuentra un tipo desconocido el nodo no se incluyen en el AST. • La solución pasaría por incluir las cabeceras para poder resolver los tipos. • En nuestro caso no es viable porque tendríamos que indicar dónde localizarlas y además estar disponibles. • En nuestra situación no es posible porque necesitamos los 3 contribuidores y no están en disco (control de versiones).
  • 27. ¿Por qué usar Eclipse CDT? Evaluación de las distintas alternativas • Eclipse C/C++ Development Toolkit (CDT): • Necesitamos el análisis semántico sintáctico del código para parsear todo el fichero y obtener su estructura. • Justo lo que hace Eclipse CDT, no es un compilador sino un IDE cuyo requisito principal es el rendimiento. • Es lo que permite al editor hacer folding, formatear un documento o mostrar la vista de outline. • https://wiki.eclipse.org/CDT/designs/Overview_of_Parsing • https://wiki.eclipse.org/images/c/c7/CDT_APIs_for_code_introspection.pdf Las fases incluyen: 1. Escaneo y preprocesamiento: convierte caracteres a tokens y se hace el preprocesamiento (expansión de macros, compilación condicional, inclusión de cabeceras) 2. Parseo: convierte los tokens en un AST + location map.
  • 28. Parser de C++ basado en Eclipse CDT Conceptos TranslationUnit: fichero de código fuente + cabeceras. El árbol AST se puede analizar recorriéndolo de forma transversal (ASTVisitor). Entrada Fichero de código fuente + encoding. Proceso 1. Crear el parser. 2. Obtener el TranslationUnit. 3. Crear el ASTVisitor y establecer propiedades. 4. Lanzar el recorrido a través del árbol: • Obtener el mapa de comentarios. • Obtener las macros y directivas de preprocesador. • Generar las declaraciones. • Obtener los errores de parseo. 5. Convertir las directivas condicionales en contenedores. Salida Fichero de resultado con el árbol de declaraciones. Cómo funciona 1 2 3 4 5
  • 29. Parser de C++ basado en Eclipse CDT Macros • Hay que manejar los distintos escenarios: ¿están dentro de una declaración? ¿definen una declaración? Directivas condicionales • Son un grupo contenedor. • Hay que procesar los nodos inactivos. Comentarios • Los comentarios son parte de la declaración. Detección de errores de parseo • Por ejemplo, si falta un ‘;’ al final de una instrucción Problemas encontrados
  • 30. Parser de C++ basado en Eclipse CDT Regla de oro Cualquier carácter del fichero tiene que estar contenido en una declaración de forma que a partir del conjunto de las mismas se pueda construir el fichero resultado. Check salva-vidas :P • Comprobación de reconstrucción del fichero a partir del árbol de declaraciones, en caso de detectar algún problema se lanza Xmerge. Testing • Millones de ficheros parseados de los repositorios más relevantes de GitHub. Siguientes pasos • Formateador de declaraciones para automatizar conflictos por cambios de formato. Bonus track!
  • 31. Aplicaciones prácticas del parser • Herramienta de merge: semanticmerge • Control de versiones: plasticscm y gmaster • Bot que resuelve conflictos de PR sin intervención manual: mergedroid
  • 39. Comentarios / Otras experiencias