Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Versiones paralelas del MIT y Glasgow,
| n == 0 = 1
ambas denominadas Parallel Haskell. | otherwise = n * factorial (n-1)
Más versiones paralelas y distribuidas de
Haskell llamadas Distributed
Haskell (anteriormente Goffin) y Eden.
Una versión con ejecución
especulativa: Eager Haskell.
Varias versiones orientadas a
objetos: Haskell++, O'Haskell y Mondrian.
Una versión educativa llamada Gofer
desarrollada por Mark Jones que fue
suplantada por Hugs (ver abajo).
Erlang Concurrente - Erlang tiene procesos -module(hello_world).
extremadamente livianos cuyos requerimientos de
memoria varían dinámicamente. Los procesos no -compile(export_all).
tienen memoria compartida y se comunican vía
mensajes asincrónicos. Soporta aplicaciones con
una gran cantidad de procesos concurrentes.
Distribuido - Erlang está diseñado para correr en
ambientes distribuidos. Una máquina virtual de hello() ->
Erlang es un nodo de Erlang. Un sistema distribuido
de Erlang es una red de nodos (generalmente uno io:format("hello world~n").
por procesador). Un nodo Erlang puede crear
procesos paralelos ejecutando en otros nodos, lo
cuales podrían utilizar otros sistemas operativos. Los
procesos que residen en diferentes nodos se
comunican exactamente de la misma forma que si
estuviesen en un nodo local.
Robustez - Erlang posee varias primitivas de
detección de errores las cuales sirven para
estructurar sistemas con Tolerancia frente a fallos.
Por ejemplo, los procesos pueden monitorear el
estado y las actividades de otros procesos, aun si se
ejecutan en otros nodos. Los procesos en un
sistema distribuidos pueden configurarse para
derivar en caso de falla a otros nodos y
automáticamente migrar hacia los nodos que se han
recuperado.
Soft real-time - Erlang soporta sistemas "soft" real-
time, el cual requiere tiempo de respuesta del orden
de los milisegundos. Las demoras introducidas por
las largas operaciones del garbage collector son
inaceptables, por eso Erlang utiliza tecnicas
incrementales en el proceso de garbage collection.
Actualización de código "en caliente" - Muchos
sistemas no pueden detenerse para hacer
mantenimiento de software. Erlang permite cambiar
el código mientras el sistema está ejecutando. El
viejo código puede ser desafectado y reemplazado
por el nuevo código. Durante la transición, el código
nuevo y el viejo puede coexistir. Es posible instalar
parches y evolutivos en un sistema funcionando sin
pertubar la operación normal del sistema.
Carga de código incremental - Los usuarios pueden
controlar en detalle cómo se carga el código. En
sistemas embebidos, todo el código se carga al
momento del arranque. En sistemas en desarrollo, el
código se carga cuando es necesario, aun cuando el
sistema está corriendo. Si al momento de pruebas
se descubren bugs, solo el código con fallas será
reemplazado.
Lisp A continuación, se detallan algunas de las (format t "¡Hola, mundo!")
características de las principales variantes del
lenguaje LISP:
LISP posee un manejo de memoria automático que
libera el espacio utilizado por los objetos que dejan
de ser necesitados.
Incluye un mecanismo bastante simple para utilizar
evaluación perezosa de expresiones.
LISP no posee un sistema de tipos estáticos como
puede ocurrir en c/c++. LISP asocia los tipos a los
valores en vez que, a las variables, por ello los
errores de mal uso de tipos solo puedan ser
detectados en tiempo de ejecución y no de
compilación.
Las implementaciones en LISP suelen programarse
de manera que cálculos iterativos puedan realizarse
en un espacio constante (en memoria) aunque
hayan sido descritos mediante el uso de la
recursividad.