Prosche wrote: ↑10 Jan 2018 22:16
Я живу в мире эмбеддед, у нас исключения применяются так, как я описал. Плюсы в менее требовательной среде могут использовать исключения более свободно, так что соглашусь с вами.
C трудом представляю как там вообще можно пользоваться шарпом, где одна среда исполнения весит немеряно.
Обычно при программировании встроенного железа исключения вообще отрубают нафиг на этапе компиляции.
Вообще я выше писал, что шарп не очень знаю, а на плюсах пишу, в ембедед.
Но все же если хотите расширите свои представления, погуглите "mono embedded"
Prosche wrote: ↑10 Jan 2018 21:17...фактически исключение в плюсах это аппликация валиться и перед смертью мы пытаемся чтото спасти или зафиксировать в журнале,...
Нет, ни в коем случае. В плюсах исключения - обработка нештатных ситуаций, т.е. ошибок, но совсем не обязательно связанных с "аппликация валиться и перед смертью". Вся философия исключений в С++ построена вокруг идеи того, что исключения являются recoverable. "Перед смертью" - это скорее подыерархия logical errors. Когда же речь идет о подыерархии runtime errors, никакого "перед смертью" не подразумевается.
А уж вопрос о том, является ли каждая конкретная нештатная ситуация поводом для выбрасывания исключения или нет - это неоднозначный вопрос дизайна, стоящий одинаково во всех языках программирования. Вплоть до реализации обеих возможностей, как это сделано в стандартных потоках ввода-вывода в С++.
Философия философией, а до недавних пор имплементация исключений была настолько кривой, что роняла и перфоманс и размер финального бинарника удваивала. -fno-exceptions не просто так придумали и весь геморрой с поддержкой двух версий "с" и "без" не на ровном месте появился.
Мальчик-Одуванчик wrote: ↑10 Jan 2018 22:47
C трудом представляю как там вообще можно пользоваться шарпом, где одна среда исполнения весит немеряно.
...
Да сколько она там весит.
Мегабайт 100-200?
Копейки, по нынешним меркам.
Vaiyo A-O, A Home Va Ya Ray, Vaiyo A-Rah, Jerhume Brunnen G!
nightmare2 wrote: ↑11 Jan 2018 03:09
Да сколько она там весит.
Мегабайт 100-200?
Копейки, по нынешним меркам.
На нашем устройстве еще недавно (2 года назад) было 32 мега рама и 32 флеша (это на продвинутом, а на бюджетном 16 рама, из них оська занимала 9) и крутись как хочешь. Резонно спросить нахуа весь этот цирк, если разница в 5$? но кода речь идет о продажах миллионными тиражами, увы, страдают софт. девелоперы. На новых устройствах уже страшно сказать 128Мб, а на топовых 512!
Prosche wrote: ↑10 Jan 2018 19:39
Идея была показать, что решение со словарем ничуть не длиннее, не сложнее, не... в общем лучше всяких ифов и свитчей:)
Т.е. поскольку место капитана уже занято
подались в лейтенанты
Где как. У меня например (1) шаблоны там и (2) важна последовательность их проверки.
Конечно можно массив изобразить но обычные if ничуть не хуже были. Хотя и некрасиво конечно.
Помнится давно мне пришлось доделывать сайт, написанный на ColdFusion. Там тоже была дикая возня с календарём и кучей кейсов, а в конце была приписка -- Sorry guys I could not figure out how to make this shit shorter... По крайней мере автору была не чужда самокритика.
Я видел код, где какое-то несложное выражение типа A*sin(x) + B*cos(x), верное для любого x, было расписано для пущей надежности в виде:
if (x < pi/2)
{
C = A*sin(x) + B*cos(x);
}
else if (x >= pi/2 && x < pi)
{
C = A*cos(x - pi/2) - B*sin(x - pi/2);
}
- и так 16 раз, потому что на самом деле там не только x, но и y менялся, и как x, так и y могли попадать в каждый из четырёх квадрантов.
Но вот что любопытно: этот чувак уже к 30 годам, написав к тому моменту около тридцати статей (каждую свою статью он публиковал дважды: по-английски с соавторами в журналах американских и королевских обществ и по-китайски с урезанным числом соавторов в Китае), стал ассосиейт-профессором в родном Китае, получил солидную по меркам американской профессуры зарплату, дом в бесплатное пользование и - благодаря своей позиции - хорошую позицию для жены. Потрясающая работоспособность и отсутствие привычных западному ученому моральных принципов легко перевесили пробелы в тригонометрии и программировании.
Larsonsager wrote: ↑31 Jan 2018 01:02
Я видел код, где какое-то несложное выражение типа A*sin(x) + B*cos(x), верное для любого x, было расписано для пущей надежности в виде:
if (x < pi/2)
{
C = A*sin(x) + B*cos(x);
}
else if (x >= pi/2 && x < pi)
{
C = A*cos(x - pi/2) - B*sin(x - pi/2);
}
- и так 16 раз, потому что на самом деле там не только x, но и y менялся, и как x, так и y могли попадать в каждый из четырёх квадрантов.
Без 16 раз, наверное, можно бы было и обойтись, но может вы чуток приукрасили?
А сделать несколько вариантов, чтобы избежать экстремумов или потери точности - то что в этом плохого?
Функция sin(x) определена на всём пространстве вещественных чисел, по идее. К тому же, sin(x) === cos(x - pi/2) для любого х, как и было сказано.
Выглядит странно, конечно. Программист мог бы объяснить тем, что там были изначально разные формулы для разных квадрантов, а потом усохли. Понятно же, что эволюционные наслоения в коде иногда приводят и к более смешным наслоениям.