Где-то эти ребята не договаривают. Я код не смотрел, но так как компиляция задает только один ход, предыдущее состояние может быть считано только в рантайме. А значит, игра по-определению не compile-time.
L>Тынц.
L>Пойду убъюсь апстену, наверное
Здравствуйте, Vamp, Вы писали:
V>Где-то эти ребята не договаривают. Я код не смотрел, но так как компиляция задает только один ход, предыдущее состояние может быть считано только в рантайме. А значит, игра по-определению не compile-time.
Здравствуйте, landerhigh, Вы писали:
L>Даже не знаю, сюда или сразу в КУ.
Я когда сначала увидел, то подумал что наверное вывод анимаций происходит через ошибки/предупреждения компилятора с управляющими escape последовательностями, где sleep это специально подобранные долгие инстантиниации, а ввод команд это сильное колдунство типа M-x butterfly "Amazing physics going on...". Но посмотрел описание — там читерство чистой воды, никакой магии.
Здравствуйте. Почитал тему, правда не стал углубляться в детали. Но возникла такая простая мысль. Может, она и баян, ткните.
Почему бы не ввести в С++ такое правило: "все, что может быть вычислено во время компиляции, вычисляется во время компиляции, если того требует контекст". То есть любой код, который не зависит от процесса исполнения, считается статически константным, а все его результаты — априори constexpr. Пара примеров:
template<typename T>
void f(T* px)
{
// Если px указывает на константу, функция не будет делать ничего, код внутри if выкинется.if (!std::is_const<T>::value)
*px = 0;
}
std::tuple<int, float, bool> tpl;
// Банально перебираем все члены туплы в циклеfor (size_t n = 0; n < std::tuple_type<decltype(tpl)>::value; ++ n)
std::cout << std::get<n>(tpl) << " ";
Есть какие-то ограничения, не позволяющие компилятору сделать такое? При том что введение такого расширения вроде не должно сломать имеющийся код.
Здравствуйте, Went, Вы писали:
W>Здравствуйте. Почитал тему, правда не стал углубляться в детали. Но возникла такая простая мысль. Может, она и баян, ткните. W>Почему бы не ввести в С++ такое правило: "все, что может быть вычислено во время компиляции, вычисляется во время компиляции, если того требует контекст". То есть любой код, который не зависит от процесса исполнения, считается статически константным, а все его результаты — априори constexpr. Пара примеров: W>
W>template<typename T>
W>void f(T* px)
W>{
W> // Если px указывает на константу, функция не будет делать ничего, код внутри if выкинется.
W> if (!std::is_const<T>::value)
W> *px = 0;
W>}
W>
W>
W>std::tuple<int, float, bool> tpl;
W>// Банально перебираем все члены туплы в цикле
W>for (size_t n = 0; n < std::tuple_type<decltype(tpl)>::value; ++ n)
W> std::cout << std::get<n>(tpl) << " ";
W>
W>Есть какие-то ограничения, не позволяющие компилятору сделать такое? При том что введение такого расширения вроде не должно сломать имеющийся код.
Есть ограничение, называется "Страуструп категорически против". Я спросил у него что он думает о предложенном Александреску static if-е, он на меня чуть не накинулся с кулаками — настолько ему эта идея не нравится. Так что не в этой жизни
Здравствуйте, MT-Wizard, Вы писали: MW>Есть ограничение, называется "Страуструп категорически против". Я спросил у него что он думает о предложенном Александреску static if-е, он на меня чуть не накинулся с кулаками — настолько ему эта идея не нравится. Так что не в этой жизни
Ну, допустим он принципиально против императивного подхода к метапрограммированию. Замечательно. Но тогда почему допустили constexpr и собираются развивать эту идею в С++17? constexpr-функции, значит это норма, а constexpr-операторы — нет? Действительно, непонятно.
Здравствуйте, Дрободан Фрилич, Вы писали:
ДФ>Тащемта я не очень секу в баше, но в конце строки вроде бинарь запускается "./tetris". ДФ>Не похоже на компильтайм.
Насколько я понял, там берется игровой мир на начало хода из констант (из хидера) и в компайл-тайме преобразуется в соответствии с очередным ходом (который задан дефайном). При исполнении этот игровой мир пишется обратно в хидер. Далее запускаешь сборку с другим дефайном и так до победного
W>А представляете какие возможности это несет? Brainfuck времени компиляции!
А главное: возможность не только прострелить ногу, но и снести всю башку на хрен .