Programación en Ada/Pragmas

← Entrada-salida Pragmas Interfaz con otros lenguajes →


Descripción

editar

Los pragmas son sentencias especiales que controlan el comportamiento del compilador, es decir son directivas de compilador. Tienen esta forma estándar:

pragma Nombre (Lista_de_argumentos);

La Lista_de_argumentos es opcional, no todos los pragmas necesitan argumentos.

Ejemplo

editar

Imaginemos que deseamos hacer que una llamada a un subprograma se convierta en una expansión del código en el código objeto generado. Esto se suele hacer con subprogramas que son muy cortos, en los que se tarda más en realizar las operaciones necesarias en código máquina para llamar a la subrutina, que en realizar el código de la subrutina en sí. Para conseguir esta expansión del código se utiliza el pragma Inline.

function A_Pesetas (Euros : T_Euros) return T_Pesetas is
begin
   return Euros * 166.386;
end A_Pesetas;

pragma Inline (A_Pesetas);

Siempre que se llame a A_Pesetas (Precio_en_Euros), el resultado en el código objeto sería equivalente a escribir Precio_en_Euros * 166.386 en lugar de la llamada.

Lista de pragmas definidos por el lenguaje

editar

A continuación se presenta una tabla con los pragmas de Ada, sus argumentos, un enlace a la sección del Manual de referencia de Ada donde se define y una nota entre las que podemos encontrar:

Ada 2005
Este es un nuevo pragma que aparecerá en el estándar de Ada 2005.
Obsoleto
Este es un pragma que se considera obsoleto pero se mantiene por compatibilidad. No es aconsejable usarlo en código nuevo.
Pragmas de Ada (A - H)
Pragma Argumentos Enlace al ARM Notas
All_Calls_Remote [(library_unit_name)] E.2.3
Assert ([Check =>] boolean_expression[, [Message =>] string_expression]) 11.4.2 (Ada 2005)
Assertion_Policy (policy_identifier) 11.4.2 (Ada 2005)
Asynchronous (local_name) E.4.1
Atomic (local_name) C.6
Atomic_Components (array_local_name) C.6
Attach_Handler (handler_name, expression) C.3.1
Controlled (first_subtype_local_name) 13.11.3
Convention ([Convention =>] convention_identifier, [Entity =>] local_name) B.1
Detect_Blocking H.5 (Ada 2005)
Discard_Names [([On => ] local_name)] C.5
Elaborate (library_unit_name{, library_unit_name}) 10.2.1
Elaborate_All (library_unit_name{, library_unit_name}) 10.2.1
Elaborate_Body [(library_unit_name)] 10.2.1
Export ([Convention =>] convention_identifier, [Entity =>] local_name [, [External_Name =>] string_expression] [, [Link_Name =>] string_expression]) B.1
Pragmas de Ada (I - O)
Pragma Argumentos Enlace al ARM Notas
Import ([Convention =>] convention_identifier, [Entity =>] local_name [, [External_Name =>] string_expression] [, [Link_Name =>] string_expression]) B.1
Detect_Blocking (Ada 2005)
Inline (name {, name}) 6.3.2
Inspection_Point [(object_name {, object_name})] H.3.2
Interface (Obsoleto)
Interrupt_Handler (handler_name) C.3.1
Interrupt_Priority [(expression)] D.1
Linker_Options (string_expression) B.1
List (identifier) 2.8
Locking_Policy (policy_identifier) D.3
Memory_Size (Obsoleto)
No_Return (procedure_local_name{, procedure_local_name}) 6.5.1 (Ada 2005)
Normalize_Scalars H.1
Optimize (identifier) 2.8
Pragmas de Ada (P - R)
Pragma Argumentos Enlace al ARM Notas
Pack (first_subtype_local_name) 13.2
Page 2.8
Partition_Elaboration_Policy (policy_identifier) H.6 (Ada 2005)
Preelaborable_Initialization (direct_name) 10.2.1 (Ada 2005)
Preelaborate [(library_unit_name)] 10.2.1
Priority (expression) D.1
Priority_Specific_Dispatching (policy_identifier, first_priority_expression, last_priority_expression) D.2.2 (Ada 2005)
Profile (profile_identifier {, profile_pragma_argument_association}) D.13 (Ada 2005) Véase Perfil de Ravenscar en Wikipedia.
Pure [(library_unit_name)] 10.2.1
Queuing_Policy (policy_identifier) D.4
Remote_Call_Interface [(library_unit_name)] E.2.3
Remote_Types [(library_unit_name)] E.2.2
Relative_Deadline (relative_deadline_expression) D.2.6 (Ada 2005)
Restrictions (restriction{, restriction}) 13.12
Reviewable H.3.1
Pragmas de Ada (S - Z)
Pragma Argumentos Enlace al ARM Notas
Shared (Obsoleto)
Shared_Passive [(library_unit_name)] E.2.1
Storage_Size (expression) 13.3
Storage_Unit (Obsoleto)
Suppress (identifier [, [On =>] name]) 11.5
System_Name (Obsoleto)
Task_Dispatching_Policy (policy_identifier ) D.2.2
Unchecked_Union (first_subtype_local_name) B.3.3 (Ada 2005)
Unsuppress (identifier) 11.5 (Ada 2005)
Volatile (local_name) C.6
Volatile_Components (array_local_name) C.6

Lista de pragmas definidos por la implementación

editar

La siguiente lista de pragmas no están disponibles en cualquier compilador, sólo en aquellos que han decidido implementarlos:

GNAT
Éste es un pragma definido por la implementación del compilador GNAT.

Manual de referencia de Ada

editar

Ada 95

editar

Ada 2005

editar