domingo, 31 de octubre de 2010

Erlang

Laboratorio

Erlang
Es un lenguaje funcional y de programación concurrente, fue diseñado por la compañía Ericsson con el propósito de hacer aplicaciones que puedan soportar fallos, funcionamiento ininterrumpido, aplicaciones distribuidas, entre otras cosas.
Tiene una característica muy importante "el cambio de código en caliente" el cual se refiere a poder modificar el código aun cuando la aplicación esta corriendo. Erlang no seguía la filosofía de código abierto hasta 1998 cuando Ericsson lo cedió como tal.
Erlang es un lenguaje interpretado, aunque también se puede compila usando el compilador HiPE, aunque este compilador solo es para algunas plataformas es muy bueno porque pude soportar la concurrencia característica muy distintiva del lenguaje. Esta es la pagina oficial de HiPE.
Es posible que pensemos que entender este proceso de concurrencia es complicado y más aun aplicarlo en algún programa pero en Erlang la concurrencia es explicita y no implícita con en otros lenguajes.
El nombre de Erlang viene de las palabras Ericsson y Language.

Erlang lenguaje funcional
Los programa en Erlang están compuestos de bloques "funciones" y las identificamos por su nombre y el numero de argumentos de entrada también llamado "aridad". Por ejemplo las funciones multiplicacion/2, multiplicacion/3, multipicacion/4 pueden existir perfectamente juntas y llamándose a cada una según el numero de datos que se introduzca por el usuario, los resultados que devuelven las funcione son puede ser de cualquier elemento soportado por Erlang flotante, tupla, entero, lista, etc.
mi_funcion(dato1, dato2, ...) ->
instrucción,
instrucción,
resultado_a_devolver
También podemos escribir alguna condición antes de ">" podemos poner que si se cumple algo entonces se lleve acabo determinada instrucción esto lo hacemos con "when" una forma de implementarlo seria seria:
mi_funcion(dato1, dato2) when dato1 > 0 ->
y algo muy importante en Erlang aprender a escribir el ".".
Hice un programa en Erlang que muestra su característica como lenguaje funcional, bueno primero que nada abro el terminal y escribo:
cecy@cecy-desktop:~$ emacs -nw geom.erl
Notemos los programas escritos en Erlang tienen la extensión .erl y lo estoy llamando geom, ahora escribo mi programa que obtiene el perímetro de diferentes figuras geométricas el circulo, rectángulo, triángulo y cuadrado, podemos ver que para calcular el perímetro de cada figura se necesitan determinados números de datos de entrada por ejemplo para calcular el área del circulo solo ocupamos la medida del radio es por eso que se declara -export([circulo/1])., pero para calcular el perímetro de un rectángulo se necesitan dos por consiguiente se declara así: -export([rectangulo/2])., vemos que antes de declarar las funciones se escribe module(algo), ese "algo" no es cualquier cualquier cosa siempre debe ser el mismo nombre que el del programa en mi caso "geom" y otra cosa muy importante las variables se escriben en mayúsculas :D que no se te olvide.
Código:

-module(geom).
-export([circulo/1]).
-export([cuadrado/1]).
-export([rectangulo/2]).
-export([triangulo/3]).

circulo(R) ->
2*R*3.1416.

cuadrado(L) ->
L*4.

rectangulo(A,B) ->
2*A+2*B.

triangulo(A,B,C) ->
A+B+C.

Ahora que ya escribí mi programa tengo que compilar el modulo desde Erlang para ver si no marca ningún error, la manera de hacerlo es escribimos erl en el terminal y luego c(geom)., esta es la captura de pantalla:



Como todo esta bien en el código podemos ver "{ok, geom}", ahora si podemos obtener el perímetro de las figuras de esta manera escribimos el nombre_del_modulo:nombre_funcion(dato1, dato2...datox). en mi caso escribo:


y cuando escribimos más datos de entrada a alguna función de los que acepta nos marca error por ejemplo:



Las características mas destacadas de Erlang son:
  • Lenguaje funcional
  • Soporte de concurrencia
  • Tolerancia a fallas
  • Cambio de código en caliente
  • Posibilidad de conectar con código C, Java y otros lenguajes
La concurrencia es una característica importantísima del lenguaje fue creada especialmente para las aplicaciones de telecomunicaciones: gran disponibilidad, cambiar código sin detener la aplicación, etc.

La información la obtuve leyendo estos sitios:
Ejemplos en Erlang
Lenguaje Erlang
Erlang: un lenguaje declarativo, concurrente y distribuido para aplicaciones de telecomunicaciones

3 comentarios:

  1. Excelente entrada. Siete puntos para el lab.

    ResponderEliminar
  2. Buen post dejo más info:

    http://emanuelpeg.blogspot.com/2010/12/erlang.html

    ResponderEliminar
  3. Por si te gusta el lenguaje me estoy currando el siguiente blog

    http://aprendiendo-erlang.blogspot.com/

    ResponderEliminar