Coccinelle ( Francés para la mariquita ) es un código abierto utilidad para adaptar y transformar el código fuente de los programas escritos en C lenguaje de programación .
Lanzamiento estable | 1.1.0 [1] / 25 de febrero de 2021 |
---|---|
Repositorio | |
Escrito en | OCaml y Python |
Tipo | Análisis de programa estático |
Licencia | GPLv2 |
Sitio web | coccinelle |
Utilidad
Coccinelle se usó inicialmente para ayudar a la evolución del kernel de Linux , proporcionando soporte para cambios en las interfaces de programación de aplicaciones (API) de la biblioteca , como cambiar el nombre de una función , agregar un argumento de función cuyo valor depende de alguna manera del contexto y reorganizar una estructura de datos .
También se puede usar para encontrar patrones de programación defectuosos en el código (es decir, fragmentos de código que son erróneos con alta probabilidad, como una posible desreferencia del puntero NULL) sin transformarlos. Entonces , el papel de coccinelle se acerca al de las herramientas de análisis estático . Ejemplos de dicho uso son proporcionados por las aplicaciones de la herramienta herodotos , que realiza un seguimiento de las advertencias generadas por coccinelle . [2] [3]
El soporte para Coccinelle es proporcionado por IRILL . La financiación para el desarrollo ha sido proporcionada por la Agence Nationale de la Recherche (Francia), el Consejo Danés de Investigación en Tecnología y Ciencias de la Producción e INRIA .
El código fuente de Coccinelle tiene licencia según los términos de la versión 2 de la Licencia Pública General GNU (GPL).
Lenguaje de parche semántico
El código fuente que se va a emparejar o reemplazar se especifica utilizando una sintaxis de "parche semántico" basada en la sintaxis del parche . [4] El patrón de Lenguaje de Parches Semánticos ( SmPL ) se asemeja a una diferencia unificada con declaraciones de tipo C. [5] [6]
Ejemplo
@@bloqueo de expresión, banderas;expresión urb;@@ spin_lock_irqsave (bloqueo, banderas); <...- usb_submit_urb (urb) + usb_submit_urb (urb, GFP_ATOMIC) ...> spin_unlock_irqrestore (bloqueo, banderas);@@expresión urb;@@- usb_submit_urb (urb) + usb_submit_urb (urb, GFP_KERNEL)
Referencias
- ^ "Coccinelle: una herramienta de transformación y correspondencia de programas para el código de sistemas" . coccinelle.gitlabpages.inria.fr . Consultado el 9 de marzo de 2021 .
- ^ Palix, Nicolas; Lawall, Julia; Muller, Gilles (2010). "Seguimiento de patrones de código sobre múltiples versiones de software con Herodotos" (PDF) . Actas de la 9ª Conferencia Internacional sobre Desarrollo de Software Orientado a Aspectos . ACM: 169–180. doi : 10.1145 / 1739230.1739250 .
- ^ Nicolas Palix. "Nicolás Palix: Herodotos" .
- ^ 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 (20 de enero de 2009). "Parcheado semántico con Coccinelle" . Noticias semanales de Linux . Consultado el 25 de abril de 2011 .
- ^ Wolfram Sang (30 de marzo de 2010). "Desarrollo evolutivo de un parche semántico utilizando Coccinelle" . Noticias semanales de Linux . Consultado el 25 de abril de 2011 .