[Moscow.pm] Стиль асинхронного программирования

Alexander Lourier aml на rulezz.ru
Пн Дек 30 11:55:47 PST 2013


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

>>>>> Или  может  даже  более  правильный  вопрос: как голову переключить на
>>>>> асинхронное программирование?
>>>
>>>> Про расово верный подход уже написали, но лучше с точки зрения
>>>> надёжности код при минимуме трудозатрат - всё-таки сопрограммы.
>>>
>>>> Есть проверенные платформы - Go (лучшее решение, на мой взгляд),
>>>> Stackless Python (моя давняя любовь), есть Perl Coro (не пробовал, но
>>>> теоретически - то же самое).
>>>
>>> Как то уже втянулся писать без сопрограмм.
>
>> Я один большой проект на ноде сделал (больше года писали) - и там любая
>> более-менее сложная логика (запрос к нескольким бэкендам, слияние
>> результатов, обработка таймаутов и ошибок) даже с использованием модулей
>> типа async выглядит ужасно. Любой случайно пропущенный callback()
>> приводит к зависанию логики. Необработанные исключения - то же самое. Со
>> временем привыкаешь не делать такие ошибки (мозг перестраивается), но
>> каждый новый человек на проекте - это те же самые грабли снова и снова.
>
> А новые люди легко начинают писать на Ноде по твоему опыту?

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

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

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

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

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

-- 
Alexander Lourier


Подробная информация о списке рассылки Moscow-pm