Я считаю, что сообщество Erlang не завидует Node.js, поскольку оно неблокирует ввод-вывод изначально и имеет способы легко масштабировать развертывания для нескольких процессоров (что-то даже не встроено в Node.js). Подробнее см. http://journal.dedasys.com/2010/04/29/erlang-vs-node-js и Node.js или Erlang
Как насчет Хаскелла? Может ли Haskell предоставить некоторые из преимуществ Node.js, а именно, чистого решения, чтобы избежать блокировки ввода-вывода, не прибегая к многопоточному программированию?
Есть много вещей, которые привлекательны с помощью Node.js
- События: нет манипуляций с потоками, программист предоставляет только обратные вызовы (как в фреймворке Snap)
- Гарантируется, что обратные вызовы будут выполняться в одном потоке: нет условий гонки.
- Хороший и простой UNIX-API. Бонус: отличная поддержка HTTP. Также доступен DNS.
- Каждый ввод-вывод по умолчанию является асинхронным. Это позволяет избежать блокировок. Однако слишком большая обработка ЦП в обратном вызове будет влиять на другие соединения (в этом случае задача должна разделиться на более мелкие подзадачи и перепланировать).
- Одинаковый язык для клиентской и серверной сторон. (Я не вижу слишком большого значения в этом, однако jQuery и Node.js используют модель программирования событий, но все остальное совсем другое. Я просто не вижу, как код обмена между серверной и клиент- сторона может быть полезна на практике.)
- Все это упаковано в один продукт.