LXR Cross Referencer , generalmente conocido como LXR , es un indexador de código fuente de uso general y un buscador de referencias cruzadas para la comprensión del código que proporciona una exploración del código fuente basada en la web , con enlaces a la definición y uso de cualquier identificador .
Versión inicial | C. 1994 [1] |
---|---|
Lanzamiento estable | 2.3.5 / 20 de marzo de 2019 |
Repositorio | |
Escrito en | Perl |
Tipo | Indexador y referencia cruzada |
Licencia | GNU GPL 2 |
Sitio web | lxr |
Historia
LXR nació de la necesidad de una herramienta para mantener un ojo sintético en el kernel de Linux durante su desarrollo (de ahí su nombre original: LXR significa "Linux Cross-Referencer"). Esta herramienta es tanto más necesaria cuanto que la documentación es escasa y el número de contribuyentes es alto.
Dos estudiantes noruegos, Arne Georg Gleditsch y Per Kristian Gjermshus, que tenían curiosidad 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 los usos de las 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 fanáticos se unieron al equipo de desarrollo para darle más 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 el spin-off LXRng . Este desarrollo experimental no contiene todas las características presentes en la versión tradicional y se aparta notablemente de los principios fundacionales de LXR.
Aunque en realidad nunca se realizó ninguna comunicación en torno a la herramienta, LXR se abrió paso a través de algunas columnas de papel, por ejemplo, Linux Journal . [3] Sin embargo, al recopilar referencias a LXR en Internet, existe 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 (la referencia cruzada de Mozilla). MXR se bifurcó para satisfacer las necesidades del desarrollo de Mozilla, es decir, la navegación de código de una base de código mixta de C ++ y JavaScript . Después de años de uso de MXR, Mozilla comenzó a trabajar en una nueva herramienta con un enfoque en un mejor análisis estático y una interfaz de usuario Ajax dinámica . El resultado es DXR (la referencia cruzada de Dehydra [4] ). Una vez que DXR alcanzó la madurez, la instancia de MXR en mxr.mozilla.org se retiró.
Tecnología
LXR es minimalista y se adhiere al principio de mínimo esfuerzo.
El sesgo deliberado hacia el minimalismo evita el uso de demasiadas tecnologías diferentes. Por lo tanto, limita las dependencias y el software puede ser compatible con muchas configuraciones sin una adaptación especial.
- Las opciones de diseño incluyen lenguajes interpretados (como Java o JavaScript ) que restringen o cumplen estrictamente con HTML 4.01.
El principio de mínimo esfuerzo prohíbe la programación de herramientas si ya existe (al menos como código abierto ).
- Esto da como resultado el uso del navegador web para visualización ( HTML y CSS permiten un diseño de página elegante), 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 es realmente adecuado para el análisis sintáctico o léxico. [5]
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 dan instrucciones para Apache , Cherokee , lighttpd , Nginx y thttpd ),
- archivo fuente almacenado en un directorio real o en el repositorio del sistema de gestión de versiones (elección [6] entre CVS , Git , [7] Mercurial y Subversion ).
Uso
Después de la instalación del software, que no es una tarea trivial pero no requiere experiencia, el código fuente debe procesarse previamente y configurarse LXR para mostrarlo.
- Las diferentes versiones del código fuente se implementan como subdirectorios.
- Una alternativa almacena el código fuente en un sistema de gestión de versiones.
El código se indexa durante una segunda fase: los identificadores se recopilan y sus ubicaciones se ingresan en una base de datos. La reindexación solo es necesaria cuando se modifica el código fuente o se agrega una nueva versión.
Luego, todo lo que se necesita es iniciar un navegador web con una URL correspondiente al código fuente y navegar por los archivos a través de los hipervínculos asociados a los identificadores.
Capacidades y limitaciones
El código fuente se puede escribir en cualquier lenguaje que pueda manejar Exuberant ctags , pero los analizadores no son igualmente detallados.
Se pueden comparar dos versiones del mismo archivo una al lado de la otra con diferencias visualmente mejoradas (a través del comando diff lanzado por LXR).
Además de los hipervínculos bajo variables , un formulario permite buscar un identificador escrito por el usuario.
Para evitar las limitaciones de la fase de indexación, se puede buscar cualquier secuencia de caracteres (texto completo) a costa de un extenso recorrido de archivos de origen.
Las limitaciones de LXR son las de las herramientas de soporte, principalmente ctags Exuberant. Pero la causa principal de las dificultades proviene esencialmente de los permisos de acceso incorrectos a los archivos.
Otra limitación proviene de la elección del diseño de realizar solo análisis de código estático, en contraste con otras soluciones que hacen análisis semántico como un paso de compilación.
Un usuario avanzado puede cambiar el diseño y la representación de LXR mediante la personalización de las plantillas de página (escritas en HTML) y la hoja de estilo en cascada (CSS).
Colecciones LXR
- LXR en sí
- Navegación del kernel de Linux
- LXR (anteriormente "el Linux Cross Referencer") (ejecutando la bifurcación experimental LXRng proporcionada por lxr.linux.no)
- Navegación de kernels de Linux (ejecutó una versión LXR muy antigua hasta 2017)
- Glibc 2.3.2
- Algunos otros LXR del mismo sitio
- (los archivos solo muestran la estructura del directorio - marzo de 2016)
- Referencia cruzada de Mozilla, para varios proyectos de Mozilla.org
- LXR para Apache HTTPD
- (el archivo solo muestra la estructura del directorio - marzo de 2016)
- Referencia cruzada de KDE
- Referencia cruzada de GNOME
- (archivo no disponible - marzo de 2016)
Ver también
- OpenGrok
Referencias
- ^ a b Según fechas en el repositorio CVS de SourceForge
- ^ "Proyecto de código abierto de referencia cruzada LXR en Open Hub: colaboradores" .
- ^ Kamran Soomro (1 de junio de 2007). "Leer el código fuente de forma HTML" .
- ^ "Dehydra" . Documentos web de MDN . Consultado el 13 de noviembre de 2020 .
- ^ Un autómata de estado finito suele escanear texto (o código fuente) de izquierda a derecha sin retroceder. El uso de expresiones regulares en Perl genera posibilidades de escaneo múltiple de texto con reemplazo espurio en fragmentos ya procesados.
- ^ Inicialmente era posible usar BitKeeper , pero el soporte se detuvo (alrededor de 2005) cuando la licencia pasó a ser propietaria.
- ^ La compatibilidad con Git se ha corregido en la versión 1.0.
enlaces externos
- Página web oficial
- Código fuente en SourceForge
LXRng (horquilla)
- lxr .linux .no