PDF de programación - Introducción a forth

Imágen de pdf Introducción a forth

Introducción a forthgráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.753 visualizaciones desde el 14 de Enero del 2017
593,8 KB
139 paginas
Creado hace 14a (01/02/2010)
INTRODUCCI ÓN A FORTH

F. J. Gil Chica & Jorge Acereda Maciá

[email protected]

Dpto. de Física, Ingeniería de Sistemas y Teoría de la Señal

Escuela Politécnica Superior

Universidad de Alicante

ESPA ÑA

***

ISBN 978-84-690-3594-8

http://www.disc.ua.es/~gil/libros.html

versión enero 2007

Juan Manuel Gil Delgado,
in memoriam

1

Índice general

1. Introducción a Forth

5
5
1.1. Una filosofía distinta . . . . . . . . . . . . . . . . . . . . . . .
6
1.2. Un entorno distinto . . . . . . . . . . . . . . . . . . . . . . . .
8
1.3. La máquina virtual
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
8
. . . . . . . . . . . . . . . . . . 11

1.3.1. La pila de parámetros
1.3.2. Crear nuevas palabras

2. Pila y aritmética

14
2.1. Vocabulario para la pila . . . . . . . . . . . . . . . . . . . . . 14
2.2. Aritmética básica . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.1. Enteros simples . . . . . . . . . . . . . . . . . . . . . . 15
2.2.2. Enteros dobles . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.3. Operadores mixtos
. . . . . . . . . . . . . . . . . . . . 18
2.2.4. Números con signo y sin signo . . . . . . . . . . . . . . 19
2.3. Salida numérica con formato . . . . . . . . . . . . . . . . . . . 19
2.4. La filosofía del punto fijo . . . . . . . . . . . . . . . . . . . . . 23
2.5. Números racionales . . . . . . . . . . . . . . . . . . . . . . . . 24

3. Programación estructurada

26
3.1. Operadores relacionales . . . . . . . . . . . . . . . . . . . . . . 26
3.2. Condicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3. Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4. Más bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.5. Fin abrupto de un bucle . . . . . . . . . . . . . . . . . . . . . 31
3.6. El estilo Forth . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4. Constantes y variables. El diccionario

36
. . . . . . . . . . . . . . . . . . . . . . 36
4.1. Constantes y variables
Inciso: cambio de base . . . . . . . . . . . . . . . . . . . . . . 40
4.2.
4.3. Estructura del diccionario . . . . . . . . . . . . . . . . . . . . 41
4.4. La pareja create . . . does> . . . . . . . . . . . . . . . . . . . 44

2

4.5. Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.6. Ejecución vectorizada . . . . . . . . . . . . . . . . . . . . . . . 50
4.7. Distinción entre ’ y [’] . . . . . . . . . . . . . . . . . . . . . 54

5. Cadenas de caracteres

59
5.1. Formato libre . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2. Las palabras accept, type y -trailing . . . . . . . . . . . . 59
5.3. Las palabras blank y fill . . . . . . . . . . . . . . . . . . . 62
5.4. Las palabras move y compare . . . . . . . . . . . . . . . . . . 62
5.5. La palabra compare . . . . . . . . . . . . . . . . . . . . . . . . 64
5.6. Algunas funciones útiles
. . . . . . . . . . . . . . . . . . . . . 65

6. Control del compilador

68
6.1. Nueva visita al diccionario . . . . . . . . . . . . . . . . . . . . 68
6.2.
. . . . . . . . . . . . . . . . . . . . . . . . . 70
6.3. Parar y reiniciar el compilador . . . . . . . . . . . . . . . . . . 72

Inmediato pero...

7. Entrada y salida sobre disco

74
7.1. Un disco es un conjunto de bloques . . . . . . . . . . . . . . . 74
7.2. Cómo usa Forth los bloques
. . . . . . . . . . . . . . . . . . . 75
7.3. Palabras de interfaz . . . . . . . . . . . . . . . . . . . . . . . . 76
7.4. Forth como aplicación . . . . . . . . . . . . . . . . . . . . . . 78

8. Estructuras y memoria dinámica

82
8.1. Estructuras en Forth . . . . . . . . . . . . . . . . . . . . . . . 82
8.2. Memoria dinámica . . . . . . . . . . . . . . . . . . . . . . . . 84

9. Algunas funciones matemáticas

94
9.1. Distintas opciones . . . . . . . . . . . . . . . . . . . . . . . . . 94
9.2. Sólo enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
9.2.1. Factoriales y combinaciones
. . . . . . . . . . . . . . . 95
9.2.2. Raíz cuadrada . . . . . . . . . . . . . . . . . . . . . . . 96
9.2.3. Seno, coseno y tangente
. . . . . . . . . . . . . . . . . 98
9.2.4. Exponencial . . . . . . . . . . . . . . . . . . . . . . . . 99
. . . . . . . . . . . . . . . . . . . . . . . . . . 100

9.3. Números reales

10.Lézar: en busca del espíritu

103
10.1. La cuestión . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
10.2. El nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
10.3. Características generales de Lézar . . . . . . . . . . . . . . . . 104
10.4. El diccionario . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
10.5. El código y su ejecución . . . . . . . . . . . . . . . . . . . . . 106

3

