He hecho muy poco con Nitrogen hasta ahora, pero he estado monitoreando la lista de correo durante meses, así que creo que tengo algo útil que decir al respecto.
Para su preocupación sobre la sintaxis de Erlang y el marco de Nitrógeno, respondería que eso suena como un caso puro de falta de familiaridad, en lugar de inadecuación. Objetivamente, HTML no es un lenguaje hermoso, y tiene muchas peculiaridades. Ya estás acostumbrado a esto, así que no parece tan malo. Dale una oportunidad a Nitrogen/Erlang y es posible que también te acostumbres pronto.
Para su pregunta acerca de la comparación con otros lenguajes y marcos, diría que la mayor diferencia es que con Nitrogen, todo el sitio web está siendo servido directamente por el tiempo de ejecución de Erlang. Ruby on Rails tiene ese modo, pero está destinado solo para pruebas. Muchos otros marcos ni siquiera ofrecen la opción de ejecutar todo dentro de un solo proceso de larga ejecución.
Ejecución de toda la aplicación web y su infraestructura subyacente dentro de un único proceso de larga duración tiene implicaciones importantes sobre cómo funciona el sitio:
con Apache, cada niño se acabó con cada N conexiones, donde N = 500 o menos, y no puede decir si un niño determinado siempre manejará todas las solicitudes de un cliente determinado. Debido a que HTTP no tiene estado, pero las aplicaciones web casi siempre requieren algún estado de cliente, un elemento secundario de Apache debe reconstruir su vista del estado del cliente como parte del manejo de una nueva conexión. De forma predeterminada, esto significa volver al disco para datos persistentes almacenados sobre ese cliente. Hay alternativas como memcached, pero estas no están integradas en el núcleo de una pila de tipo LAMP. Con Erlang, no se elimina nada periódicamente, y Erlang ofrece instalaciones estándar como Mnesia que proporcionan bases de datos en memoria con respaldo de disco.
Por cierto, si está familiarizado con nginx, está basado en los mismos principios que Erlang, y es rápido por la misma razón. La principal diferencia entre nginx y una instancia de Erlang que ejecuta un servidor web es que nginx no es un entorno de programación, por lo que aún tiene que delegar una gran cantidad de procesamiento a código externo. Eso significa que comparte el mismo IPC y problemas de estado persistentes como Apache.
Debido a que el tiempo de ejecución se mantiene continuamente y es un entorno de programación totalmente funcional, es probable que pueda construir más partes de su sistema en Erlang que con una pila de tipo LAMP fija. Esto magnifica los beneficios anteriores. Las diversas partes de su sistema pueden coordinarse mediante el envío de mensajes y Mnesia en lugar del peso pesado IPC y MySQL, y todas las piezas permanecen funcionando continuamente, lo que lleva a una reconstrucción del estado que requiere menos tiempo.
Una docena de niños Apache que acceden al almacén de datos de estado de cliente persistente es una bola de pelo basada en bloqueo. Todos los marcos manejan el bloqueo de forma transparente, pero lo que no pueden ocultar es el tiempo que lleva hacer todo esto correctamente.
Erlang es un lenguaje funcional impuro, que implica, pero no requiere, pureza de datos; también está construido con multiprocesamiento en mente, yendo hasta el núcleo del diseño de tiempo de ejecución. Estos dos hechos significan que es menos probable que gaste tiempo esperando cerraduras en un servidor basado en Erlang que uno ingenuamente construido en uno de los otros marcos. Sin duda, es posible optimizar las demoras de bloqueo en los otros sistemas, pero ¿es eso realmente lo que quieres hacer? ¿Desea formar parte del equipo número mil que debe aprender a optimizar su pila web después de que el servicio se haga popular, o prefiere dejar todo en manos de la herramienta para que pueda dedicar su tiempo a hacer algo que nadie más ha hecho aún? ?
Si la sintaxis vaga de Erlang te molesta, las dos alternativas que te dan Erlang con sintaxis alternativas son: LFE (Lisp Flavored Erlang) que te da una sintaxis Lisp completa y se encuentra en http://github.com/rvirding/lfe ; Efene que le da una sintaxis similar a la de javascript/python y se encuentra en http://marianoguerra.com.ar/efene – rvirding