-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfreepascal.tex
262 lines (206 loc) · 8.68 KB
/
freepascal.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
%Autor: mojopikon
%mojopikon: 6
\chapter{FreePascal}
\label{freepascal.tex}
\index{FreePascal}
El lenguaje de programación Pascal es sencillo y bastante didáctico,
por lo que se suele enseñar en el primer año de algunas carreras
técnicas como Matemáticas, Física o Informática. Normalmente, estos
cursos o asignaturas de programación tratan de enseñar al estudiante
los conceptos básicos de la programación de computadores sin entrar
en demasiados detalles acerca del funcionamiento interno de los
mismos. En este capítulo aprenderemos las herramientas básicas que se
encuentran disponibles en GNU/Linux para programar en Pascal. El
compilador que utilizaremos está siendo desarrollado por el proyecto
{\bf Free Pascal}, que proporciona un buen compilador de Pascal para
múltiples plataformas, entre éstas GNU/Linux, MS-DOS, MS Windows,
Amiga, MaC OS y otras.
Comenzaremos escribiendo un ejemplo muy sencillo de programa en
Pascal, el típico ``Hola Mundo''. En cualquier editor escribimos el
siguiente código y lo guardamos con el nombre {\tt HolaMundo.pas}
\begin{ejemplo}{HolaMundo.pas}%
{Ejemplo 1 de Pascal }
Ejemplo 1 de Pascal
\end{ejemplo}
Para compilar un programa escrito en Pascal con el compilador de
FreePascal utilizamos el comando {\tt ppc386} del siguiente modo:
\begin{verbatim}
$ ppc386 HolaMundo.pas
Free Pascal Compiler version 1.0.4 [2001/08/31] for i386
Copyright (c) 1993-2000 by Florian Klaempfl
Target OS: Linux for i386
Compiling HolaMundo.pas
Assembling holamundo
Linking holamundo
7 Lines compiled, 0.3 sec
$ ls
holamundo2 HolaMundo2.pas holamundo2.o
\end{verbatim}
Como podemos apreciar en los mensajes del compilador, él mismo se
encarga de compilar, ensamblar y enlazar el programa para generar el
fichero ejecutable {\tt holamundo}. Para cambiar el nombre del
ejecutable resultante se utiliza la opción {\tt -onombredelejecutable}
(sin dejar espacio entre la {\tt o} y el nombre del ejecutable.
\begin{verbatim}
$ ppc386 -oHolaMundo HolaMundo.pas
Free Pascal Compiler version 1.0.4 [2001/08/31] for i386
Copyright (c) 1993-2000 by Florian Klaempfl
Target OS: Linux for i386
Compiling HolaMundo.pas
Assembling HolaMundo
Linking HolaMundo
7 Lines compiled, 0.3 sec
$ ls
HolaMundo HolaMundo2.pas holamundo2.o
\end{verbatim}
Para ejecutar el programa resultante, hemos de recordar que debemos
poner {\tt ./} delante del nombre del ejecutable:
\begin{verbatim}
$ HolaMundo
bash: HolaMundo: command not found
$ ./HolaMundo
Hola Mundo
\end{verbatim}
Veamos ahora un ejemplo del uso de las ``unidades'' en Pascal. El
concepto de unidades en Pascal es equivalente al de librerías en C. Se
trata de ficheros binarios que obtenemos a partir de código fuente
separado y luego enlazamos con el programa principal. Esto permite
dividir el código de un programa en varios ficheros y evita tener que
compilar todo el programa cada vez que se modifica una función. Con el
uso de unidades basta con recompilar la unidad en la que se modifica
el código fuente y volverla a enlazar con el programa. A diferencia
del Borland Pascal, el compilador Free Pascal utiliza la extensión
{\tt ppu} (en lugar de {\tt tpu}) para los ficheros binarios de
unidades.
Tenemos para este ejemplo dos ficheros de código fuente en Pascal,
{\tt HolaMundo2.pas} y {\tt saludos.pas}.
\begin{ejemplo}{HolaMundo2.pas}%
{Ejemplo 2 de Pascal }
Ejemplo 2 de Pascal
\end{ejemplo}
\begin{ejemplo}{saludos.pas}%
{Ejemplo 2 de Pascal }
Ejemplo 2 de Pascal
\end{ejemplo}
Debemos tener cuidado con un detalle: Los nombres de las unidades
deben coincidir con el nombre del fichero en el que están escritas,
i.e. la unidad {\tt Saludos} no se puede escribir en un fichero
llamado {\tt Otronombre.pas}. Además, los ficheros en los que se
implementan las unidades conviene que tengan el nombre completamente
en {\bf minúsculas}. De lo contrario, el compilador FreePascal no
encontrará la unidad al compilar un programa que la use, pero podremos
aún compilarla manualmente. El siguiente ejemplo ilustra la situación:
\begin{verbatim}
$ ls
HolaMundo2.pas saludos.pas
$ mv saludos.pas otronombre.pas
$ ls
HolaMundo2.pas otronombre.pas
$ ppc386 otronombre.pas
Free Pascal Compiler version 1.0.4 [2001/08/31] for i386
Copyright (c) 1993-2000 by Florian Klaempfl
Target OS: Linux for i386
Compiling otro.pas
otro.pas(4,6) Error: Illegal unit name: SALUDOS
otro.pas(10,1) Fatal: There were 1 errors compiling module, stopping
$ mv otronombre.pas Saludos.pas
$ rm *.o *.ppu
$ ls
HolaMundo2.pas Saludos.pas
$ ppc386 HolaMundo2.pas
Free Pascal Compiler version 1.0.4 [2001/08/31] for i386
Copyright (c) 1993-2000 by Florian Klaempfl
Target OS: Linux for i386
Compiling HolaMundo2.pas
HolaMundo2.pas(6,16) Fatal: Can't find unit SALUDOS
$ ppc386 Saludos.pas
Free Pascal Compiler version 1.0.4 [2001/08/31] for i386
Copyright (c) 1993-2000 by Florian Klaempfl
Target OS: Linux for i386
Compiling Saludos.pas
Assembling saludos
18 Lines compiled, 0.0 sec
$ ppc386 HolaMundo2.pas
Free Pascal Compiler version 1.0.4 [2001/08/31] for i386
Copyright (c) 1993-2000 by Florian Klaempfl
Target OS: Linux for i386
Compiling HolaMundo2.pas
Assembling holamundo2
Linking holamundo2
17 Lines compiled, 0.0 sec
$ ls
holamundo2 HolaMundo2.pas Saludos.pas
holamundo2.o saludos.o saludos.ppu
$ ./holamundo2
¿Cómo te llamas? Pepe
Hola Pepe
$ mv Saludos.pas saludos.pas
$ rm *.o *.ppu
$ ls
HolaMundo2.pas saludos.pas
$ ppc386 HolaMundo2.pas
Free Pascal Compiler version 1.0.4 [2001/08/31] for i386
Copyright (c) 1993-2000 by Florian Klaempfl
Target OS: Linux for i386
Compiling HolaMundo2.pas
Assembling holamundo2
Linking holamundo2
18 Lines compiled, 0.0 sec
$ ls
holamundo2 HolaMundo2.pas Saludos.pas
holamundo2.o saludos.o saludos.ppu
$ ./holamundo2
¿Cómo te llamas? Pepe
Hola Pepe
\end{verbatim}
En FreePascal para Linux, al contrario que la versión windows de deste
mismo compilador, hacer trazas a los programas es algo más complejo, y
requiere un programa adicional: GNU Debugger (GDB). Para utilizar este
programa con nuestros programas en Pascal, debemos añadir un parámetro
adicional en la línea de comandos:
\begin{verbatim}
ppc386 -g programa.pas
\end{verbatim}
Con esto, ``incrustamos'' el código fuente de nuestro programa en el
interior del ejecutable, de forma que si ejecutamos gdb pasando como
argumento el nombre del programa, podremos hacerle una traza.
Para saber más acerca de como hacer una traza a nuestros programas
escritos en Pascal, puedes consultar la sección sobre GDB, en la
página \pageref{gdb}.
Otros argumentos interesantes del compilador de FreePascal:
Sin entrar demasiado en las interioridades de FreePascal, creo que
estas opciones pueden ayudarte a la hora de compilar una práctica, o
de estructurar mejor tus proyectos. Ahí van:
{\tt -FUdirectorio}: Esta opción nos permite guardar las ``units'',
una vez compiladas, en el directorio especificado. Por ejemplo:
\begin{verbatim}
ppc386 -FUunits unidad.pas
\end{verbatim}
Para utilizar units que estén en otro directorio que no sea el actual,
utilizamos el parámetro {\tt -Fudirectorio} (nótese que en este caso
la ``u'' es minúscula).
%\index{Depuradores!Turbo Pascal 7}
{\tt -So}: Usar esta opción nos permitirá comprobar la compatibilidad
de nuestro código con Turbo Pascal 7
{\tt -Un}: Esta opción nos permite llamar los ficheros de unidad (units)
con otro nombre distinto al que hemos especificado en el código tras
la palabra reservada "unit"
% Hey, sería bueno añadir unos cuantos switches más :-)
Por último, algunos editores que ``se llevan bien'' con FreePascal:
{\tt Anjuta} Tal vez, el mejor editor para programadores (o al menos,
en opinión del autor de este tema). Soporta resaltado de sintaxis para
varios lenguajes, compilar y ejecutar desde el mismo editor, etc.
{\tt Emacs} A pesar de su aparente dificultad de manejo, el modo de Pascal
está muy trabajado, permitiendo indentar automáticamente todo el código
tan sólo pulsando la tecla tab en cada línea.
{\tt Vim} El autor de este tema sólo ha usado de vim la funcionalidad
de resaltado de sintaxis mientras programaba en Pascal. Esta se activa
con la opción ":syntax on".
{\tt Scite} Es un editor muy minimalista, y algo lioso de configurar,
pero es un editor para programadores muy bueno, cómodo, y sobre todo,
compacto (cabe en un disco de 1'44), además de estar disponible tanto
para plataformas Win32 como GNU/Linux.
% Con esta breve presentación ya sabemos lo suficiente para compilar
% prácticas en Pascal, sólo queda aprender el lenguaje y pasar
% muchas horas escribiendo programas para llegar a ser auténticos
% programadores.