[ubuntu-bo] [OFFTOPIC] Una pregunta, ¿Qué se necesita hacer para crear un IDE?
Mario César Señoranis Ayala
mariocesar.c50 en gmail.com
Lun Mayo 10 05:13:16 BST 2010
El 09/05/10 23:50, David Quiroga escribió:
> Nota: Estas son mis ideas sobre una IDE, No se si es asi como se hacen
> en el mundo real :)
>
> Dividiria la IDE en dos componentes: Core e UI
> Para hacer el core es necesario tener teoria de parseo y lexicográfia
> de lenguajes. (teoria de compiladores y automatas finitos)
> Es necesario tener un modulo de parser. Este intrepretará el lenguaje
> (identificar simbolos, palabras reservadas, etc) y el contexto en el
> cual están (gramática).
> La UI es el frontend y donde reside el codigo... son parte de este
> componente el "outline" y tambien el resaltado "highlight"
> Esta es la visión mas simplista y básica de una IDE
Excelente! el parser como comentas es fundamental interpretar el
lenguaje y su "gramatica", acotando que es fundamental para el
"autocompletado" tipica funcion de los IDES, la inspección a las
librerías, añadir a eso la documentación y conexion con el componente
UI. Este aspecto en especial me fascina y me tiene pensando, cual es la
forma más optima de leer toda las librerias, modulos, de un ambiente. De
forma que esa información se muestre de forma instantanea
> Otros elementos fundamentales son claro, debugger, compilador, y la
> herramienta de construccion "build"
Añadiria Profiling, aunque es un pedido personal creo, no se si es común
para todos. :-)
> Imaginemos que usaremos cmake, gcc y gdb. El lenguaje soportado será
> ansi c...
> El core descompondrá el código (mientras se escribe o cuando lee de
> disco) en "tokens" que serán identificados como identificadores,
> constantes, simbolos, operaciones, palabras reservadas, etc...
> pudiendo asi asignar un tipo a cada token
> clase token
> el token en si (cadena de caracteres)
> el tipo del token (esta será usada por la UI para dibujar el resaltado)
> ...
> fin clase.
> La UI toma estos datos y los representa graficamente.
> Cada herramienta adicional debe tener un wrapper dentro del Ide
> (build, compile, debug) que da instrucciones a esta herramienta y
> recibe el resultado y lo exibe como sea conveniente
>
> No es una tarea facil, pero seguramente divertida...
> para gran parte del proyecto se podria usar SCintilla que ya ofrece
> gran parte del control de texto, resaltado, etc listo para ser usado.
Usando cosas más actuales :-) las librerias de GTKSourceView an tenido
una actividad interesante http://projects.gnome.org/gtksourceview/
Esto plantea una pregunta más, jugamos a la misma estrategia de otros
IDES, hacer un IDE que funcione en varios Escritorios/Sistemas
Operativos, o hacer uno especifico para una Plataforma, Linux por
ejemplo. Sera interesante usar las caracteristicas particulares de la
plataforma para optimizar este *hipotetico* IDE, como llamadas a la api
del Kernel para optimizar la ordenación, parseo, usar inotify, polls, etc?
> Del parser se encargan Flex y Bison (geniales! necesitarás la
> definicion del lenguaje y su gramática)
No conoció Flex y Bison, estoy poniéndome al tanto de ellos,
interesantes :-D
Ademas veo que hay mucha variedad: http://en.wikipedia.org/wiki/Ragel
http://en.wikipedia.org/wiki/List_of_parser_generators
> El mismo parser se puede usar para el autocompletado y la ayuda
> contextual.. (usando una base de datos para guardar los simbolos y
> relacionarlos (sqlite?)
sqlite seria lo suficiente rápido? Tengo buenas experiencias, pero
imagina una consulta por cada tecla presionada, funcionara? talves
guardarlo en memoria? es posible levantar sqlite en memoria RAM. Pero
cuanto memoria tendrá que usarse? O.O
> Me encantaría seguir discutiendo y aprendiendo sobre este tema...
> Tanto si quieres satisfacer tu curiosidad o hacer una IDE como
> ejercicio, sugiero propongas un lenguaje y un dev-chain para discutir
> y poder profundizar mas :)
> A mi tambien me parece fascinante este tema
> De hecho tengo deseos de hacer uno... bueno, cuando tenga tiempo :)
>
> Saludos.
Pienso y Pienso, que pasaría si se hace un IDE especializado para una
plataforma (Linux) y quien sabe especializado para un Lenguaje.
--
Mario César Señoranis Ayala
http://softwarelibre.org.bo/mariocesar
http://twitter.com/mariocesar_bo
http://facebook.com/mariocesar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: https://lists.ubuntu.com/archives/ubuntu-bo/attachments/20100510/77a696e3/attachment.htm
Más información sobre la lista de distribución Ubuntu-bo