erlang distributed concurrency

¿Cuáles son algunos proyectos interesantes para resolver en Erlang con fines de aprendizaje?



distributed concurrency (7)

Algunas cosas de mi lista de Tareas pendientes que serían buenos ejercicios de aprendizaje y útiles para la comunidad Erlang en general:

  • Perfile todas las tiendas clave / de valor disponibles:

    • Escriba una biblioteca para probar los tiempos de inserción, búsqueda, eliminación y búsqueda de una variedad de tiendas K / V
    • Crear un conjunto de pruebas de referencia que las personas puedan ejecutar
    • Haz que funcione con ets, dets, proplists, gb_trees, dict, orddict, redblack trees, bdb, tokyocabinet, ...
    • Producir bonitos gráficos
    • Facilita la actualización, la contribución y la ejecución en la máquina de cualquier persona
  • escriba una nueva rutina de formato io_lib: que usa parámetros con nombre:

    • io_lib: nformat ("Hola, ~ {nombre} s ~ n.", [{nombre, "Bob"}]).
    • Esto es útil para la internacionalización si la posición de los parámetros cambia cuando cambia el idioma de la cadena de formato.
  • Extender erl -make (make.erl)

    • Permitir agregar rutas de código (para que no tenga que hacer erl -pa LibraryPath -make)
    • Compilar / cargar módulos de comportamiento antes de los módulos que implementan esos comportamientos
    • Manejar los módulos jerárquicos correctamente (ruta de salida en particular)

Recientemente descubrí Erlang y ahora estoy trabajando en mi camino a través de un par de tutoriales. Ahora estoy ansioso por implementar algo como un proyecto de hobby. No estoy realmente interesado en otro servidor de chat. Me gustaría codificar algo más interesante (sí, soy consciente de que este es un término bastante difuso) que también es manejable, así que puedo terminarlo en mi tiempo libre.

¿Alguna sugerencia?

Editar: El proyecto debería destacar las fortalezas de Erlang (concurrencia, distribuido).


Esto no responde exactamente a su pregunta, pero si está buscando un interesante proyecto gratuito de código abierto que esté escrito en Erlang, debería consultar CouchDB. Desde el sitio web:

Apache CouchDB es una base de datos distribuida, tolerante a fallos y libre de esquemas orientada a documentos accesible a través de una API RESTful HTTP / JSON. Entre otras características, proporciona una replicación robusta e incremental con detección y resolución bidireccional de conflictos, y es consultable e indexable utilizando un motor de visualización orientado a tablas con JavaScript como el lenguaje de definición de vista predeterminado.

CouchDB está escrito en Erlang, pero se puede acceder fácilmente desde cualquier entorno que proporcione medios para realizar solicitudes HTTP. Hay una multitud de bibliotecas de clientes de terceros que hacen esto aún más fácil para una variedad de lenguajes de programación y entornos.

El sitio web de CouchDB tiene más detalles. Feliz codificación!



encuentra algo que Erlang no tiene que entiendas y me guste. Lo hice con etap https://github.com/ngerakines/etap/ Ahora nick se hizo cargo de la administración y se usa internamente en los juegos de EA. Fue divertido hacer un póster anterior y me gustó que fuera algo real, así que aprendí a resolver los problemas del mundo real al trabajar en él.


Para algo para ti, considera escribir un servidor simple; algo que, por ejemplo, solicita solicitudes de fecha / hora o, un poco más elegante, un daemon HTTP que solo sirve contenido estático.

La mejor parte de Erlang es la forma en que maneja la concurrencia; ejercita eso.


  1. Cree un sistema distribuido que busque feeds de Twitter en tiempo real y que permita a cualquier persona realizar búsquedas desde una interfaz web.

  2. Construye un sistema de archivos distribuidos. Implemente B * Trees o B + Trees distribuidos como la base de este sistema de archivos. Hazlo en erlang.

  3. Cree un almacén de valores de claves distribuidas en la parte superior del sistema de archivos distribuidos creado en el paso 2.

  4. Cree un índice web distribuido (para ser utilizado por un motor de búsqueda web distribuido) en la parte superior del almacén de valores clave.

  5. Construye un enlazador distribuido. La automatización avanzada de compilación ofrece procesamiento de agente remoto para compilaciones distribuidas y / o procesamiento distribuido.

  6. Construya un backend de MMORPG que se base en el almacenamiento distribuido del estado del juego / jugador y el procesamiento distribuido de las solicitudes de los usuarios.


Sistema de indexación / búsqueda de archivos. Esto fue por proyecto de introducción, pero cambié a otra cosa.

Una vez que lo tenga funcionando, podría mover los índices a mnesia y luego distribuir los otros nodos para tener un índice de red completo.