30.12.2013 09:16, Михаил Монашёв wrote:

Или  может  даже  более  правильный  вопрос: как голову переключить на
асинхронное программирование?

Про расово верный подход уже написали, но лучше с точки зрения
надёжности код при минимуме трудозатрат - всё-таки сопрограммы.

Есть проверенные платформы - Go (лучшее решение, на мой взгляд),
Stackless Python (моя давняя любовь), есть Perl Coro (не пробовал, но
теоретически - то же самое).

Как то уже втянулся писать без сопрограмм.

Я один большой проект на ноде сделал (больше года писали) - и там любая
более-менее сложная логика (запрос к нескольким бэкендам, слияние
результатов, обработка таймаутов и ошибок) даже с использованием модулей
типа async выглядит ужасно. Любой случайно пропущенный callback()
приводит к зависанию логики. Необработанные исключения - то же самое. Со
временем привыкаешь не делать такие ошибки (мозг перестраивается), но
каждый новый человек на проекте - это те же самые грабли снова и снова.

А новые люди легко начинают писать на Ноде по твоему опыту?

Писать начинают быстро. Но первые ревью - это кошмар. Со временем становится лучше. Но нормальный асинхронный код без скрытых косяков получается у единиц.

Во-вторых, он автоматически использует несколько ядер, раскидывая по ним
сопрограммы. Настолько автоматически, что перед блокирующими системными
вызовами все сопрограммы, которые в том же потоке выполнялись,
автоматически мигрируют в другие потоки.

Мега-фича, кстати.

Если  другие  форкаются для того, чтобы все ядра загрузить, то как тут
это реализовано?

В текущей реализации говоришь интерпретатору, сколько потоков хочешь, и он делает. Дальнейшая работа по параллелизации сопрограмм происходит практически прозрачно для программиста. Есть нюансы с доступом к общим данным, но они хорошо документированы.


В-третьих, правильная работа с буферами. Почти как в V8, только
программист явно управляет копированием, чтобы случайно лишних
копирований не сделать.

А  ты  DART  смотрел?  Его  вроде  автор V8 писал и по его задумке это
должен   был   стать   улучшенный   JavaScript  без  свойственных  ему
рудиментов. Недавно узнал, что типизация в нём необязательна.

Нет, не довелось.

--
Alexander Lourier
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить