Плюсую, пару лет назад работал в западной конторе из которой ушел из — за того, что продукт их был собран из «грязи и арматуры». Через год после того как ушел, увидел что они активно пилят проект для сбера. Так что дорогой сбер, хорошая попытка но нет…
— Нелогичное поведение
по мне так в C++ гораздо больше нелогичностей
— Динамическая типизация — нет IntelliSense, из-за чего мы не видим, какие ошибки будут возникать во время написания, а видим их только во время исполнения программы
для этого есть голова
Ок ) А по теме, нечто похожее есть в т. н. «ингибиторе» — датчике положения селектора АКПП, и там точно такая же засада и со стоимостью и с ремонтопригодностью, решения со столь радикальной переделкой я еще не видел.
Добавлю свой, вместо того чтобы делать бесконечный цикл с использованием while:
while (true) {
// body
}
Можно воспользоваться циклом for:
for (;;) {
// body
}
Суть в том, что при каждой итерации цикла while условие должно вычисляться (на самом деле этого конечно не происходит благодаря оптимизациям), но я предпочитаю именно for (;;)
Да я и не говорил что loop & switch — это самая лучшая реализация. Таблицы перехода никто не отменял. Было бы интересно сравнить накладные расходы loop & switch против lookup и вызовы функций. Я помню как то пытался сделать такое, но почему то это оказалось медленнее. Правда это был JavaScript…
Циклом можно принебречь в данном случае, ибо в большей части современных компиляторов / виртуальных машин есть Loop Unrolling, не думаю что цикл будет медленнее чем GOTO (в случае оптимизации!). Не очень понял чем моя конструкция будет отличаться от того же самого но сделанного при помощи GOTO… если вы про лишние проверки на каждой итерации цикла, то switch он тем и отличается от if'ов, что в основе его работы лежит т. н. таблица переходов, которая также строится на этапе оптимизации в ходе компиляции. Поэтому реально сомневаюсь в том что производительность будет как то отличаться.
var state = 'START';
for (;;) switch (state) {
case 'START':
state = 'NEXT';
break;
case 'NEXT':
state = 'STOP';
break;
case 'STOP':
return 'RESULT';
}
Да, с GOTO конечно было бы прикольней, но и без него неплохо.
Вообще было бы круто если бы существовала тулза на вход которой давали бы CSS / HTML / JS а на выходе она упрощала бы CSS до минимально возможного скелета (также с попутным переименованием длинных классов в короткие), подобно тому как это делает Google Closure Compiler для JavaScript'а. Я в свое время пытался такое сделать, но уперся в невозможность определения того что именно является именем класса / частью селектора и т. д., а маркировать такие вещи каким то особым образом — уничтожало весь шарм. При наличии данного инструмента, было бы все равно был ли БЭМ или нет, на выходе все равно получалось бы то что работало бы максимально быстро и занимало бы как можно меньше.
— Отсутствие модульности
уже нет
— Нелогичное поведение
по мне так в C++ гораздо больше нелогичностей
— Динамическая типизация — нет IntelliSense, из-за чего мы не видим, какие ошибки будут возникать во время написания, а видим их только во время исполнения программы
для этого есть голова
Можно воспользоваться циклом for:
Суть в том, что при каждой итерации цикла while условие должно вычисляться (на самом деле этого конечно не происходит благодаря оптимизациям), но я предпочитаю именно for (;;)
Да, с GOTO конечно было бы прикольней, но и без него неплохо.
Странная логика выборки селекторов, больше похоже на описание работы Internet Explorer…
Есть ведь еще и память