10 февраля 2012 г. 11:40 пользователь Fedor Panasenko
<fpana...@gmail.com> написал:
> В тему NodeJS и прочих интересных и перспективных технологий в продакшене:
> http://blog.safeshepherd.com/post/12175941935/how-one-missing-var-ruined-our-launch
>
> --
> Вы получили это сообщение, поскольку подписаны на группу Coffee'n'code Donetsk.
>
> Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу cnc-d...@googlegroups.com.
> Чтобы отменить подписку на эту группу, отправьте сообщение по адресу cnc-donetsk...@googlegroups.com.
> О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/cnc-donetsk?hl=ru.
>
В тему NodeJS и прочих интересных и перспективных технологий в продакшене:
http://blog.safeshepherd.com/post/12175941935/how-one-missing-var-ruined-our-launch
On top of that, again, our system does some extensive session checking (for security), and so as upset users logged in and out on different tabs, there were a ton of “Unauthorized” errors bubbling up (that muddled any attempt to see if real errors were being hit).
Yes, I should have load testing, but I wouldn’t feel secure that it would catch the race condition that had ensued.
I’m not an expert in JavaScript, but let me explain it as best I can (or maybe see here). In JavaScript, you declare variables either in the function scope or the global scope (with some intricacies on walking up the scope chain for declaration / reference until global scope). When I created initial without using var, it walked up the scope chain until it quickly reached global scope and created a global variable initial.
Слабенький вброс. Парни явно не понимают какую технологию они используют и какие приняты стандарты использования этой технологии:On top of that, again, our system does some extensive session checking (for security), and so as upset users logged in and out on different tabs, there were a ton of “Unauthorized” errors bubbling up (that muddled any attempt to see if real errors were being hit).Молодцы, че, в single thread кидать exception на каждый чих, при том что во всех мануалах для начинающих описано что в ноде используется стандарт CommonJS, а стандарт CommonJS предписывает не делать throw ошибке, а передавать её первым параметром в функцию callback(либо функции обработчику события)
Yes, I should have load testing, but I wouldn’t feel secure that it would catch the race condition that had ensued.Поймать race condition в *однопоточном* приложении, где каждая функция выполняется, по факту, последовательно(не определен лишь порядок выполнения), нужно тоже неслабо так постараться.
I’m not an expert in JavaScript, but let me explain it as best I can (or maybe see here). In JavaScript, you declare variables either in the function scope or the global scope (with some intricacies on walking up the scope chain for declaration / reference until global scope). When I created initial without using var, it walked up the scope chain until it quickly reached global scope and created a global variable initial.А изучать технологию или язык перед тем как её использовать уже не модно, да? Для "не экспертов", которые неспособны с одно взгляда на исходники увидеть пропущеный var (число которых стойко держится около отметки 99.999%) давным давно придумали линтеры, о чем я писал ранее.
3\5
Exception -- это быстрый способ прекратить заниматься хуитой в глубоко вложенном вызове. Если на каждом уровне проверять if (error) то можно потратить много времени на ненужные действия. Если в CommonJS так заведено, то это только проблемы CommonJS.
На однопроцессорной машине тоже весь код выполняется последовательно, а поди ж, тоже гонки бывают.
Гонка будет если lock и unlock разнесены в разные функции. А если не разнесены, то это, очевидно, синхронный код, и -- надевай трусы/снимай крестик.
Изучать и критиковать -- это вовсе не разные полюсы. Можно "совмещать". Ну так судя по твоим цифрам этих "не экспертов" -- 99.999%. Что какбе намекае.
Exception -- это быстрый способ прекратить заниматься хуитой в глубоко вложенном вызове. Если на каждом уровне проверять if (error) то можно потратить много времени на ненужные действия. Если в CommonJS так заведено, то это только проблемы CommonJS.в JSe есть более элегантные способы прекратить заниматься хуитой в глубоко вложенном вызове чем на каждом уровне if(error) писать или кидать Exception.
На однопроцессорной машине тоже весь код выполняется последовательно, а поди ж, тоже гонки бывают.
Гонка будет если lock и unlock разнесены в разные функции. А если не разнесены, то это, очевидно, синхронный код, и -- надевай трусы/снимай крестик.Если lock и unlock вообще будут присутствовать в JS коде - то это знак что устав не соответствует монастырю.
Изучать и критиковать -- это вовсе не разные полюсы. Можно "совмещать". Ну так судя по твоим цифрам этих "не экспертов" -- 99.999%. Что какбе намекае."не эксперты" это люди неспособные с одного взгляда найти в файле произвольного размера пропущенный var, это задача линтеров и IDE. В других языках похожая ситуация - ты не сможешь быстро взглянув на исходник сказать - скомпилируется он или нет. Критиковать - писать на javascript используя java style и жаловаться что javascript не java?
Нету никаких style. Есть только ветвления, циклы и подпрограммы. Мне в школе рассказывали.
Ок. Троллить не буду. А про "более элегантные способы" всё же хотел бы услышать. А то я растерялся прям.
Неужели в JavaScript есть setjmp/longjmp или call-cc?
Это какие же? Просвети.
Exception -- базовый механизм языка и если у commonjs с этим проблемы, то на лицо утечка абстракции. Это плохая, негодная библиотека.