Здравствуйте, T4r4sB, Вы писали:
TB>Здравствуйте, rg45, Вы писали:
R>>Ну, я могу только порассуждать на эту тему. По расходу памяти — это ведь смотря как писать код. Размеры блоков не лимитированы и число временных объектов, создаваемых в подвыражениях, могло бы зашкаливать за разумные рамки.
TB>На практике я на некотором другом языке (тоже с RAII) писал, там по сути любое выражение вида
TB>TB>f(g())
TB>
TB>означало что-то типа
TB>TB>tmp=g();
TB>f(tmp);
TB>
TB>И этот tmp жил до конца текущего блока, и что-то стек с кучей от этого не переполнялись.
Ну о куче тут вообще нет разговора, а вот стек ) это до поры до времени. Вот внедрится эта хрень куда-то в рекурсивный разбор,
foo(v = g())
{
foo(g());
// и тут вычисления, что исключит оптимизацию в хвостовую рекурсию и вуаля, стек будет выеден мгновенно
}
R>>А с другой стороны, наверное, не смогли придумать сценариев, когда бы это создавало какие-то непреодолимые трудности.
TB>Даже на чистом асме нет непреодолимых трудностей.
есть, в реальных проектах вполне.
TB>В данном примере трудность была создана — удалось получить ссылку на объект, у которого уже вызвался деструктор.
TB>Да, она преодолима. Но это трудность, на решение которой будут тратиться лишние человекочасы.
Лишние человекочасы это не снос проекта, когда логика изменений для простой задачи размазывается по всему 10*n-летнему коду. или при появлении новых технологий проект безнадежно устаревает, и сделать с ним ничего нельзя.
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.