En/Je/On 2015-12-27 11:28, javier gil [email protected] [forth-es]
escribió / skribis / wrote :

> Creo que, a estas alturas, con máquinas que corren entre 2 y 4 GHz, el
> tema del rendimiento puede pasar a segundo plano. Entonces, son otras
> las características del lenguaje que hay que valorar.  La más
> importante, para mí, es la simplicidad. 

Deduzco que te refieres a la simplicidad para que el programador haga
algunas cosas, pero eso generalmente se opone a la simplicidad del
propio sistema. En cualquier caso, es posible adaptar Forth a cualquier
necesidad de uso y a cualquier tipo de máquina.

> por lo que parece, los cálculos con enteros y los cálculos con reales
> REQUIEREN DE ALGORITMOS DIFERENTES. La razón de eso es que no existen
> f>r ni fr>.  Así que uno escribe una palabra para enteros y usa >r y
> r>, 

> O bien se implementan unos f>r, fr> propios, 

Sí, esas palabras las puedes escribir con solo saber con cuántos octetos
se representa un número real en tu sistema. De hecho en Forth-2012 ya
están las palabras `n>r` y `nr>`, que lo facilitan:

  4 /f  \ bytes per real number
  : f>r  ( r -- ) ( R: -- r +n )  /f n>r  ;
  : fr>  ( -- r ) ( R: r +n -- )  /f nr> drop  ;

Eso es suponiendo que los números reales no se guarden en su propia
pila. Pero siempre se puede crear una palabra para hacer esto.

Si `n>r` y `nr>` no están en tu sistema, puedes escribirlas en Forth.

> o bien se usan variables locales, o bien se introduce una cantidad
> indeseable de ruido de pila. 

El ruido de pila es lo peor. Se puede eliminar factorizando mucho, que
siempre es recomendable salvo que haya que apurar al máximo el
rendimiento.

> Ahora bien, imaginemos un Forth con todo lo que hace que Forth sea
> Forth (create, does>, immediate, postpone, pila, control del
> compilador, diccionario y alguna cosilla más), PERO con un sólo tipo
> numérico. Un número es un número, que se representa mediante una
> cadena de tamaño suficiente como para no tener que preocuparse por el
> rango. Parte entera y parte fraccionaria, y aritmética de punto fijo,
> mucho más simple y suficiente para casi cualquier cosa.  Por ejemplo,
> 20 dígitos para la parte entera y 18 para la parte fraccionaria son
> suficientes para cualquier aplicación, incluidas aplicaciones
> científicas (adoptando unidades convenientes, claro).

> Entonces, la pila no contendría números, sino punteros a las cadenas
> que los representan. Este hipotético Forth contendría únicamente una
> familia de operadores aritméticos. 

En principio me parece que lo que propones podría implementarse en Forth
como un accesorio de un sistema estándar, igual que se añade soporte
para números flotantes.

Sé que hay una conocida biblioteca científica para Forth, pero no la
conozco. No sé si tiene algo como lo que propones.

> Nos olvidamos de familias {x} y {fx} y de los operadores mixtos, y de
> operadores para números sin signo.

Los operadores mixtos son incómodos (a menudo cuesta recordar cuál hace
qué), pero son muy eficaces, porque ponen en manos del programador la
decisión sobre qué números se están manipulando. Con unos operadores
genéricos sería el sistema el que haría ese trabajo.

> Desgraciadamente, vendrían otros problemas: la interacción entre
> números hardware (direcciones) y números software. Por ejemplo,
> cuando quiero la dirección base de un vector (número hardware) para
> sumarle un desplazamiento (proveniente de una operación con números
> software). Pero esto no me parece tan grave.

Ahí no te sigo, no entiendo esa diferencia. ¿No representaría el sistema
todos los números de la misma forma, con cadenas? Al menos a alto nivel.
Si te he entedido bien, si el tipo de números que sugieres estuviera
implementado en el núcleo del sistema, incluso palabras como `@`
trabajarían con cadenas, para que todas las operaciones fueran
compatibles, ¿no?

Creo que esa representación de números que propones puede programarse en
Forth como una biblioteca que funcione en cualquier sistema, con sus
propios operadores y su propia pila.

En cualquier caso, nada impide modificar o implementar un Forth como uno
quiera (aunque a partir de cierto umbral impreciso es dudoso que pueda
llamarse propiamente «Forth», como es el caso de algunas variantes y
dialectos). Eso es uno de sus mayores atractivos.

-- 
Marcos Cruz
http://programandala.net

Responder a