Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Geniepro

Страницы: 1 2 3 [4] 5 6 ... 131
46
Общий раздел / Re: Найдите ошибку, если она есть.
« : Сентябрь 30, 2016, 06:57:26 am »
Покажите мне язык где подобная ошибка не может возникнуть в принципе!
Я только сейчас обратил внимание на категоричность запроса - не может возникнуть в принципе. Возможно, Алексей захотел пошутить, потому что, в принципе, в любом полном по Тьюрингу языке, такая ошибка может возникнуть.

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

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

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

47
Общий раздел / Re: Найдите ошибку, если она есть.
« : Сентябрь 30, 2016, 06:47:27 am »
Рассмотрим доказательство. Как мы уже выяснили,  в С++ такая ошибка возможна, а значит, возможна везде, где можно создать  виртуальную машину и компилятор С++ для неё, который соберёт приведённую программу с ошибкой. Это возможно в любом полном по Тьюрингу языке. Доказано.
Это останется проблемой с++, а вовсе не того языка, на котором будет написана виртуальная машина для с++.
Странное доказательство.

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

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

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

49
Общий раздел / Re: Найдите ошибку, если она есть.
« : Сентябрь 29, 2016, 05:21:59 am »
Покажите мне язык где подобная ошибка не может возникнуть в принципе!
Ну хаскель же! даже если там работать с мутабельным вектором, просто так сделать аналогtr[v].mp[x] = go();не вышло бы из-за дизайна языка, пришлось бы делать аналогint tmp = go();
tr[v].mp[x] = tmp;
Но выглядел бы такой код на хаскелле страшно, это точно )))

50
Общий раздел / Re: Найдите ошибку, если она есть.
« : Сентябрь 29, 2016, 05:10:39 am »
2. затем go() добавила новый элемент в tr, что потребовало выделения нового массива и освобожения старого
Жесть. Это ошибка где-то на уровне генов в с++.

Ну в общем то ничего нового.
Вообще-то аналогичная проблема была бы возможна и в обероне, если бы кто-то удосужился в нём реализовать класс вектор. Впрочем, думаю, можно и обероновским массивом такое же провернуть.

51
Общий раздел / Re: Найдите ошибку, если она есть.
« : Сентябрь 28, 2016, 11:47:23 am »
Не понимаю, как это могло привести к падению программы?
1. сначала была выполнена  tr[v].mp[x] , которая ссылалась на массив, использованный в vector в текущем состоянии.
2. затем go() добавила новый элемент в tr, что потребовало выделения нового массива и освобожения старого
3.  наконец было выполнено присваивание tr[v].mp[x] = go() , которое произвело запись в освобождённую память
А почему компилятор этого не отследил и не переназначил область памяти при присваивании на новую? о_О баг какой-то, концептуальный...

52
Общий раздел / Re: Найдите ошибку, если она есть.
« : Сентябрь 28, 2016, 11:45:45 am »
Короче говно этот ваш с++, что и требовалось доказать.
Пользуйтесь иммутабельными данными!!! Хаскеллем, короче!!!!!!

53
Общий раздел / Re: Найдите ошибку, если она есть.
« : Сентябрь 28, 2016, 11:30:06 am »
tr[v].mp[x] = go();Очевидная проблема в этом месте, так как go() изменяет tr.
Если изменить на int tmp = go();
tr[v].mp[x] = tmp;
То всё нормально. Да, проблема в плохом понимании работы универсальных решений. И в наличии состояния, конечно  :D
Бинго! :-)
Не понимаю, как это могло привести к падению программы? Ну подумаешь, добавили к вектору новый элемент в конец вместе с изменением одного из имеющихся в нём элементов, на что это влияет?
Походу это просто какая-то ошибка в компиляторе.

54
Погодите-ка, тут проценты надо считать не по времени, а по скорости расчётов, что ли? Потому-то непонятно, почему 220% времени лучше, чем 50%, ведь это в 4.4 раза медленнее должно быть...

55
А если убрать вывод в с++? У меня при перенаправлении вывода в /dev/null время сокращалось раза в 3
Проверил с GCC -- разница всего в 11% (делал вывод в файл, а не в /dev/null).
На хаскелле практически не было разницы между выводом в файл и без вывода -- разница в пределах погрешности измерения.

c++ с выводом в файл: 1.6 сек
c++ без вывода в файл: 1.4 сек
хаскель с выводом в файл: 1.7 сек
хаскель без вывода в файл: 1.7 сек

56
Попробовал в трёх браузерах выполнить оберон-жс вариант этого теста https://gist.github.com/valexey/e559764622f1b35ce9da799dbcc9e286
У файрфокса действительно какой-то аномально быстрый интерпретатор яваскрипта, скорость лучше чем у GCC и хаскеля:

Firefox 45.3.0 (Tor 6.0.4): 1.4 сек
Iron 52.0.2750.0 (на базе Chrome): 6.3 сек
Opera 12.18: 31 сек

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

58
Общий раздел / Re: Найдите ошибку, если она есть.
« : Сентябрь 15, 2016, 07:50:50 pm »
Короче, непонятно, чего она падает на выходе из третьего захода в процедуру add, вроде предпосылок для этого нет...

Нишмагла :-)
А нинада отлаживать какую-то хрень, у которой даже ТЗ нету )))

59
gcc на данном варианте тормоз, лучше щупать clang++.
Действительно, clang даёт результат 1.35
Выходит, что твой кросскомпилер Оберон->C более эффективен, чем компилятор Блекбокса? Тебе надо срочно перевести Блекбокс на твой компилятор ))) Всё русское оберон-сообщество тебе огромное спасибо скажет. Правда, не заплатит ни копейки )))

60
Общий раздел / Re: Найдите ошибку, если она есть.
« : Сентябрь 15, 2016, 06:24:13 pm »
Короче, непонятно, чего она падает на выходе из третьего захода в процедуру add, вроде предпосылок для этого нет...

Страницы: 1 2 3 [4] 5 6 ... 131