Diferencia entre revisiones de «Programación en Erlang»

Contenido eliminado Contenido añadido
Sin resumen de edición
Línea 187:
"hello world"
3>
 
==Declaración e Inicialización de Variables==
===Tipos de Variables===
Erlang maneja diferentes tipos de variables, los cuales se dividen en 2:
#Constantes: estos tipos de dato son los que ya no son divisibles en más datos primitivos. Las Constantes pueden ser de 2 tipos:
##Números. Los números caben dentro de 2 tipos. Los tipos son:
###Enteros (Ejemplos: 120, -35000, 590, etc.)
###Flotantes (Ejemplos: 3.14159, -1.2e-45, 30.141216, etc.)
##Átomos. Los átomos son simplemente constantes con nombres. (Ejemplos: abcdef, ‘Un atomo con espacios’, lunes, martes, sábado, Hola_Mundo, etc.)
#Compuestos: estos son los tipos de dato que se usan para agrupar datos. Los tipos son:
##Tuplas. Las tuplas son usadas para almacenar un número fijo de datos y se utilizan mediante ‘{}’. Las tuplas son similares a los registros o estructuras para los lenguajes funcionales. (Ejemplo: {a,12,77},{},{1,2,3},etc.)
##Listas. Las listas son utilizadas para almacenar un número variable de datos y son escritos como secuencias de datos que son cerradas mediante ‘[]’. (Ejemplos: [], [1,2,3,34],[1,’Hola Mundo’],etc.)
 
===Declaración de Variables===
La declaración de variables es diferente a Erlang que a otros leguajes, ya que Erlang no define una variable de tipo int o float. Sino que este se da cuenta al volverse le a asignar. Las variables de Erlang son de simple asignamiento. Comienzan con una letra capital o un ‘underscore’ seguidas de un texto alfanumérico.
 
==Esquema de Administración de Memoria y Separación de Memoria==
maneja todos sus procedimientos a través del heap ya que este no utiliza stack. Hay varias estrategias utilizadas para el manejamiento y mantenimiento del Heap. Entre ellas están:
*“process local heap”
*“unified heap”
 
==="Process Local Heap"===
Esta estrategia lo que realiza es crear una heap local donde ubica cada objeto. Cada proceso llama una colección independiente. El recolector de basura trabaja por procesos.
 
==="Unified Heap"===
Esta estrategia toma que todos los heaps son uno sólo que comparte todos los procesos. Este heap almacena la continuación de los procesos y los otros objetos alojados por proceso. Sólo caundo la heap es acabada por uno de estos procesos que el recolector de basura es llamado. El algoritmo utilizado en el Erlang basado para los sistemas ETOS es una combinación entre two-spacecopying y mark-and-sweep.
 
===Algoritmo del Recolector de Basura para “Process Local Heap”===
El algoritmo se divide en 2 pasos. El primero de ellos, realiza una barrida de todo el heap y lo compacta. El último, mueve los objetos de regreso hasta su destinación final. La gran ventaja de este algoritmo es que no ocupa espacio adicional. Sin embargo, en el otro aspecto el tiempo de corrida de este algoritmo depende del tamaño del heap.
 
===Manejamiento de Memoria para el “Unified Heap”===
Para acomodarse al ambiente multitasking el unified heap puede crecer y achicarse asi sea necesario en la evolución del programa que evidentemente se mantiene proporcional el tamaño del espacio de procesamiento del Sistema Operativo al de la data utilizada. Por el default, al final de un ciclo el tamaño del heap es redefinido para que quepa los datos ocupen la mitad del tamaño del heap.
 
===Manejamiento de Procesos===
La estrategia utilizada es un manejador de procesos por prioridad. Cada proceso tiene un numero de punto flotante marcando su prioridad. Esto otorga un buen control, de cuando deben entrar y salir los procesos. Los descriptores de procesos son alojados en el “unified heap” como cualquier otro. Cada descriptor de procesos tiene un apuntador al siguiente proceso
 
===Paso de Parametros===
Erlang del “Process Local Heap” realiza una copia para pasar los parámetros de diferentes procesos. Ya que cada proceso tiene una colección diferente es por esta razón la necesidad de una copia. Sin embargo, gracias a que el “Unified Heap” toman la heap como un todo el paso de parámetros mediante procesos no genera un problema como en el “Process Local Heap”.
 
===Ejemplos Pequeños del Lenguaje===
Para entender mejor el lenguaje que mejor manera que con los ejemplos comunes de todos los lenguajes. Y así notar la diferencia entre Erlang y el resto.
 
====factorial.erl====
-module(factorial).
-export([factorial/1]).
factorial(N) when N == 0 -> 1;
factorial(N) when N > 0 -> N * factorial(N-1).
 
1> c(factorial).
{ok,factorial}
2> factorial:factorial(20).
2432902008176640000
3>
 
Lo importante de este caso es ver el modo como funciona factorial en Erlang. Las comparaciones que se realizan en Erlang son descritas en la siguiente tabla: