![]() |
|
18/1/2002
- Subo una nueva actualización del documento de CrisolScript (la versión 0.4) y algo más. Ya tengo construido el analizador léxico y sintático con Flex y Bison respectivamente, así que puedo probar sobre la marcha qué tal se programa con CrisolScript. Con la versión 0.4 del documento sobre el mismo (que recibe sensibles cambios sobre la forma de indicar los scripts a compilar y los archivos de funciones globales) incluyo una carpeta que he llamado GrammarCheck y que esconde la primera versión, en su modo más primitivo, del compilador CrisolScriptCompiler. En esta primera versión ya le podéis pasar al compilador el archivo de definiciones en donde se indicarán las constantes y variables globales y los scripts a compilar. Con esa información, recorrerá todos los archivos scripts involucrados y detectará posibles errores léxicos y sintáticos, lo que permite ir comenzando a soltarse con el lenguaje. - Junto a esta primera versión he includio un sencillo conjunto de scripts para que os hagáis una idea de cómo se programará con CrisolScript. El lenguaje es enormemente parecido a al Pascal (que es lo mismo que decir que es como escribir casi en pseudocódigo) pero mucho más simplificado y sencillo. A mi me resulta muy empalagoso emplear las palabras reservadas begin y end asi como los then, do o similares pero creo que para las personas que usen en el script sin tener muchos conocimientos de programación le será de gran ayuda a la hora de razonar lo que vayan construyendo. Os invito a que echéis un vistazo a esta primera versión del compilador e intentéis hacer algunos ejemplos por vuestra cuenta, a ver qué tal lo véis. Naturalmente, el compilador aún no hace chequeos semánticos, así que podréis asignar valores a constantes, por ejemplo, y el compilador lo dará por bueno. Ahora bien, si metéis caracteres no válidos o si seguís construcciones no permitidas, os dará el alto. Esto es más que suficiente para comenzar a haceros una idea del lenguaje, como ya he dicho antes. - Ante cualquier bug o similar en el ejecutable lo de siempre, mandadme un mensaje por favor. También agradecería que si tenéis alguna sugerencia sobre la sintaxis dejéis el comentario en el foro. Al fin y al cabo se trata de hacer un lenguaje lo más entendible posible.
14/1/2002
- Actualizo para comentar únicamente que ya se ha subido una nueva versión del documento acerca de Crisolscript. Se trata de la versión 0.3 que podéis descargar en la sección de descargas. En esta nueva versión ya defino funciones internas del script asociadas a objetos, los tipos de los scripts (los eventos que podrán suceder) y depuro ciertos elementos comentados en la versión anterior. Esta edición ya la considero lo suficientemente avanzada para comenzar mañana a planear la codificación del script pues el diseño del mismo ya está lo suficientemente elaborado. Espero que en la siguiente actualización puedamos subir ya las nuevas betas prometidas.
10/1/2002
- En esta actualización subo el borrador 0.2 de CrisolScript. Ni que decir tiene que anula a lo que haya escrito sobre el mismo en el documento general de diseño del motor (que está pendiente de un lavado de cara en lo referente a Crisolbuilder y demás). Este borrador creo que es muy definitivo, así que no sería de extrañar que lo subiera a la versión 1.0 tan pronto me pusiera a codificar el lenguaje. En la sección de descarga podéis obtenerlo. Como siempre, cualquier comentario se agradecerá. En particular, me gustaría saber si en líneas generales se entiende lo que trato de explicar y si véis el lenguaje script sencillo. Yo creo que es muy sencillo de entender pero claro, yo no soy tan objetivo como una persona que programe de forma casual. - Estos días, además de estar pensando en el documento que he subido, he estado "jugueteando" con Flex y Bison y he hecho una calculadora programable muy rudimentaria y basada en un intérprete puro (lee línea y ejecuta sentencia). La verdad es que me ha servido para ir soltándome con estas dos herramientas. Se ahorra muchísimo trabajo con ellas y es código bastante optimizado el que producen. Si alguien está interesado en usar Flex y Bison para crear su propio lenguaje y quiere el código de esta rudimentaria calculadora (que no sirve a penas para nada :), pues le puedo mandar el código fuente de apoyo a su aprendizaje. Solo tiene que escribirme. Para los programadores, decir que el compilador que pase el código fuente a código intermedio (y use Flex y Bison) estará hecho en C mientras que el intérprete o la máquina virtual que se halle dentro del motor, estará hecho en C++. Esto es así porque Flex y Bison producen ficheros codificados en C tradicional y es mucho más compatible y fácil trabajar de este modo. - La actualización de la beta espero que no tarde en llegar, ya tengo los iconos de interfaz que faltaban y demás botones. Los responsables de la práctica totalidad de gráficos que visteis en la beta, y los que están por llegar, son Manuel Moreno "Dracke" y Marcelo Galán "Sbe-Caos", gracias chicos :).
4/1/2002
- Bueno, ya estamos en el 2002, como pasa el tiempo. Antes de nada, quiero agradecer a Manuel Moreno "Dracke" y a su amigo webmaster "Doom" que pudieron subir la beta cuando yo estuve ausente. El problema se debio a que el servidor no permite alojar archivos de más de 5 megas y ahora tenemos la beta en otro servidor no gratuito. Pronto se publicará una nueva edicion de la beta, que también estará en inglés y que posiblemente se haga usando el método de fragmentar el archivo para que podamos subir a este sitio web la misma sin problemas. - También quiero agradecer a PHRoDo todo el interés y ayuda mostrada, tanto en el foro como personalmente. Gracias a él he logrado cazar un error bastante importante y que en la beta que actualmente está colgada existe. El caso es que la gente que no disponga de Windows 9x van a ver los textos en negro con toda seguridad.Esto ya está solucionado y estará solventado en la próxima actualización de esta beta. - Ahora, pese a que aún quedan temas por implementar en el API del motor, además de depurar, ya estoy centrado en la creación del lenguaje script. En líneas generales tengo claro como va a ser pero me asaltan dudas a la hora de encarar la forma en la que este va a ser ejecutado. Estas dudas ya las he consultado con amigos programadores, pero si hay alguien leyendo esto que quiera colaborar dándome su opinión, yo estaré encantado de escucharle. La idea que tengo para el lenguaje es que no sea interpretado a través de un intérprete puro, es decir, a través de uno que lea una instrucción y la ejecute directamente, tal cual está escrito el código en el lenguaje fuente, ya que la tasa de frames descendería (en teoría) peligrosamente si los script son medianamente largos o hay muchos de caracter idle (aquellos que se ejecutan automáticamente cada x tiempo). Esto me obliga a crear un lenguaje muy sencillo pero que sea interpretado usando un código intermedio, que hará que todo vaya (también en teoría) más rápido. Así, la idea de arquitectura sería:
Script OnItemGet(ParametrosScript) Const // Constantes locales a TODO el script Var // Variables locales a TODO el script function NombreFuncion(ParametrosFuncion) Const // Constantes locales a la funcion Var // Variables locales a la funcio begin // Funcion de apoyo local end begin // Codigo del script, desde aqui se podra llamar a la funcion Prueba y este sera // el codigo que comenzara a ejecutarse cuando se produzca la ejecucion del script end Si recordáis o conocéis Pascal y/o Delphi, en lugar de Program pongo Script y en lugar del nombre del programa, pongo un tipo OnItemGet que sirve para identificar el tipo de evento al que está asociado; cada evento tendrá un conjunto de parámetros obligatorios (si es que tiene) y esta palabra reservada me servirá para obligar a que se pongan y para comprobar que el script asociado a un evento es el correcto. ¿Qué ocurre ahora? pues bien, que si queremos usar variables globales no podremos declararlas en el mismo archivo con algo del estilo a: Var global string x; Ya que cada vez que ocurra el evento dicha variable global se volvería a declarar. Peor aún, si se declara una variable global en un archivo script y dicho archivo script aún no se ha ejecutado, ¿cómo van a saber los otros archivos scripts que dicha vble global existe? aún más ¿cómo lo vamos a saber cuando toque compilar?. Esto mismo es extensible a las funciones globales (que pueden llamarse desde cualquier script). Lo que había pensado era que las compilaciones de los scripts fueran a bloque, es decir, cuando llegara la hora de compilar que se compilaran todos y cada uno de los scripts definidos, de tal forma que usando un archivo de definiciones del tipo (imaginarios el archivo Scripts.txt): Global Const // Constantes globales Var // Variables gloables // Funciones globales function f() begin end // Scripts Scripts "Script_EspadaCogida.txt" ¿Con esto qué logro? pues se supone que lograría crear un espacio global donde meter las constates, variables y funciones globales. Una vez hecho esto, comenzaríaa a visitar cada uno de los archivos scripts definidos despues de Scripts pudiéndolos compilar con la seguridad de que la tabla de símbolos para las variables globales y funciones globales ya estaría creada y, por lo tanto, no podría existir ningín tipo de problema, sin incrementar, al menos eso creo yo, mucho la complejidad de implementarlo. Con este sistema, si quiero compilar, me bastaría hacer algo del estilo a: Compilador Scripts.txt Obteniendo el código intermedio que yo necesito para que el intérprete embebido en el motor lo ejecute. El único pero que veo por ahora, es que este sistema es que es muy lento en tiempo de compilación. Imaginaros que tengo 10 o 15 scripts y modifico una línea en el script número 6. Tendría que volver a compilar todo. O bien que quito una variable global, pues lo mismo, tengo que volver a compilar todo. Supongo que se podrá crear algún tipo de optimización para esto, es decir, que en el archivo con todos los scripts compilados a codigo intermedio, se incluyan pistas para cada archivo que nos sirva para saber si es realmente necesario o no recompilarlo después de un cambio pero... con el poco tiempo que tengo dudo mucho que me meta a eso, así que de usar este sistema lo dejaria así, teniendo que recompilar todo. Lo que está claro es que Crisolscript va a ser mi primer lenguaje script y que va a ser mucho más sencillo y simple que un Pascal o un Basic y los scripts que pueda usar la gente que quiera hacer algo con crisol no serán muy grandes, por lo que no creo que existan lapsos importantes de tiempo. Pero nunca se sabe y siempre es bueno tener estas cosas en cuenta. Los programadores que hayan leido esto y quieran opinar pues estaré encantado de leerles en el foro (y digo en el foro, porque así se generara un debate más abierto a participaciones nuevas). - Con esto finalizo la actualización, espero que podamos subir en breve la nueva versión de la beta con los gráficos que no llegaron a tiempo, además de la correspondiente versión en inglés y el error cazado por PHRoDo en la escritura de texto. También, la gente que ya la haya podido ver, si ha encontrado algún problema o quiera comentar los FPS que arroja o sus impresiones generales, pues estaría encantado de leerles en el foro. La siguiente actualización la anunciaré en stratos y sitios similares para que haya un chequeo más considerable. |