Автор Тема: Найдите ошибку, если она есть.  (Прочитано 1673 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2535
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Найдите ошибку, если она есть.
« Ответ #45 : Сентябрь 29, 2016, 07:28:51 pm »
Покажите мне язык где подобная ошибка не может возникнуть в принципе!

Тык эта... я на таком языке на хлеб зарабатываю.
Внутренний язык платформы 1С называется :D
Правда в нем другого говна ушат...

зы Ну а ты тут должен поржать и ответить типа: "да это ж не язык" или "сравнил жопу  пальцем" :D
Тем не менее твою просьбу я выполнил.

kkkk

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Найдите ошибку, если она есть.
« Ответ #46 : Сентябрь 29, 2016, 08:04:07 pm »
Покажите мне язык где подобная ошибка не может возникнуть в принципе!
Я только сейчас обратил внимание на категоричность запроса - не может возникнуть в принципе. Возможно, Алексей захотел пошутить, потому что, в принципе, в любом полном по Тьюрингу языке, такая ошибка может возникнуть.

Рассмотрим доказательство. Как мы уже выяснили,  в С++ такая ошибка возможна, а значит, возможна везде, где можно создать  виртуальную машину и компилятор С++ для неё, который соберёт приведённую программу с ошибкой. Это возможно в любом полном по Тьюрингу языке. Доказано.

Так что все эти ваши обероны, хаскели и даже русские коболы уязвимы.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2535
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Найдите ошибку, если она есть.
« Ответ #47 : Сентябрь 29, 2016, 08:14:39 pm »
Ну нет. Если речь о данной конкретной ошибке, то в 1С такой точно не может быть.
Другое дело, что к валексеевскому "подобная ошибка" приплести можно что угодно.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1949
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Найдите ошибку, если она есть.
« Ответ #48 : Сентябрь 30, 2016, 06:44:26 am »
Geniepro, вот ты все мутабельность упоминаешь (как и все функциональщики).
Ну вообще-то не все функциональщики против мутабельности. Хаскеллеры утверждают, что наиболее полноценное ФП возможно в условиях полной изоляции мутабельности в определённые "гетто", из которых мутабельность не может выйти. В хаскелле это монада IO.
Но есть всякие лисперы, например. Они тоже функциональщики, но мутабельность у них доступна почти как у паскалистов или сишников.

Можно подумать что причиной таких фейлов является одна только мутабельность.

Откуда вообще возник этот миф будто изменение состояния это зло?
В данной теме проблема возникла из-за неконтролируемой мутабельности. В хаскелле конкретно эта проблема не возникла бы, потому что в хаскелле жёсткий контроль над мутабельностью.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1949
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Найдите ошибку, если она есть.
« Ответ #49 : Сентябрь 30, 2016, 06:47:27 am »
Рассмотрим доказательство. Как мы уже выяснили,  в С++ такая ошибка возможна, а значит, возможна везде, где можно создать  виртуальную машину и компилятор С++ для неё, который соберёт приведённую программу с ошибкой. Это возможно в любом полном по Тьюрингу языке. Доказано.
Это останется проблемой с++, а вовсе не того языка, на котором будет написана виртуальная машина для с++.
Странное доказательство.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1949
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Найдите ошибку, если она есть.
« Ответ #50 : Сентябрь 30, 2016, 06:57:26 am »
Покажите мне язык где подобная ошибка не может возникнуть в принципе!
Я только сейчас обратил внимание на категоричность запроса - не может возникнуть в принципе. Возможно, Алексей захотел пошутить, потому что, в принципе, в любом полном по Тьюрингу языке, такая ошибка может возникнуть.

Рассмотрим доказательство. Как мы уже выяснили,  в С++ такая ошибка возможна, а значит, возможна везде, где можно создать  виртуальную машину и компилятор С++ для неё, который соберёт приведённую программу с ошибкой. Это возможно в любом полном по Тьюрингу языке. Доказано.

Так что все эти ваши обероны, хаскели и даже русские коболы уязвимы.
Твой тезис имел бы смысл, сформулируй ты его иначе: эта ошибка возможна в любом языке, для которого можно написать транслятор из с++, полностью сохранающий семантику исходной программы.

Ну так для хаскелла, выходит, такого транслятора нельзя создать, потому что семантика не сохраняется.
Более того, подозреваю, что разные компиляторы с++ могут по разному компилировать эту программу, по разному понимая семантику этой программы. Где-то будет получаться эта ошибка, где-то не будет...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

vlad

  • Hero Member
  • *****
  • Сообщений: 1388
    • Просмотр профиля
Re: Найдите ошибку, если она есть.
« Ответ #51 : Сентябрь 30, 2016, 07:24:11 am »
Перевыделение памяти при изменении std::vector и невалидные ссылки на элементы после этого - еще не самое "интересное" свойство. Вектор еще может в каких-то ситуациях (зависит от реализации) переприсваивать свои элементы (operator =). Вот я помню помучился с отловом такой баги... Оно проявлялось только на одной платформе (реализация STL) и зависило от последовательности изменений вектора.

kkkk

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Найдите ошибку, если она есть.
« Ответ #52 : Сентябрь 30, 2016, 10:59:30 am »
Твой тезис имел бы смысл, сформулируй ты его иначе: эта ошибка возможна в любом языке, для которого можно написать транслятор из с++, полностью сохранающий семантику исходной программы.

Ну так для хаскелла, выходит, такого транслятора нельзя создать, потому что семантика не сохраняется.
Более того, подозреваю, что разные компиляторы с++ могут по разному компилировать эту программу, по разному понимая семантику этой программы. Где-то будет получаться эта ошибка, где-то не будет...
Вы уверждаете, что транслятор С++, написанный на Хаскелле вместе с программой на С++, всунутой в строку в исходнике на Хаскелле, не является программой, написанной на Хаскелле? Если нет, то что не так? Обратите внимание, что речь не о практической достижимости, а о принципиальной возможности. Конечно, такой принципиальной возможности можно достичь гораздо более простым путём, чем создание транслятора C++, но версия с транслятором веселей и наглядней.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1949
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Найдите ошибку, если она есть.
« Ответ #53 : Сентябрь 30, 2016, 01:16:33 pm »
Вы уверждаете, что транслятор С++, написанный на Хаскелле вместе с программой на С++, всунутой в строку в исходнике на Хаскелле, не является программой, написанной на Хаскелле? Если нет, то что не так? Обратите внимание, что речь не о практической достижимости, а о принципиальной возможности. Конечно, такой принципиальной возможности можно достичь гораздо более простым путём, чем создание транслятора C++, но версия с транслятором веселей и наглядней.
Ок, хорошо, если так рассуждать, то, по аналогии с написанной на хаскелле виртуальной машиной с++, в случае выполнения с++-ной программы на реальном голом железе проблема этой программы не в с++, а в электрической принципиальной схеме процессора. Так что ли, получается?
По-моему, такие рассуждения лишены смысла.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

kkkk

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Найдите ошибку, если она есть.
« Ответ #54 : Сентябрь 30, 2016, 01:39:49 pm »
Верно, поскольку компьтер - это функциональный эквивалент машины Тьюринга с ограничением на память, которой, впрочем, достаточно, чтобы этим пренбречь. Раз проблема возможна в полном по Тьюрингу языке, то проблема есть и в аналоге Тьюринг-машины, то есть компьютере. Эти размышления имеют теоретический смысл, а о большем я и не говорил.

Обратите внимание, изначально я тоже напирал на практическую сторону, объяснив, что в Си такой ошибки не возникнет, но Алексей настаивал, что возникнет. Он дополнил Си до семантики С++, достаточной для этой задачи, предложив использовать вектор, написанный на Си. Обычно сишники так не поступают, они стараются использовать более простые средства, но принципиальная-то возможность есть, благо и копать недалеко. Позже мне пришло в голову, что  с такой точки зрения все языки уязвимы, так как любой полный по Тьюрингу язык можно дополнить до семантики С++. В общем случае, конечно, копать придётся глубоко и никто в здравом уме не станет этого делать, но мы, прикинувшись математиками, делаем вид, что нам всё равно.