Trabajando con Elixir desde 2014

Erlang

Erlang es un lenguaje de programación que se usa para construir sistemas de software en tiempo real escalables con requisitos de alta disponibilidad.
Algunos de sus usos son en telecomunicaciones, banca, comercio electrónico, telefonía ip y mensajería instantánea. El sistema en tiempo de ejecución de Erlang tiene soporte incorporado para concurrencia, distribución y tolerancia a fallos.

Elixir

Elixir es un lenguaje dinámico y funcional diseñado para crear aplicaciones escalables y mantenibles.
Elixir aprovecha la máquina virtual Erlang, conocida por ejecutar sistemas de baja latencia, distribuidos y con tolerancia a fallos, a la vez que también se utiliza con éxito en el desarrollo web y el dominio de software embebido.

Phoenix

Phoenix es un marco de desarrollo web escrito en Elixir que implementa el patrón del controlador de vista de modelo (MVC) del lado del servidor.
Phoenix proporciona una alta productividad del desarrollador y un alto rendimiento de la aplicación. También tiene algunos giros nuevos e interesantes como canales para implementar características en tiempo real y plantillas precompiladas para una velocidad increíble.

Phoenix liveview

Phoenix LiveView es una biblioteca nueva y emocionante que permite experiencias de usuario enriquecidas y en tiempo real con HTML renderizado por el servidor.
Las aplicaciones con tecnología LiveView tienen estado en el servidor con comunicación bidireccional a través de WebSockets, ofreciendo un modelo de programación enormemente simplificado en comparación con las alternativas de JavaScript.

¿Por qué deberías usar Elixir?

Iconos vectoriales de SVG: http://www.onlinewebfonts.com/icon

CONCURRENCIA

La programación funcional hace posible la concurrencia al evitar tanto las condiciones de carrera (donde dos programas compiten para obtener el mismo valor) como los puntos muertos, donde un programa espera indefinidamente, para que el otro escriba un valor.

Tolerancia a fallos

Proporciona mecanismos de seguridad incorporados que permiten trabajar incluso cuando algo sale mal. Los procesos alertan un fallo a los procesos dependientes, incluso en otros servidores.

Iconos vectoriales de SVG: http://www.onlinewebfonts.com/icon

Escalabilidad

Elixir se ejecuta en Erlang VM, puede ejecutar aplicaciones en múltiples nodos. Podemos hacer aplicaciones web y de IoT más grandes que se puedan escalar en varios servidores diferentes. 

Fuerte comunidad de desarrolladores

Hay una comunidad activa de usuarios donde incluso ingenieros altamente cualificados están dispuestos a ayudar y compartir sus conocimientos.

Pattern matching

Pattern matching te permite organizar de una forma mucho más clara el comportamiento del codigo. Ayuda a hacer las cosas concisas y limpias.

Iconos vectoriales de SVG: http://www.onlinewebfonts.com/icon

DoC y prueba

Elixir tiene pruebas integradas y documentación, sin agregar ninguna biblioteca de terceros.

Depuración

La depuración es mucho más fácil cuando no tienes un estado global. Puedes mirar los argumentos de una función y tienes su estado allí mismo.

Más fácil de entender

Elixir es un lenguaje de programación funcional que es fácil de leer y fácil de usar.

Algunos ejemplos

Operador de tubería

submarino = submarino.nuevo ({posición: 0})
submarine.go_deep (100)
submarine.move (200)
submarine.fire ()

submarino = submarino.nuevo (posición: 0)
|> Submarine.go_deep (100)
|> Submarine.move (200)
|> Submarine.fire ()

Pattern matching

función margarita (mujer, hombre) {
  if (mujer === 'my_love') {
    if (man === 'yo') {
      volver "¡Ella me ama!"
    } más {
      volver "Ella ama a otro ... :("
    }
  } 
  si no (mujer === 'my_friend') {
    volver "Ella es solo mi amiga"
  }
  más {
    volver "¿Quién es ella?"
  }
}

def daisy (: my_love,: me), do: "¡Ella me ama!"
def daisy (: my_love, _), do: "Ella ama a otro ... :("
def daisy (: my_friend, _), do: "Ella es solo mi amiga"
def daisy (_, _), do: "¿Quién es ella?"

Fibonacci

función fibonacci (num, memo) {
  memo = memo || {};
  if (memo [num]) devuelve memo [num];
  if (num <= 1) devuelve 1;
  return memo [num] = fibonacci (num - 1, memo) + fibonacci (num - 2, memo);
}

def fibonacci (n) cuando n <2, hacer: n
def fibonacci (n) do: fibonacci (n-1) + fibonacci (n-2)

Doc & Test incorporada

Doc genera la documentación, y Ejemplos define automáticamente un conjunto de Test simples.

defmodule Fibonacci do
   @moduledoc "" "
   Modurle para fibonacci.
   “””

   @Doc """
   Función de Fibonacci

   ## Ejemplos
          iex> Fibonacci.fibonacci (3)
          2

          iex> Fibonacci.fibonacci (7)
          13
    “””
    def fibonacci (n) cuando n <2, hacer: n
    def fibonacci (n) do: fibonacci (n-1) + fibonacci (n-2)

Vamos a trabajar juntos

¿Tienes un proyecto?
Vamos a trabajar juntos