Coccinelle ( que significa mariquita en francés ) es una herramienta de código abierto para comparar y transformar el código fuente de programas escritos en el lenguaje de programación C.
Utilidad
Coccinelle se utilizó inicialmente para ayudar en la evolución del núcleo de Linux , proporcionando soporte para cambios en las interfaces de programación de aplicaciones (API) de las bibliotecas, como cambiar el nombre de una función , agregar un argumento de función cuyo valor depende de algún modo del contexto y reorganizar una estructura de datos .
También puede utilizarse para encontrar patrones de programación defectuosos en el código (es decir, fragmentos de código erróneos con alta probabilidad, como una posible desreferenciación de puntero nulo) sin transformarlos. Por lo tanto, la función de coccinelle es similar a la de las herramientas de análisis estático . Ejemplos de este uso se encuentran en las aplicaciones de la herramienta herodotos , que realiza un seguimiento de las advertencias generadas por coccinelle . [ 2 ] [ 3 ]
El apoyo a Coccinelle lo proporciona IRILL . La financiación para su desarrollo ha sido aportada por la Agencia Nacional de Investigación (Francia), el Consejo Danés de Investigación para las Ciencias de la Tecnología y la Producción e INRIA .
El código fuente de Coccinelle está licenciado bajo los términos de la versión 2 de la Licencia Pública General de GNU (GPL).
Lenguaje de parches semánticos
El código fuente que se va a comparar o reemplazar se especifica mediante una sintaxis de "parche semántico" basada en la sintaxis de parche . [ 4 ] El patrón del lenguaje de parche semántico ( SmPL ) se asemeja a una diff unificada con declaraciones similares a las de C. [ 5 ] [ 6 ]
Ejemplo
@@ bloqueo de expresión, banderas; expresión urb; @@spin_lock_irqsave(lock, flags); <... - usb_submit_urb(urb) + usb_submit_urb(urb, GFP_ATOMIC) ...> spin_unlock_irqrestore(lock, flags); @@ expresión urb; @@- usb_submit_urb(urb) + usb_submit_urb(urb, GFP_KERNEL)Referencias
- ↑ "Coccinelle: Una herramienta de comparación y transformación de programas para código de sistemas" . coccinelle.gitlabpages.inria.fr . Consultado el 14 de julio de 2025 .
- ↑ Palix, Nicolas; Lawall, Julia ; Muller, Gilles (2010). "Seguimiento de patrones de código en múltiples versiones de software con Herodotos" (PDF) . Actas de la 9.ª Conferencia Internacional sobre Desarrollo de Software Orientado a Aspectos (PDF) . ACM. págs. 169–180 . doi : 10.1145/1739230.1739250 . ISBN 9781605589589. S2CID 1082611 .
- ↑ Nicolás Palix. «Nicolás Palix: Heródoto» .
- ↑ Padioleau, Yoann; Lawall, Julia ; Muller, Gilles (2007). "Parches semánticos, documentación y automatización de evoluciones colaterales en controladores de dispositivos Linux" (PDF) . coccinelle.gitlabpages.inria.fr . Consultado el 29 de agosto de 2020 .
- ↑ Valerie Henson (2009-01-20). "Parcheo semántico con Coccinelle" . Linux Weekly News . Recuperado el 25 de abril de 2011 .
- ↑ Wolfram Sang (30 de marzo de 2010). "Desarrollo evolutivo de un parche semántico usando Coccinelle" . Linux Weekly News . Consultado el 25 de abril de 2011 .
Enlaces externos
- Repositorio de código fuente en GitHub
- Descarga oficial más reciente y estable
- Artículos que describen el uso de Coccinelle
- Coccinelería: Galería de parches semánticos
- Refactorización de código
- Software que utiliza la Licencia Pública General de GNU.
- Herramientas de análisis estático de programas