Avatar for 9000

[#nargery] В конторе мне сейчас досталось много писать на ES6 / Node. А там promises. Немедленно пригодились знания о монадках и их законах (для promise под определённым углом работают все, с одной выколотой точкой). Немедленно в коде возникли currying и point-free style, просто потому, что это понятнее и короче. Немедленно await воспринимается как `<-` внутри хаскелевской do-notation.

Comment

Самое приятное, что promises пошли в мэйнстрим, и все библиотеки либо выставляют их напрямую, либо обладают обёртками для преобразования интерфейса. Глядишь, и разумные паттерны в сообществе постепенно закрепятся.

 ‎· 9000
Comment

закрепятся паттерны "хуй подебажишь". Они, собственно, уже закрепились - makeFuture().then().then().then().then().then().thenError().then().thenError(). угадайте, как выглядит стек, если ты поймал SIGSEGV в четвёртом .then()

 ‎· кружок татарских лайфхаков 14
Comment

Нуу, не знаю; либо вставлять debug print, либо node inspect -p <pid> мне помогают в тяжёлых случаях. Хочешь красивый stacktrace — не ленись давать функциям имена. А sigsegv — это, я так понимаю, собственно node рухнула, native code; когда такое бывает?

 ‎· 9000
Comment

да тут и без sigsegv, просто где-то в event loop что-то упало, что читало из сокета. из какого сокета, что читало...

 ‎· misha 1
Comment

и эти люди упрекают Яверов за длинный stack trace

 ‎· Glory to Mankind
Comment

Ну что кроме лени мешает в промисы контекст добавить и его логгировать. Или правильно пробрасывать ошибки по цепочке промисов вверх.

 ‎· TODO: feathers 2
Comment

@walkin: длинный стектрейс хорошо, короткий плохо!

 ‎· the REST is rust and stardust
Comment

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

 ‎· TODO: feathers 3
Comment

@earwin: обязательно расскажу об этом людям, написавшим мой проект, если увижу когда-нибудь

 ‎· misha 3
Comment

^^^^ "пробрасывать ошибки по цепочке промисов вверх" — именно.

 ‎· 9000 1
Comment

@9000 любой код - нативный. Но конкретно вот тот - это плюсы. И про "давать функциям имена" в этом контексте отдельно хорошо - потому что лямбды, лямбды везде. Их даже folly::Symbolizer не берёт. Дебаг принты вставлять да, но прошлый раз, когда мне пришлось нырять в это говно, принтов получилось 150(СТО ПЯТЬДЕСЯТ), и в конце это были принты стектрейсов. Потому что стеки у тебя "Executor вызывает .then()". В лучшем случае. А в худшем (который собственно и был) стектрейса нет, потому что кто-то закинул worker loop в IOThreadPoolExecutor, и у тебя 2% этих вот .then() просто никогда не исполняются. Они помещаются в очередь палача (можно я буду Executor переводить как "палач"?) и там сидят.

 ‎· кружок татарских лайфхаков 2
Comment

@dma: "любой код - нативный" ^ vs "ES6 / Node" из поста слегка противоречат друг другу. А так да, вещь относительно новая ⇒ относительно сырая, не обросшая ещё удобствами везде.

 ‎· 9000 1

1 2 3 4 5 6 7 8 9 10