10.6. Palabras intrínsecas . . . . . . . . . . . . . . . . . . . . . . . . 108
10.7. Sistema de archivos . . . . . . . . . . . . . . . . . . . . . . . . 110
10.8. Extensiones del núcleo . . . . . . . . . . . . . . . . . . . . . . 112
10.9. Compilación de algunas palabras
. . . . . . . . . . . . . . . . 123

11.Miscelánea de Forth

128
11.1. Historia de Forth . . . . . . . . . . . . . . . . . . . . . . . . . 128
11.2. PostScript y JOY . . . . . . . . . . . . . . . . . . . . . . . . . 132
11.2.1. PostScript . . . . . . . . . . . . . . . . . . . . . . . . . 132
11.2.2. JOY . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
11.3. El panorama en 2006 . . . . . . . . . . . . . . . . . . . . . . . 136
11.4. Referencias comentadas . . . . . . . . . . . . . . . . . . . . . . 136
11.5. Palabras finales . . . . . . . . . . . . . . . . . . . . . . . . . . 138

12.Ejercicios

139
12.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
12.2. Ejercicios resueltos
. . . . . . . . . . . . . . . . . . . . . . . . 140

4

Capítulo 1

Introducción a Forth

1.1. Una filosofía distinta

Este es un libro sobre el lenguaje de programación Forth. Un lenguaje des-
conocido por la mayoría de los estudiantes y profesionales a pesar de que su
historia arranca a finales de los años 60. Un lenguaje de nicho, limitado en
la práctica a programación de microcontroladores, pero a la vez el precursor
de la programación estructurada, de la programación orientada a objetos,
de las implementaciones de máquina virtual. Un lenguaje que encarna una
filosofía radicalmente distinta, que se aparta de los caminos trillados, de las
tendencias actuales que conducen a muchos lenguajes a ser meros bastidores
en los que apoyar librerías pesadas y complejas.

Pero no nos engañemos, Forth tuvo su oportunidad, su momento dulce al-
rededor de 1980, y no prosperó. Esa es la realidad. Entonces, ¿por qué Forth?
La respuesta es bien sencilla: porque es divertido, gratificante; porque enseña
cosas que los demás no enseñan. Quien menosprecie sus lecciones sólo porque
el azar ha llevado a Forth a ejecutarse en sistemas empotrados en lugar de en
computadores personales comete un error y se priva a sí mismo de muchas
horas gratificantes, y de lecciones sobre programación que pueden aplicarse
a cualquier otro lenguaje.

No valdría la pena acercarse a Forth para terminar traduciendo C a Forth,
o php a Forth, o ensamblador a Forth. Primero, porque ya existen C, php
y ensamblador, y funcionan. Segundo, porque el objeto de Forth, al menos
desde el punto de vista del libro que tiene en sus manos, no es escribir código
Forth, sino pensar en Forth. Es legítima la pregunta de qué es pensar en
Forth. Valga el siguiente ejemplo. Imaginemos un fragmento de código, por

5

ejemplo en C, que ha de tomar un argumento numérico y efectuar, según su
valor, una operación. Pero este argumento ha de estar comprendido entre,
digamos, los valores 0 y 5; de forma que, si el argumento es menor que cero,
se sustituye por 0, y si es mayor que 5, se sustituye por 5. Escribiríamos en
C:

if (n<0){

n=0;

} else
if (n>5){

n=5;

}

Ciertamente, hay formas mejores de hacerlo, aún en C, pero esta es, pro-
bablemente, la que elegirá la mayoría de los programadores. Esta es la versión
Forth (de momento, es irrelevante si no sabe la forma de interpretarla):

0 max 5 min

En su sorprende concisión, esta línea de código exhibe la esencia del proble-
ma. El programador Forth busca la esencia del problema, piensa, y después
escribe. El buen código Forth apela a un sentido estético particular que se
deleita con las cosas sencillas. Espero poder transmitir al lector parte de ese
gusto estético.

1.2. Un entorno distinto

El programador corriente cuenta con una serie de herramientas para su
trabajo: un editor, un compilador, un depurador, ensamblador y desensam-
blador y algunas herramientas adicionales. Cada una de estas herramientas
es a su vez un programa que se ejecuta sobre un sistema operativo. En la
filosofía UNIX, estas herramientas son pequeñas y especializadas, y pueden
comunicarse entre sí compartiendo corrientes de texto. En la filosofía Win-
dows, todas se encuentran integradas en un entorno de desarrollo que puede
ser muy, muy grande.

El panorama para el programador Forth es totalmente distinto. En su for-
ma más sencilla, un sistema Forth es sólo un programa que se ejecuta sobre
un sistema operativo. En su forma más genuina, un sistema Forth es el sis-
tema operativo, e incluye desde los controladores de dispositivo básicos hasta

6

una forma de memoria virtual, compilador, ensamblador y desensamblador,
editor y depurador. Pero este entorno, completamente funcional, es a la vez
extraordinariamente simple, de forma que un sistema operativo Forth puede
ocupar sólo unas pocas decenas de kilobytes.

En estos tiempos es difícil de creer que pueda construirse un entorno de
desarrollo en, digamos, treinta kilobytes. Pero si el lector se sorprende de
ello puede tomar esa sorpresa como la prueba de que los derroteros de la
programación actual son cuando menos discutibles. ¿Quien puede entender a
nivel de bit el funcionamiento de un compilador tradicional?
  • Links de descarga
http://lwp-l.com/pdf50

Comentarios de: Introducción a forth (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad