HN presenta: Spray, un depurador de C en el que un joven de 17 años invirtió 6 meses de desarrollo
(github.com/d4ckard)- Spray es un depurador pequeño para código C, una herramienta que mantiene sus funciones simples y fáciles de entender para controlar programas en ejecución e inspeccionar o modificar su estado
- Las funciones compatibles incluyen breakpoints por función, línea de archivo o dirección; impresión y configuración de variables, memoria por dirección y registros; resaltado de sintaxis de C; backtrace; stepping por instrucción, función o línea; y filtros de formato para la salida de comandos
- Los comandos del REPL son
print/set,break/delete,continue,next,step,leave,inst,backtrace, y permiten controlar la ejecución además de leer y escribir valores - Después de
printysetse pueden agregar filtros con una tubería (|), y condec,hex,addr,bits,bytes,deref/*se puede mostrar el mismo valor de 64 bits en distintos formatos o hacer desreferenciación de direcciones - Para compilarlo se necesitan CHICKEN Scheme y libdwarf; después de clonar también los submódulos y ejecutar
make, se genera el binariosprayen el directoriobuild - El binario objetivo de depuración debe compilarse con la bandera
-gpara incluir información de depuración, y conviene desactivar las optimizaciones para obtener la mejor salida posible - Spray solo ha sido probado con Clang; como cada compilador genera de forma distinta la información de depuración para el mismo código, los programas que se vayan a depurar con Spray deben compilarse con
clang - En la hoja de ruta quedan pendientes la impresión y modificación de estructuras compuestas, el resaltado de sintaxis para estructuras compuestas, backtrace basado en DWARF en lugar de frame pointers, funciones inline, carga de bibliotecas externas y captura de señales enviadas al programa que se está depurando
1 comentarios
Opiniones de Hacker News
Está especialmente limpio, consistente y bien modularizado, y aborda problemas que requieren un conocimiento bastante profundo de formatos binarios y APIs del kernel
A muchos programadores “senior” les costaría construir algo así incluso a nivel conceptual, así que es justo lo contrario de “los chicos de hoy en día...”
Me da curiosidad cómo alguien de 17 años adquiere este nivel de conocimiento. ¿Libros, pares, clubes de programación, padres programadores o algo así?
Con curiosidad pura, la gran condición de simplemente “poder acceder” al hardware necesario, y unos cuantos libros y revistas, se puede llegar bastante lejos
Mis padres no eran programadores, pero mi papá compró una computadora temprano, en 1984, y después pudo traer a casa compiladores como TurboPascal y C++ desde su trabajo para que yo experimentara
Aprendí sobre todo con revistas y libros, más adelante tuve algo de contacto con otros de mi edad en la escena demoscene, y también compraba por correo discos con documentación (https://fr.wikipedia.org/wiki/DP_Tool_Club). Por ejemplo, materiales como https://en.wikipedia.org/wiki/Ralf_Brown%27s_Interrupt_List
Fui iterando poco a poco construyendo cosas pequeñas: un toolkit de ventanas para CGA, un clon de Tetris, un clon de Bomberman, software de FFT, y al final hasta renderizado 3D en tiempo real con renderizado Phong hecho solo por software, sin FPU (https://github.com/thbar/demomaking#obez-1995)
En la escena demoscene me crucé por casualidad con otros adolescentes que hacían lo mismo, así que no era un caso aislado del todo
Hoy en día, un chico curioso probablemente podría llegar mucho más lejos si esa curiosidad recibe el impulso adecuado
Y sí, acertaste: mi papá es científico de la computación
Algunos chicos de verdad son impresionantes. Yo a esa edad me frustré aprendiendo C++ hasta ponerme a llorar
Qué genial. Ojalá yo hubiera tenido ese nivel de dedicación cuando era joven
Te recomendaría probar programas como Google Summer of Code, KDE Season of Code, Linux Foundation LFX y X.org EVoC
Hay muchos problemas interesantes que vale la pena intentar resolver. Ojalá hubiera sabido de esto cuando era estudiante; ahora trabajo tiempo completo y no tengo tiempo para contribuir a open source
Sigue así
Le di una primera mirada rápida al proyecto y se ve bien organizado. Excelente
Me da curiosidad cuánto tiempo llevas programando y con qué lenguaje empezaste. Conozco bastantes desarrolladores varias décadas mayores que tú que todavía no saben usar Makefile[1]
También me intriga cuál es la intención de los emojis inline en el código fuente. ¿Es algo que hacen todos los chicos cool hoy en día, o buscas que la gente sea más consciente de la entrada no ASCII?
[1]: todavía hay más gente que no usa ni entiende objetivos generados dinámicamente
Lo de los emojis fue como una broma que duró más o menos una semana. Siento que en Rust se ven mucho más seguido. No me molesté en quitarlos
El emoji de insecto cerca del PID me parece divertido. Los que están en comentarios quizá desaparezcan algún día. Dicho eso, hasta ahora no he tenido problemas con editores, y Helix, Emacs y VSCode funcionan bien
También me pregunto si debería desactivar la impresión de emojis en la salida estándar del REPL cuando los colores de la terminal están desactivados
Felicidades, y mucha suerte con tus proyectos
Los compiladores fueron una de las primeras madrigueras de conejo que me hicieron interesarme en la computación
Uno de los libros que leí una y otra vez, y que ahora está disponible gratis, quizá valga la pena sumarlo a tu lista de lectura, aunque sea sobre compiladores y no sobre depuración
“Compiler Design in C”
https://holub.com/compiler/
Es un libro algo viejo, pero puede resultar interesante
Por desgracia, muchos libros son demasiado de torre de marfil
Es muy impresionante tener este nivel de conocimiento y madurez a los 17
Los temas que manejas y con los que experimentas son del tipo que se espera a nivel de licenciatura, y aun dentro de eso este proyecto se siente más cercano a una materia de posgrado
Mis respetos, y te deseo una carrera exitosa
En unos años seguirá siendo un entusiasta joven de la tecnología, pero para entonces probablemente pueda hacer proyectos aún más impresionantes
Cuando llegue ese momento, quizá ya no sea tan evidente cuánto iba adelantado a esta edad. Hay gente muy inteligente que empieza en sus 20 y también hace cosas impresionantes, y a la misma edad la mayoría de los observadores probablemente los verá como pares
Aun así, esa ventaja temprana puede seguir siendo una ventaja injusta que se mantenga
En algunos años o décadas podría revelarse como una especie de “arma secreta”
Me gusta leer código de programadores jóvenes. Es interesante ver cómo diseñan el conjunto cuando tienen un nivel de conocimiento bastante alto pero todavía no cuentan con años de experiencia
El autor parece alguien que aprende rápido, y como resultado de seis meses de trabajo está excelente
Al parecer los chicos de 17 todavía saben lo que es un CD
Quizá todavía no haga falta retirar el ícono de guardar en disquete :P
Está bien. Recuerdo que a esa edad, en Turbo Pascal, metí ensamblador optimizado a mano dentro del código de dibujo real para hacer una biblioteca de gráficos 2D
Pero eso fue antes de descubrir internet, así que aunque construirlo fue divertido, terminó como un proyecto personal que no se usó en ningún lado
Es excelente que él haya llegado al siguiente paso: convertir un proyecto personal en algo que otras personas puedan ver y quizá incluso usar directamente. En general está muy ordenado, bien comentado y el README es claro
Publicar algo al mundo puede dar miedo, pero ayuda recordar que lo que la gente dice, especialmente cuando se trata de ti, habla tanto de ellos mismos como de tu trabajo
Además, en realidad me interesa más Motes que este proyecto, así que voy a probarlo ahora mismo :)
Puede haber comportamientos raros en el plugin de Emacs. Aun así, los scripts me han funcionado perfectamente durante las últimas semanas
Ojalá te guste :D
Genial
Esta noche voy a clonar el código para revisarlo
Como mis intereses son parecidos, me gustaría contribuir a este proyecto
Dejé comentarios en la mayoría de los lugares, aunque no sé si todos serán de ayuda
Un depurador es especialmente difícil de escribir, y este está bastante bien