Список событий/асинхронных языков

Я работаю над системой, чем с самого начала. Я начал смотреть/играть с асинхронными /evented подходами к написанию кода сервера. Я играл с Ruby EventMachine и node.js.

EventMachine классный, но не имеет асинхронного ввода-вывода файлов, который мне нужен. Интерфейс тоже странный.

Node.js является удивительным, но это... uhh.. it javascript.

Может ли большее сообщество помочь мне перечислить другие языки с сильной асинхронной поддержкой? Для квалификации язык должен поддерживать как закрытие, так и библиотеки для асинхронного файла io, http и т.д. Было бы неплохо иметь что-то вроде node.js, написанное на более сильном языке, чем javascript.

Lisp? Питон искривился, не так ли?

Ответ 1

Erlang может быть языком с наивысшей внутренней масштабируемостью для серверного кода (он управляет многопроцессорной обработкой для вас, в основном путем выполнения асинхронное, совместное переключение задач "под обложками" ) - если вы можете вместить свой особый синтаксис и (часто) своеобразную семантику.

Python скручивается (очень общая цель для всех сетевых задач), торнадо (специально для асинхронного сервера) и безплатно (широко используется в онлайн-играх MMP), не говоря уже о старом, но полезном asyncore, который в стандартную библиотеку (и еще более старую "Медузу", которая сидит поверх асинкора, чтобы обогатить ее функциональность).

Go имеет очень легкие "стековые" goroutines и channels для синхронизации, когда это необходимо.

Ответ 2

Я бы порекомендовал вам еще раз взглянуть на node.js. Одна из самых больших проблем с использованием библиотек для создания событийного программирования на объектно-ориентированном языке программирования (а не с использованием языка программирования на основе событий в первую очередь) состоит в том, что обычно все остальные существующие библиотеки не основаны на событиях, и на самом деле неудобно смешивать события и синхронный ввод-вывод. Фактически, это практически невозможно, или, точнее, это возможно, но в первую очередь уничтожает все преимущества использования ввода-вывода на основе событий. (Обратите внимание, что в значительной степени любая сторонняя библиотека, которую вы используете (и библиотеки, которые они используют и т.д.), Включая стандартные и основные библиотеки самого языка, должна быть основана на событиях, чтобы на самом деле воспользоваться преимуществами. вы потратите большую часть своего времени на проект, создавая асинхронные обертки вокруг существующих библиотек.)

Теперь, если использование библиотек, основанных на событиях, является такой плохой, то почему я рекомендую node.js? Простой: ECMAScript не имеет синхронных библиотек ввода-вывода (из-за простого факта, что он вообще не имеет библиотек ввода-вывода), поэтому проблема смешивания просто не возникает. (Фактически, у него есть некоторые библиотеки ввода-вывода, такие как XmlHttpRequest или веб-сокеты, но угадайте, что: все они уже основаны на событиях.)

node.js реализует все библиотеки ввода-вывода, все на основе событий, без требований обратной совместимости или устаревшего.

В противном случае на каждом языке или платформе есть библиотеки на основе событий или асинхронного ввода-вывода: Ruby имеет EventMachine и Rev,.NET Rx, JVM имеет NIO, системы Unix имеют kqueue/epoll, C имеет libev и libeio (поверх которых node.js и Rev построены), Perl имеет AnyEvent (построен на вершине libev одним и тем же автором) и т.д.

Ответ 4

F # имеет асинхронные рабочие процессы, которые являются огромным способом записи асинхронного кода.