>  > 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

  • [forth... mauricioduranmaldon...@gmail.com [forth-es]
    • [... pablohr...@yahoo.es [forth-es]
    • R... Marcos Cruz forth...@programandala.net [forth-es]
      • ... Miguel Angel Rodriguez Jodar miguel.an...@zxprojects.com [forth-es]
        • ... Marcos Cruz forth...@programandala.net [forth-es]
          • ... Miguel Angel Rodriguez Jodar miguel.an...@zxprojects.com [forth-es]
            • ... Marcos Cruz forth...@programandala.net [forth-es]
              • ... Miguel Angel Rodriguez Jodar miguel.an...@zxprojects.com [forth-es]
                • ... Marcos Cruz forth...@programandala.net [forth-es]
                • ... Miguel Angel Rodriguez Jodar miguel.an...@zxprojects.com [forth-es]
                • ... Marcos Cruz forth...@programandala.net [forth-es]
                • ... Marcos Cruz forth...@programandala.net [forth-es]
    • R... Sergio Gimenez vintagecomputer...@yahoo.es [forth-es]
    • R... Miguel Angel Rodriguez Jodar miguel.an...@zxprojects.com [forth-es]

Responder a