Hola mundo
La forma más efectiva de aprender un nuevo lenguaje de programación es creando programas. La tradición dicta que se cree un programa llamado "Hola Mundo", el cual simplemente muestra un mensaje por consola. Este tipo de programas permiten validar que las herramientas y entorno de desarrollo estan correctamente configurados. Con ello facilitan la compilación de programas en Ada.
with Ada.Text_IO;
procedure Hola is
begin
Ada.Text_IO.Put_Line("¡Hola Mundo!");
end Hola;
Ada no distingue mayúsculas y minúsculas (a excepción de las cadenas de caracteres y literales tipo carácter). Por lo que el siguiente código es exactamente el mismo. Sin embargo pueden salir advertencias al no seguir un formato consistente. Lo ideal es siempre ser consistente al programar y seguir las convenciones estandarizadas del lenguaje.
with ada.text_io;
procedure hola is
begin
ada.text_io.put_line("¡Hola Mundo!");
end hola;
En Ada se puede utilizar las herramientas de Alire + Gprbuild o GNATmake para compilar y generar los ejecutables. Se prefiere la herramienta Alire ya que es moderna y tiene las comodidades de los sistemas actuales para la gestión de proyectos e instalación de dependencias.
Instalación de Alire
La herramienta Alire es la utilizada en Ada para ejecución de distintas tareas.
Como la compilación e instalación de dependencias (bibliotecas de código externas que no vienen
con la biblioteca estándar). Es similar a herramientas usadas en otros lenguajes como
npm
(Javascript) o mix
(Elixir).
La instalación dependerá del sistema operativo para ello se debe descargar la versión correspondiente en el repositorio de Github. Puede revisar más detalles en la documentación oficial.
Instalación de Ejemplo en Windows
Como ejemplo de instalación usaremos la plataforma Windows.
-
Descargar el instalador de Alire para Windows en: https://github.com/alire-project/alire/releases/download/v2.1.0/alr-2.1.0-installer-x86_64-windows.exe
-
Instalar alire.
Ahora es necesario instalar las dependencias de Msys
(bash, git, openssl) en Windows.
Para ello abrimos el programa Alire que estará en el escritorio.
Y descargamos el proyecto "Hola Mundo" de ejemplo.
$ alr get hello
Alire preguntará si estamos de acuerdo en descargar las dependencias
y escribimos Y
y presionar Enter
. Esto solamente lo preguntará
si no se han instalado las dependencias.
Una vez descargadas las dependencias se debe instalar el compilador de Ada.
Para ello vamos al directorio generado y ejecutamos el comando build
.
$ cd hello_1.0.2_5715870b
$ alr build
Alire preguntará si estamos de acuerdo en descargar el compilador
y escribimos Y
y presionar Enter
. Esto solamente lo preguntará
una única vez, luego de la instalación pasará a compilar directamente.
Finalmente tendremos un ejecutable dentro de la carpeta bin
Para lo cual lo podremos ejecutar y mostrará el mensaje Hello, world!
.
/bin/hello.exe
Hello, world!
Proyecto hello
El directorio hello_1.0.2_5715870b
(puede variar el número despues de hello) contiene
los archivos necesarios para el proyecto. Los cuales son:
hello_1.0.2_5715870b
├── LICENSE
├── README.md
├── bin/
│ └── hello.exe
├── alire
│ ├── alire.lock
│ ├── alire.toml.upstream
│ └── flags
│ └── complete_copy
├── alire.toml
├── config
│ ├── hello_config.ads
│ ├── hello_config.gpr
│ └── hello_config.h
├── hello.gpr
└── src
└── hello.adb
Ítem | Descripción |
---|---|
LICENSE |
Archivo de texto que contiene la licencia del código. |
README.md |
Archivo de texto (Markdown) que contiene una introducción al proyecto. |
bin/ |
Directorio donde se almacenan los ejecutables (archivos binarios) del comando |
alire/ |
Directorio generado automáticamente por el comando |
config/ |
Directorio generado automáticamente por el comando |
alire.toml |
Archivo de texto (TOML) con metadatos del proyecto (nombre, versión, autor, email, descripción, etc.) y definición de las dependencias con sus versiones. Se debe modificar cada vez que necesitemos añadir una dependencia. |
hello.gpr |
Archivo de texto (Ada) con la configuración del proyecto. Puede ser modificado, pero normalmente con la configuración predeterminada es suficiente para la mayoría de los proyectos. |
src/hello.adb |
Directorio |
Contenido de src/hello.adb
El archivo que muestra el texto contiene el siguiente código:
with Libhello;
procedure Hello is
begin
Libhello.Hello_World;
end Hello;
Como se puede apreciar con la instrucción with Libhello;
está importando una biblioteca externa llamada Libhello
.
Luego esta llamando al procedimiento Hello_World
en la línea Libhello.Hello_World;
.
La biblioteca Libhello
esta establecida como dependencia en el archivo alire.toml
.
# ...
[[depends-on]]
libhello = "^1.0"
Contenido de libhello
Si vamos al repositorio de la dependencia. Se puede revisar
el contenido del archivo src/libhello.adb
.
with Ada.Text_IO;
package body Libhello is
-----------------
-- Hello_World --
-----------------
procedure Hello_World is
use Ada.Text_IO;
begin
Put_Line ("Hello, world!");
end Hello_World;
end Libhello;
Para no sobre complicar solamente se explicará las siguientes líneas:
Línea | Descripción |
---|---|
|
Permite usar la biblioteca de imprimir texto estándar como |
|
Define el contenido del paquete Libhello, es decir sus funciones y procedimientos que estarán disponibles para ser usados por otros programas. |
|
Es un comentario. El compilador ignorará toda la línea desde |
|
Se define el cuerpo de un procedimiento llamado |
|
Trae al contexto actual las funciones y procedimientos de |
|
Muestra el mensaje |
Ésta separación entre una biblioteca de acciones y un código que la usa es una buena práctica de ingeniería de software, separando las capas de funcionalidad, datos y presentación. Acá puede parecer innecesario, más ha servido como ejemplo sobre como añadir dependencias a un proyecto. |
Tipos de Archivo
Como se pudo apreciar en el proyecto hello
se puede tener distintos tipos de archivo
para un proyecto de Ada.
Tipo | Descripción |
---|---|
*.gpr |
Archivo de definición de proyecto. Utiliza un lenguaje similar a Ada para la configuración. |
*.adb |
Archivo de implementación (Ada Body). Contiene el código a ejecutar en un proyecto. |
*.ads |
Archivo de especificación (Ada Specification). Contiene la especificación de los procedimientos (entre otros exportables) que podrán ser usados públicamente. Normalmente asociados a bibliotecas. |