> > Los procesadores de 8 bits sobre los que se ha sustentado Forth en los > > años 80 son procesadores orientados a registros, y en esos (como en la > > gran mayoría), el lenguaje más cercano a la máquina es el C. > > Entiendo lo que quieres decir, pero no lo veo desde ese punto de vista. > Si no te entiendo mal, te refieres al compilador de C en sí y a lo que > el compilador puede hacer. Pero el programador de C no tiene por qué > saber eso, no tiene por qué saber si el compilador utiliza un registro o > una dirección de memoria para guardar una variable, por ejemplo.
Me refiero no a un compilador de C, sino al lenguaje C en general: es un lenguaje que puede ser tan cercano a la máquina como lo sería un macroensamblador. El programador, por ejemplo, puede forzar, o al menos sugerir, que una variable se guarde en un registro y no en memoria, y al contrario: forzar a que una variable siempre esté en memoria y nunca se guarde de forma permanente en un registro. No sabrá qué registro se usa, pero sí puede saber en qué dirección de memoria se ha guardado la variable, y de hecho este tipo de cosas se usan para, por ejemplo, detectar si la máquina en la que se está ejecutando el programa es big-endian o little-endian. También puede usar los valores de las variables como secuencias de bits que son, y así por ejemplo examinar el signo de un número mirando su bit más significativo y esas cosas (por supuesto a costa de perder portabilidad). Las operaciones elementales a nivel de ALU tienen una correspondencia directa con las operaciones aritméticas en C. Recientemente quise hacer una pequeña virguería con la implementación FPGA que hice del Jupiter ACE y me encontré que no había (o no la encontré) una instrucción para desplazar a izquierda o derecha un valor una serie de bits. Vale que es lo mismo (casi) que multiplicar o dividir por dos, pero me extrañó que una operación tan simple y de tan bajo nivel no estuviera implementada. Era esto: https://www.youtube.com/watch?v=rRmp40PNK7o El programa, si mal no recuerdo, era algo así: :BOLD 12288 11264 DO I C@ DUP 2 * OR I C! LOOP END; Y lo que hace es cambiar el juego de caracteres para que la letra aparezca como en negrita. En el clon FPGA esto es posible porque la memoria destinada a guardar el juego de caracteres es leible y escribible. En el Jupiter ACE original sólo es escribible. > trasparente. Por ejemplo, manejas directamente direcciones de memoria y > sabes dónde están "las cosas". Hablo de un Forth clásico, con un pequeño Mi única experiencia con Forth es con el Jupiter ACE y ahí defino variables con VAR, y no sé dónde las situa el intérprete. Puedo averiguar más tarde dónde las situa, pero no he sido yo (el programador) quien ha elegido ese sitio. Puedo forzar a que una variable esté en una dirección, sí: exactamente lo mismo que puedo hacer en C, en donde también puedo forzar a que una variable esté en una dirección concreta (aunque esto sólo tiene sentido cuando usas C en un entorno sin manejador de memoria, como un micro de 8 bits o algo así) > implementado con un núcleo escrito en C u otro lenguaje, por ejemplo, > esta relación directa puede perderse, depende de cómo esté escrito. En Si se escribe en C no se pierde. ¡Los punteros son tus amigos! > Forth, ni que esté más cerca de la máquina. De hecho, la máquina virtual > de Java, que ejecuta su código de octetos seudocompilado, tiene muchas > similitudes con cómo funciona el intérprete interior de Forth. ¿Es una máquina basada en pila? > Bueno, al menos ¡ya tienes un precedente en que apoyarte! De momento ya convencí a un alumno para que hiciera un clon del Jupiter ACE, y este año tengo unos cuantos que se van a poner manos a la obra para construir clones de Spectrum :D ¡Saludos! ------------------------------------ ------------------------------------ ------------------------------------ Enlaces a Yahoo Grupos <*> Para visitar tu grupo en la web, ve a: http://es.groups.yahoo.com/group/forth-es/ <*> La configuración de tu correo: Mensajes individuales | Tradicional <*> Para modificar la configuración desde la Web, visita: http://es.groups.yahoo.com/group/forth-es/join (ID de Yahoo! obligatoria) <*> Para modificar la configuración mediante el correo: forth-es-dig...@yahoogroups.com forth-es-fullfeatu...@yahoogroups.com <*> Para cancelar tu suscripción en este grupo, envía un mensaje en blanco a: forth-es-unsubscr...@yahoogroups.com <*> El uso que hagas de Yahoo Grupos está sujeto a las Condiciones del servicio de Yahoo!: https://info.yahoo.com/legal/es/yahoo/tos.html