LXR Cross Referencer , conocido habitualmente como LXR , es un indexador y referenciador cruzado de código fuente de propósito general para la comprensión del código que proporciona una navegación web del código fuente, con enlaces a la definición y el uso de cualquier identificador .
Historia
LXR surgió de la necesidad de una herramienta que permitiera supervisar de forma sintética el desarrollo del kernel de Linux (de ahí su nombre original: LXR significaba "Linux Cross-Referencer"). Esta herramienta resulta aún más necesaria debido a la escasez de documentación y al elevado número de colaboradores.
Dos estudiantes noruegos, Arne Georg Gleditsch y Per Kristian Gjermshus, curiosos por la arquitectura de Linux , comenzaron a escribir un pequeño programa que mostraba sus archivos a través de un navegador web y mostraba el uso de variables después de hacer clic en el nombre. Conscientes del interés general, lo publicaron rápidamente en SourceForge (¿ya en 1994? [ 1 ] ).
Con el paso del tiempo, los fans se unieron al equipo de desarrollo para dar mayor madurez al código; sin embargo, su número nunca superó los diez. [ 2 ] Con estas características, LXR es un proyecto típico alojado en SourceForge , pero exhibe una duración de vida excepcional entre los proyectos pequeños.
Uno de los creadores iniciales exploró nuevas tecnologías, dando origen al proyecto derivado LXRng . Este desarrollo experimental no incluye todas las funciones presentes en la versión tradicional y se distancia notablemente de los principios fundacionales de LXR.
Aunque nunca se hizo realmente ninguna comunicación en torno a la herramienta, LXR se abrió paso a través de algunas columnas impresas, por ejemplo Linux Journal . [ 3 ] Sin embargo, al recopilar referencias a LXR en Internet, hay ambigüedad entre la herramienta en sí y las instancias de LXR que muestran código fuente indexado (ya que muchos sitios usan "LXR" en su sentido original de "Linux Cross-Referencer").
Después de adoptar LXR para indexar el código fuente de Mozilla Application Suite , Mozilla bifurcó LXR en MXR (Mozilla Cross Reference). MXR se bifurcó para satisfacer las necesidades de desarrollo de Mozilla, concretamente la navegación de código en una base de código mixta de C++ y JavaScript . Tras años de uso de MXR, Mozilla comenzó a trabajar en una nueva herramienta centrada en un mejor análisis estático y una interfaz de usuario dinámica Ajax . El resultado es DXR (Dehydra Cross Reference [ 4 ] ). Una vez que DXR alcanzó la madurez, la instancia de MXR en mxr.mozilla.org se desactivó. Posteriormente, DXR se declaró obsoleto y se abandonó en 2020. [ 5 ]
Tecnología
LXR es minimalista y se adhiere al principio del mínimo esfuerzo.
La marcada tendencia hacia el minimalismo evita el uso de demasiadas tecnologías diferentes. De este modo, se limitan las dependencias y el software puede ser compatible con múltiples configuraciones sin necesidad de adaptaciones especiales.
- Las opciones de diseño incluyen lenguajes interpretados (como Java o JavaScript ) que prohíben o exigen un cumplimiento estricto de HTML 4.01.
El principio del mínimo esfuerzo prohíbe la programación de herramientas si ya existen (al menos como software de código abierto ).
- Esto da como resultado el uso del navegador web para la visualización ( HTML y CSS permiten un diseño de página sofisticado), definiciones y referencias almacenadas en una base de datos relacional disponible y análisis de archivos con la herramienta Exuberant ctags .
LXR está escrito en Perl , una opción práctica para scripts CGI , pero no realmente adecuada para el análisis léxico o sintáctico. [ 6 ]
LXR intenta imponer la menor cantidad de restricciones posible:
- varias opciones de bases de datos: MySQL , PostgreSQL , SQLite u Oracle ,
- opciones para la búsqueda de texto completo entre Glimpse y SWISH-E ,
- Elección libre para el servidor HTTP siempre que pueda ejecutar scripts CGI (se proporcionan instrucciones para Apache , Cherokee , lighttpd , Nginx y thttpd ),
- archivo fuente almacenado en el directorio real o en el repositorio del sistema de gestión de versiones (elección [ 7 ] entre CVS , Git , [ 8 ] Mercurial y Subversion ).
Uso
Tras la instalación del software, que no es una tarea sencilla pero no requiere conocimientos especializados, es necesario preprocesar el código fuente y configurar LXR para que lo muestre.
- Las diferentes versiones del código fuente están implementadas como subdirectorios.
- Otra alternativa es almacenar el código fuente en un sistema de gestión de versiones.
El código se indexa durante una segunda fase: se recopilan los identificadores y se registran sus ubicaciones en una base de datos. La reindexación solo es necesaria cuando se modifica el código fuente o se añade una nueva versión.
Posteriormente, basta con abrir un navegador web con la URL correspondiente al código fuente y navegar por los archivos mediante los hipervínculos asociados a los identificadores.
Capacidades y limitaciones
El código fuente puede escribirse en cualquier lenguaje que Exuberant ctags pueda manejar, pero los analizadores no son igual de precisos.
Se pueden comparar dos versiones del mismo archivo una al lado de la otra, resaltando visualmente las diferencias (mediante el comando diff que ejecuta LXR).
Además de los hipervínculos que aparecen en las variables , un formulario permite buscar un identificador introducido por el usuario.
Para sortear las limitaciones de la fase de indexación, se puede buscar cualquier secuencia de caracteres (texto completo) a costa de un recorrido exhaustivo de los archivos fuente.
Las limitaciones de LXR son propias de las herramientas de soporte, principalmente Exuberant ctags. Sin embargo, la causa principal de las dificultades radica esencialmente en permisos de acceso incorrectos a los archivos.
Otra limitación proviene de la decisión de diseño de realizar únicamente análisis de código estático, a diferencia de otras soluciones que realizan análisis semántico como un paso de compilación,
Un usuario avanzado puede modificar el diseño y la representación de LXR personalizando las plantillas de página (escritas en HTML) y las hojas de estilo en cascada (CSS).
Colecciones LXR
- LXR en sí mismo
- Navegación del kernel de Linux
- LXR (anteriormente "el Referenciador Cruzado de Linux") (ejecutando la bifurcación experimental LXRng proporcionada por lxr.linux.no)
- Navegación por núcleos de Linux Archivado el 19/11/2016 en Wayback Machine (ejecutó una versión muy antigua de LXR hasta 2017)
- Glibc 2.3.2
- Algunos otros LXR del mismo sitio
- (Los archivos solo muestran la estructura de directorios - marzo de 2016)
- Referencia cruzada de Mozilla, para varios proyectos de Mozilla.org. Archivado el 5 de julio de 2018 en Wayback Machine.
- LXR para Apache HTTPD
- (El archivo solo muestra la estructura de directorios - marzo de 2016)
- Referencia cruzada de KDE
- Referencia cruzada de GNOME
- (Archivo no disponible - marzo de 2016)
Véase también
Referencias
- 1 2 Según las fechas en el repositorio CVS de SourceForge
- ↑ "Proyecto de código abierto LXR Cross Referencer en Open Hub: Colaboradores" .
- ↑ Kamran Soomro (1 de junio de 2007). "Leer el código fuente al estilo HTML" .
- ↑ "Dehydra" . 4 de noviembre de 2020. Archivado del original el 18 de mayo de 2021. Consultado el 13 de noviembre de 2020 .
- ↑ "Añadir un banner sobre la desactivación de DXR" . Archivado del original el 12 de marzo de 2023. Consultado el 7 de noviembre de 2023 .
- ↑ Un autómata de estados finitos generalmente escanea el texto (o el código fuente) de izquierda a derecha sin retroceder. El uso de expresiones regulares en Perl conlleva la posibilidad de escaneos múltiples del texto con reemplazos espurios en fragmentos ya procesados.
- ↑ Inicialmente era posible usar BitKeeper , pero el soporte cesó (alrededor de 2005) cuando la licencia se convirtió en propietaria.
- ↑ El soporte para Git se ha corregido en la versión 1.0.
Enlaces externos
- Sitio web oficial

- Código fuente en SourceForge
LXRng (horquilla)
- lxr
.linux .no
- Herramientas de comprensión de código
- Herramientas de navegación de código
- Motores de búsqueda de código