Subprocesos y el Futuro de PSeInt

   Escribo estas aclaraciones debido a la gran cantidad de mensajes que recibí durante el último año preguntando acerca de la posibilidad de definir subprocesos/funciones en pseudocódigo. Paso a explicar a continuación algunas cuestiones históricas, prácticas y filosóficas relacionadas al futuro de este software y la posible inclusión de esta característica.

   En primer lugar hay que considerar el contexto en el cual nace este proyecto. Concebido inicialmente como un proyecto final de una materia del primer cuatrimestre de la carrera, presenta un diseño interno deficiente y poco flexible. En aquel momento, el objetivo era interpretar el pseudocódigo tal cual lo presentaban en mi carrera y nada más. Jamás pensé que llegaría a tener la cantidad y variedad de usuarios que tiene actualmente. Además, la falta de experiencia con el lenguaje de programación utilizado, el casi nulo conocimiento acerca de estructuras de datos dinámicas, y las muchas otras falencias en cuestiones algorítmicas más avanzadas, tambien condujeron a un diseño inicial pobre. Por esto resulta actualmente muy dificil agregar nuevas características y aún mantener las existentes. Sería deseable que el parseo modelase un autómata de estados finitos, que las expresiones se representasen como árboles ordenados orientados, que la estructura del árbol se aprovechase para realizar una determinación de tipos más minuciosa, que al autómata resultara flexible frente a potenciales extensiones, etc, etc, etc.

   6 años después, el código actual del intérprete me produce cierta vergüenza, y viendo que el proyecto sigue vivo, que el número de usuarios crece día a día, y que como programador creo haber alcanzado la maduréz y experiencia suficiente para reescribirlo correctamente, me propongo comenzar la tan postergada reestructuración interna. Por un buen período de tiempo, los cambios se irán introduciendo sin alterar las funcionalidades, por lo que el usuario final podrá no observar grandes diferencias. Sin embargo, quiero que la comunidad de usuarios docentes sepa que se está realizando un trabajo importante para que las futuras versiones estén a la altura de las circunstancias. Sin embargo, por ser éste un software libre desarrollado y mantenido sólo por el placer de programar y ver como la creación de pronto se torna útil para un número relativamente importante de personas e instituciones, no puedo dedicarle más que parte de mi tiempo de ocio, razón por la cual los avances se irán incorporando con cierta lentitud.

   Finalmente, volviendo al tema original, creo que el desarrollo de un software de estas características debe guiarse tanto por mis apreciaciones personales acerca de qué debe ser y qué no, como por la retroalimentación de la comunidad de usuarios. Algunas sugerencias recurrentes (como la inclusión del operador Mod, la definición explícita de tipos de variables, funcionalidades básicas de "depuración", etc.) han sido implementada de acuerdo a las posibilidades. Sin embargo, para poder desarrollar la característica más solicitada (subprocesos), debo primero llevar a cabo estas reestructuraciones que he mencionado. En conclusión, mi intención es desarrollar esta funcionalidad, y estoy lentamente trabajando para ello, pero antes deben aplicarse reformas de base, cambios mayores al diseño, que llevarán algo de tiempo y que será necesario probar y estabilizar previo al siguiente paso.

   Desde ya cuento con su paciencia y buena voluntad para saber entender y reportar de la mejor manera posible los errores que se produzcan en el camino, esperando completar esta tarea en el transcurso de 2009




Bosquejo de los pasos a seguir: