- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
Promise.resolve().then(async () => {
await f();
}).catch(e => console.log('Popalsa pidrila!'));
async function f(){
await n();
}
function n() {
Promise.reject('pidrila');
}
process.on('unhandledRejection', error => {
console.log('oxyel!', error);
});
inho 16.02.2018 14:44 # +1
g0_1494089147006 16.02.2018 14:45 # 0
sam 16.02.2018 16:50 # +2
g0_1494089147006 16.02.2018 16:50 # 0
syoma 16.02.2018 16:52 # 0
g0_1494089147006 16.02.2018 16:52 # 0
sam 16.02.2018 17:10 # 0
g0_1494089147006 16.02.2018 17:10 # 0
syoma 17.02.2018 03:35 # 0
g0_1494089147484 17.02.2018 21:47 # 0
SemaReal 18.02.2018 02:37 # +2
Что бы вы все делали если бы не babel:)
mazhuravlev 18.02.2018 04:43 # 0
bormand 18.02.2018 04:45 # 0
SemaReal 18.02.2018 04:51 # +4
Кстати, я недавно узнал что для node юзает либу libuv. Она умеет платформенное IO : на линуксе унас epoll, на маке kqueue а на винде completion ports.
так что пока всякие питоны и руби сосут наколенную эмуляцию posix в винде, нода юзает настоящщые виндовые API. И кажется даже умеет console api, так что любимый Семой доеб "прышебляди не умеют юникод в виндовой консоли" дляноды не актуален
Теперь не могу jS, но должен скзать что нода -- единственная КРОССПЛАТФОРМЕННАЯ платформа
syoma 19.02.2018 21:36 # 0
> всякие питоны и руби сосут наколенную эмуляцию posix в винде
Общеизвестный факт, но IO там вроде нормальное жи. Вывод цветного текста в колораме работает так: она выводит анси последовательности, а на винде стоит дополнительный костыль, которых их превращает в вызовы api.
> И кажется даже умеет console api, так что любимый Семой доеб "прышебляди не умеют юникод в виндовой консоли" дляноды не актуален
СУКА ПИЗДЕЦ, ОНО МОЖЕТ!
SemaReal 19.02.2018 21:59 # +1
Асинхронное IO. Чтобы обслуживать сразу много сокетов или каких-то других потоков.
У каждой платформы есть для этого свой "уникальынй" инструмент. У винды, общепризнанно, это completion ports (ну почитай в msdn). Ну вот нода их умее.
>а на винде стоит дополнительный костыль, которых их превращает в вызовы api.
Разумеется. Потому что виндовая консоль не умеет в esc последовательности (все другие умеют). Винда тоже когда-то умела (ansi.sys), но это было в 9x. В NT не умела
Где-то пролетал какой-то слух что хотели научить ansi colors, но вроде забили.
ну вот нода умеет и цвета и кодировку (ну то-есть вместо printf она юзает Writeconsole и срет туда честным юникодом. Остальные прыщеговны сосут буй
syoma 19.02.2018 22:02 # 0
А как делать цвета в ноде?
SemaReal 19.02.2018 22:08 # 0
python.exe -c "print(u'абырвалг Straße')"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "c:\[.....]\lib\encodings\cp866.py", line 12, in encode
return codecs.charmap_encode(input,errors,encod ing_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-7: character maps to <undefined>
В тройке может и сработает, там в какой-то момент вроде это лечили
вот пеп, приземлился в 3.6: https://www.python.org/dev/peps/pep-0528/
ура! питон больше не прыщиговно?
>>А как делать цвета в ноде?
я на под ноду не пишу особо, но npm и yarn же как-то делают. или думаешь там тоже костыль?
зы: ну вот есть пакетики, правда они могут конечно иметь нативный код и дергать console api
https://github.com/Marak/colors.js
syoma 19.02.2018 22:10 # −1
> они могут конечно иметь нативный код и дергать console api
Что они дергают мне в принципе похуй, лишь бы работало.
SemaReal 19.02.2018 22:15 # 0
пока бы обновляться
syoma 19.02.2018 22:20 # 0
SemaReal 19.02.2018 22:30 # 0
g0_1494089131830 19.02.2018 23:38 # 0
g0_1494089131830 19.02.2018 23:38 # 0
syoma 20.02.2018 03:15 # 0
SemaReal 20.02.2018 04:06 # 0
syoma 20.02.2018 04:10 # 0
SemaReal 19.02.2018 22:15 # 0
пока бы обновляться
syoma 19.02.2018 22:03 # 0
SemaReal 19.02.2018 22:16 # 0
Я не уверен что оно юзает completion ports под капотом
>>Вот только кому оно надо?
ну вдруг ты захочешь 20 000 человек обслужить одним скриптом?
syoma 19.02.2018 22:18 # +1
Проблема с асинхронным апи в том что оно другое. Синхронное используется в 100500 модулях под капотом. Будешь каждый модуль патчить?
SemaReal 19.02.2018 22:19 # 0
syoma 19.02.2018 22:21 # 0
SemaReal 19.02.2018 22:25 # +1
надо патчить на уровне платформы чтобы все синхронные вызовы стали асинхронными не изменив при этом семантики!)
ну вот как программа не знает что кроме нее ос гоняет еще 20 программ, так и тут должно быть
syoma 19.02.2018 22:26 # 0
пример приведешь?
SemaReal 20.02.2018 02:14 # 0
Ты пишешь од так, словно бы он блокированный, но шедулер же усыпит тебя пока не появятся данные. Почему-то в ОСях всем понятно что вытесняющая многозадачка лучше кооперативки.
А во всяких этих легких тредах классическая кооперативка и один хуй может все заблочить.
Видимо потому что у питона нет apicа с таймером
syoma 20.02.2018 03:14 # 0
Вытесняющая многозадачность, конечно, лучше, но, во-первых, O(количество тредов) вне зависимости от их активности, во-вторых, нужно думать о синхронизации.
> apicа с таймером
Что это?
SemaReal 20.02.2018 04:14 # 0
https://github.com/gevent/gevent/issues/1070
>>синхронизации
это кстати именно та причина, по которой Гвидо не хочет отказываться от GIL в CPython: потому что тогда придется думать про синхронизацию и все станет медленее))
>>Что это?
Внутри процов начиная с P6 (PPro наверное) есть местный контроллер прерываний и в нем есть таймер.
Тащемто таймер и раньше был, просто снаружи от проца.
ОСь программирует таймер, таймер поджигается через одинаковое количество времени (или не одинаковое, см tickless kernel) и вызывает прерывание. Проц бросает всё, что он делал, и обсулижвает прерывание. Обработчик прерывания (установленный осью) запускает шедулер, который выбирает нужный процесс и загружает его. Так что даже если ты все нафиг заблочил, то тебя все равно прервут.
Так работает вытесняющая многозадачность.
Ну а во всяких asyncio программа явно должна отдать управление (вызвав асинхронную функцию), так что если один из потоков сделает блокирующий вызов то весь asyncio пойдет по пизде. Ну вот я и сказал что у процесса-то нет таймера нет
syoma 20.02.2018 04:32 # 0
И как, получилось? А сокеты патчить? А всякие там вызовы pycurl?
О синхронизации и сейчас надо думать, правда, меньше.
Блин, ты все в кучу намешал - аппаратную реализацию таймера и питон.
> Ну а во всяких asyncio программа явно должна отдать управление (вызвав асинхронную функцию), так что если один из потоков сделает блокирующий вызов то весь asyncio пойдет по пизде.
Ну да, и? Че сказать хотел?
g0_1494089131830 20.02.2018 11:02 # 0
syoma 19.02.2018 21:41 # +1
Все так. Приятно видеть первоклассную поддержку, а не "у нас вроде работает, а дальше сам ебись."
g0_1494089131830 19.02.2018 21:59 # 0
inho 19.02.2018 22:01 # 0
inho 19.02.2018 22:09 # 0
syoma 19.02.2018 22:19 # 0
> M$
ты как сюда попал?
syoma 19.02.2018 22:26 # 0
syoma 19.02.2018 22:06 # 0
Ты опять выходишь на связь?
roman-kashitsyn 20.02.2018 14:17 # +3
Поздравляю. libuv в принципе изначально разработали для ноды. Это уже потом libuv во многие другие среды просочился.
> нода юзает настоящщые виндовые API
Счастье-то какое, а то ведь очередь уже выстроилась из тех, кто хочет жс-серера на винде запускать.
g0_1494089131830 20.02.2018 14:17 # 0
SemaReal 20.02.2018 20:10 # 0
Я старался JS за семь верст обходить, так что не знал.
>>а то ведь очередь уже выстроилась из тех
Как ни странно такие бывают. JSер вполне может сидеть на винде и хотеть девелопить (и даже хостить, лол) там что-то бекендное
syoma 20.02.2018 19:05 # 0
SemaReal 18.02.2018 04:46 # 0
зы: мир JS меняется каждый день. наши фронтэндеры недавно рассказали мне что npm уже не рулит и пересадили на yarn. Сразу всплыли все неявные peer dependecies в package.json и все сломалось
mazhuravlev 18.02.2018 05:03 # 0
SemaReal 18.02.2018 05:15 # +1
но yarn все равно умеет ставить параллельно, и потому быстрее.
mazhuravlev 18.02.2018 11:12 # 0
g0_1494089131830 18.02.2018 11:36 # +1
Fike 18.02.2018 17:06 # −1
bormand 18.02.2018 17:08 # 0
SemaReal 19.02.2018 21:33 # +1
1024-- 18.02.2018 15:09 # 0
Или в мире JS уже модно ставить нужные пакеты на лету во время обработки запроса?
SemaReal 19.02.2018 21:35 # +2
ну вот я сделал ``git pull`` и наверное надо заинсталлить те 150 пакетов которые там появились в package.json, и я не хочу ждать.
А еще install --production случается во время билда проекта на CI. Там тоже время лучше не тратить
mazhuravlev 20.02.2018 13:46 # 0
g0_1494089131830 20.02.2018 13:46 # −1
SemaReal 20.02.2018 20:14 # 0
Какой CI сервер?
inho 19.02.2018 22:02 # 0