Сообщение Re: Кому компил-тайма отсыпать? от 27.04.2025 6:49
Изменено 27.04.2025 9:33 rg45
Re: Кому компил-тайма отсыпать?
Здравствуйте, Shmj, Вы писали:
S>Вот вам парсер-калькулятор строк в компил-тайме, все как вы любите:
Продолжаешь демонстрировать непонимание. Путаешь цели и средства.
S>И вопрос — как такое отлаживать по шагам?
Нет, первый вопрос не этот. Первый вопрос — какие задачи решает данный инструмент. И если на этот вопрос имеется ответ, то второй вопрос отправляется отдыхать, как дурацкий. Как отладить и покрыть тестами тот или иной инструмент, всегда можно найти способы. Поэлементно, как же ещё.
А если на первый вопрос ответа нет, тогда тем более второй вопрос отпадает. То есть, ты задал ещё один дурацкий вопрос, так получается.
P.S. Ну и вообще, во всём в этом примере чувствуется дрожащая рука чайника. Накрутили-намудрили.
Во-первых, calc_v тоже следовало бы защитить констрейнтом:
Чтобы при ошибках пользователя компилер тыкал своим толстым пальцем в ошибки пользователя, а не в "плохой" calc_v. Чтоб не в "потроха", как любит говорить Слонёнок, на которого мы не будем показывать пальцами.
Во-вторых, с литералом перемудрили — использовали нестандартное расширение, чем сделали необоснованно жёсткую привязку к компайл-тайму и накрыли медным тазом портабельность. Не нашли другого способа, как задать компайл-тайм строку, блин. Я думаю, можно было тупо std::string заюзать, при нормально заточенных руках и сделать этот парсер применимым как в компайл-, так и в ран-тайме:
https://coliru.stacked-crooked.com/a/2a403be350ebf997
И тогда любой Шмж мог бы проитись по этому коду с дорогим его сердцу интегрированным отладчиком.
В-третьих, расширямость и декомпозиция задач в реализации этого инструмента оставляет желать лучшего. Копипаста там и сям. Взгляни, например, на term и expr — они же совпадают чуть ли не полностью.
Склоняюсь к мысли, что "компайл-тайм" в данном случае был самоцелью. Чтоб показать коллегам по работе, мол "зырьте, чё могу". То есть, какой-то чайник чё-то наговнокодил, а ты нам это предъявляешь, как-будто это наш собственный код.
Тебе кажется, что если тебе попался какой-то код с шаблонами, который тебе трудно понять, то это повод пойти на РСДН и что-то предъявить? Нет, дорогой, профессионализм — это способность делать сложные вещи просто, а не простые сложно.
S>Вот вам парсер-калькулятор строк в компил-тайме, все как вы любите:
Продолжаешь демонстрировать непонимание. Путаешь цели и средства.
S>И вопрос — как такое отлаживать по шагам?
Нет, первый вопрос не этот. Первый вопрос — какие задачи решает данный инструмент. И если на этот вопрос имеется ответ, то второй вопрос отправляется отдыхать, как дурацкий. Как отладить и покрыть тестами тот или иной инструмент, всегда можно найти способы. Поэлементно, как же ещё.
А если на первый вопрос ответа нет, тогда тем более второй вопрос отпадает. То есть, ты задал ещё один дурацкий вопрос, так получается.
P.S. Ну и вообще, во всём в этом примере чувствуется дрожащая рука чайника. Накрутили-намудрили.
Во-первых, calc_v тоже следовало бы защитить констрейнтом:
template<auto Lit>
requires ValidExpr<Lit>
using calc_v = std::integral_constant<unsigned long long, calc<Lit>::value>;Чтобы при ошибках пользователя компилер тыкал своим толстым пальцем в ошибки пользователя, а не в "плохой" calc_v. Чтоб не в "потроха", как любит говорить Слонёнок, на которого мы не будем показывать пальцами.
Во-вторых, с литералом перемудрили — использовали нестандартное расширение, чем сделали необоснованно жёсткую привязку к компайл-тайму и накрыли медным тазом портабельность. Не нашли другого способа, как задать компайл-тайм строку, блин. Я думаю, можно было тупо std::string заюзать, при нормально заточенных руках и сделать этот парсер применимым как в компайл-, так и в ран-тайме:
https://coliru.stacked-crooked.com/a/2a403be350ebf997
static_assert(std::string("Hello World!").size() == 12);
static_assert(std::string("Hello World!")[0] == 'H');
static_assert(std::string("Hello World!")[6] == 'W');
static_assert(std::string("Hello World!")[11] == '!');
// "Моковая" реализация calc,
// демонстрирующая возмость работы с объектами std::string в компайл-тайм.
constexpr auto calc(const std::string& s) {return s.size() * 1000;}
static_assert(calc("80 * 100") == 8000);И тогда любой Шмж мог бы проитись по этому коду с дорогим его сердцу интегрированным отладчиком.
В-третьих, расширямость и декомпозиция задач в реализации этого инструмента оставляет желать лучшего. Копипаста там и сям. Взгляни, например, на term и expr — они же совпадают чуть ли не полностью.
Склоняюсь к мысли, что "компайл-тайм" в данном случае был самоцелью. Чтоб показать коллегам по работе, мол "зырьте, чё могу". То есть, какой-то чайник чё-то наговнокодил, а ты нам это предъявляешь, как-будто это наш собственный код.
Тебе кажется, что если тебе попался какой-то код с шаблонами, который тебе трудно понять, то это повод пойти на РСДН и что-то предъявить? Нет, дорогой, профессионализм — это способность делать сложные вещи просто, а не простые сложно.
Re: Кому компил-тайма отсыпать?
Здравствуйте, Shmj, Вы писали:
S>Вот вам парсер-калькулятор строк в компил-тайме, все как вы любите:
Продолжаешь демонстрировать непонимание. Путаешь цели и средства.
S>И вопрос — как такое отлаживать по шагам?
Нет, первый вопрос не этот. Первый вопрос — какие задачи решает данный инструмент. И если на этот вопрос имеется ответ, то второй вопрос отправляется отдыхать, как дурацкий. Как отладить и покрыть тестами тот или иной инструмент, всегда можно найти способы. Поэлементно, как же ещё.
А если на первый вопрос ответа нет, тогда тем более второй вопрос отпадает. То есть, ты задал ещё один дурацкий вопрос, так получается.
P.S. Ну и вообще, во всём в этом примере чувствуется дрожащая рука чайника. Накрутили-намудрили.
Во-первых, calc_v тоже следовало бы защитить констрейнтом:
Чтобы при ошибках пользователя компилер тыкал своим толстым пальцем в ошибки пользователя, а не в "плохой" calc_v. Чтоб не в "потроха", как любит говорить Слонёнок, на которого мы не будем показывать пальцами.
Во-вторых, с литералом перемудрили — использовали нестандартное расширение, чем сделали необоснованно жёсткую привязку к компайл-тайму и накрыли медным тазом портабельность. Не нашли другого способа, как задать компайл-тайм строку, блин. Я думаю, можно было тупо std::string заюзать, при нормально заточенных руках и сделать этот парсер применимым как в компайл-, так и в ран-тайме:
https://coliru.stacked-crooked.com/a/2a403be350ebf997
И тогда любой Шмж мог бы проитись по этому коду с дорогим его сердцу интегрированным отладчиком.
В-третьих, расширямость и декомпозиция задач в реализации этого инструмента оставляет желать лучшего. Копипаста там и сям. Взгляни, например, на term и expr — они же совпадают чуть ли не полностью. Не хватило мозгов (или желания) отделить специфику и приоритеты операций от общего парсинга.
Склоняюсь к мысли, что "компайл-тайм" в данном случае был самоцелью. Чтоб показать коллегам по работе, мол "зырьте, чё могу". То есть, какой-то чайник чё-то наговнокодил, а ты нам это предъявляешь, как-будто это наш собственный код.
Тебе кажется, что если тебе попался какой-то код с шаблонами, который тебе трудно понять, то это повод пойти на РСДН и что-то предъявить? Нет, дорогой, профессионализм — это способность делать сложные вещи просто, а не простые сложно.
S>Вот вам парсер-калькулятор строк в компил-тайме, все как вы любите:
Продолжаешь демонстрировать непонимание. Путаешь цели и средства.
S>И вопрос — как такое отлаживать по шагам?
Нет, первый вопрос не этот. Первый вопрос — какие задачи решает данный инструмент. И если на этот вопрос имеется ответ, то второй вопрос отправляется отдыхать, как дурацкий. Как отладить и покрыть тестами тот или иной инструмент, всегда можно найти способы. Поэлементно, как же ещё.
А если на первый вопрос ответа нет, тогда тем более второй вопрос отпадает. То есть, ты задал ещё один дурацкий вопрос, так получается.
P.S. Ну и вообще, во всём в этом примере чувствуется дрожащая рука чайника. Накрутили-намудрили.
Во-первых, calc_v тоже следовало бы защитить констрейнтом:
template<auto Lit>
requires ValidExpr<Lit>
using calc_v = std::integral_constant<unsigned long long, calc<Lit>::value>;Чтобы при ошибках пользователя компилер тыкал своим толстым пальцем в ошибки пользователя, а не в "плохой" calc_v. Чтоб не в "потроха", как любит говорить Слонёнок, на которого мы не будем показывать пальцами.
Во-вторых, с литералом перемудрили — использовали нестандартное расширение, чем сделали необоснованно жёсткую привязку к компайл-тайму и накрыли медным тазом портабельность. Не нашли другого способа, как задать компайл-тайм строку, блин. Я думаю, можно было тупо std::string заюзать, при нормально заточенных руках и сделать этот парсер применимым как в компайл-, так и в ран-тайме:
https://coliru.stacked-crooked.com/a/2a403be350ebf997
static_assert(std::string("Hello World!").size() == 12);
static_assert(std::string("Hello World!")[0] == 'H');
static_assert(std::string("Hello World!")[6] == 'W');
static_assert(std::string("Hello World!")[11] == '!');
// "Моковая" реализация calc,
// демонстрирующая возмость работы с объектами std::string в компайл-тайм.
constexpr auto calc(const std::string& s) {return s.size() * 1000;}
static_assert(calc("80 * 100") == 8000);И тогда любой Шмж мог бы проитись по этому коду с дорогим его сердцу интегрированным отладчиком.
В-третьих, расширямость и декомпозиция задач в реализации этого инструмента оставляет желать лучшего. Копипаста там и сям. Взгляни, например, на term и expr — они же совпадают чуть ли не полностью. Не хватило мозгов (или желания) отделить специфику и приоритеты операций от общего парсинга.
Склоняюсь к мысли, что "компайл-тайм" в данном случае был самоцелью. Чтоб показать коллегам по работе, мол "зырьте, чё могу". То есть, какой-то чайник чё-то наговнокодил, а ты нам это предъявляешь, как-будто это наш собственный код.
Тебе кажется, что если тебе попался какой-то код с шаблонами, который тебе трудно понять, то это повод пойти на РСДН и что-то предъявить? Нет, дорогой, профессионализм — это способность делать сложные вещи просто, а не простые сложно.