- 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);
});
Что бы вы все делали если бы не babel:)
Кстати, я недавно узнал что для node юзает либу libuv. Она умеет платформенное IO : на линуксе унас epoll, на маке kqueue а на винде completion ports.
так что пока всякие питоны и руби сосут наколенную эмуляцию posix в винде, нода юзает настоящщые виндовые API. И кажется даже умеет console api, так что любимый Семой доеб "прышебляди не умеют юникод в виндовой консоли" дляноды не актуален
Теперь не могу jS, но должен скзать что нода -- единственная КРОССПЛАТФОРМЕННАЯ платформа
> всякие питоны и руби сосут наколенную эмуляцию posix в винде
Общеизвестный факт, но IO там вроде нормальное жи. Вывод цветного текста в колораме работает так: она выводит анси последовательности, а на винде стоит дополнительный костыль, которых их превращает в вызовы api.
> И кажется даже умеет console api, так что любимый Семой доеб "прышебляди не умеют юникод в виндовой консоли" дляноды не актуален
СУКА ПИЗДЕЦ, ОНО МОЖЕТ!
Асинхронное IO. Чтобы обслуживать сразу много сокетов или каких-то других потоков.
У каждой платформы есть для этого свой "уникальынй" инструмент. У винды, общепризнанно, это completion ports (ну почитай в msdn). Ну вот нода их умее.
>а на винде стоит дополнительный костыль, которых их превращает в вызовы api.
Разумеется. Потому что виндовая консоль не умеет в esc последовательности (все другие умеют). Винда тоже когда-то умела (ansi.sys), но это было в 9x. В NT не умела
Где-то пролетал какой-то слух что хотели научить ansi colors, но вроде забили.
ну вот нода умеет и цвета и кодировку (ну то-есть вместо printf она юзает Writeconsole и срет туда честным юникодом. Остальные прыщеговны сосут буй
А как делать цвета в ноде?
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
> они могут конечно иметь нативный код и дергать console api
Что они дергают мне в принципе похуй, лишь бы работало.
пока бы обновляться
пока бы обновляться
Я не уверен что оно юзает completion ports под капотом
>>Вот только кому оно надо?
ну вдруг ты захочешь 20 000 человек обслужить одним скриптом?
Проблема с асинхронным апи в том что оно другое. Синхронное используется в 100500 модулях под капотом. Будешь каждый модуль патчить?
надо патчить на уровне платформы чтобы все синхронные вызовы стали асинхронными не изменив при этом семантики!)
ну вот как программа не знает что кроме нее ос гоняет еще 20 программ, так и тут должно быть
пример приведешь?
Ты пишешь од так, словно бы он блокированный, но шедулер же усыпит тебя пока не появятся данные. Почему-то в ОСях всем понятно что вытесняющая многозадачка лучше кооперативки.
А во всяких этих легких тредах классическая кооперативка и один хуй может все заблочить.
Видимо потому что у питона нет apicа с таймером
Вытесняющая многозадачность, конечно, лучше, но, во-первых, O(количество тредов) вне зависимости от их активности, во-вторых, нужно думать о синхронизации.
> apicа с таймером
Что это?
https://github.com/gevent/gevent/issues/1070
>>синхронизации
это кстати именно та причина, по которой Гвидо не хочет отказываться от GIL в CPython: потому что тогда придется думать про синхронизацию и все станет медленее))
>>Что это?
Внутри процов начиная с P6 (PPro наверное) есть местный контроллер прерываний и в нем есть таймер.
Тащемто таймер и раньше был, просто снаружи от проца.
ОСь программирует таймер, таймер поджигается через одинаковое количество времени (или не одинаковое, см tickless kernel) и вызывает прерывание. Проц бросает всё, что он делал, и обсулижвает прерывание. Обработчик прерывания (установленный осью) запускает шедулер, который выбирает нужный процесс и загружает его. Так что даже если ты все нафиг заблочил, то тебя все равно прервут.
Так работает вытесняющая многозадачность.
Ну а во всяких asyncio программа явно должна отдать управление (вызвав асинхронную функцию), так что если один из потоков сделает блокирующий вызов то весь asyncio пойдет по пизде. Ну вот я и сказал что у процесса-то нет таймера нет
И как, получилось? А сокеты патчить? А всякие там вызовы pycurl?
О синхронизации и сейчас надо думать, правда, меньше.
Блин, ты все в кучу намешал - аппаратную реализацию таймера и питон.
> Ну а во всяких asyncio программа явно должна отдать управление (вызвав асинхронную функцию), так что если один из потоков сделает блокирующий вызов то весь asyncio пойдет по пизде.
Ну да, и? Че сказать хотел?
Все так. Приятно видеть первоклассную поддержку, а не "у нас вроде работает, а дальше сам ебись."
> M$
ты как сюда попал?
Ты опять выходишь на связь?
Поздравляю. libuv в принципе изначально разработали для ноды. Это уже потом libuv во многие другие среды просочился.
> нода юзает настоящщые виндовые API
Счастье-то какое, а то ведь очередь уже выстроилась из тех, кто хочет жс-серера на винде запускать.
Я старался JS за семь верст обходить, так что не знал.
>>а то ведь очередь уже выстроилась из тех
Как ни странно такие бывают. JSер вполне может сидеть на винде и хотеть девелопить (и даже хостить, лол) там что-то бекендное
зы: мир JS меняется каждый день. наши фронтэндеры недавно рассказали мне что npm уже не рулит и пересадили на yarn. Сразу всплыли все неявные peer dependecies в package.json и все сломалось
но yarn все равно умеет ставить параллельно, и потому быстрее.
Или в мире JS уже модно ставить нужные пакеты на лету во время обработки запроса?
ну вот я сделал ``git pull`` и наверное надо заинсталлить те 150 пакетов которые там появились в package.json, и я не хочу ждать.
А еще install --production случается во время билда проекта на CI. Там тоже время лучше не тратить
Какой CI сервер?