_>Здравствуйте, Klapaucius, Вы писали:
_>Ну можно тогда увидеть ссылку (скажем в той же Википедии) на определение "поддержки иммутабельности в языке"? ) Ссылку на описание модели акторов я естественно без проблем предоставлю. )
Определение иммутабельных структур данных и в википедии есть:
http://en.wikipedia.org/wiki/Persistent_data_structure я пробежал по диагонали первый абзац, вроде все правильно, также написано зачем для поддержки нужен ГЦ, и какимим свойствами должны обладать версии.
"Поддержка" же понимается в общеупотребимом смысле, а не в вашем, когда она означает то же, что и "отсутствие поддержки".
_>Ну т.е. в том моём примере у меня значит всё же не мутабельная структура? ) Она же обходилась без копирования для создания новых версий... )
Она вообще создание новых версий не поддерживает, что я легко продемонстрировал.
_>Всё правильно, речь про RAII. Так вот мы же говорим о практике, а не о теории, не так ли?
Да мы говорим о практике, когда попробовали писать идеоматический высокоуровневый код без ГЦ, но с выводом регионов (что дает строго больше возможностей, чем стек). Выяснилось, что для написания высокоуровневого кода — даже по меркам не слишком-то высокоуровневого языка вроде ML — без ГЦ не обойтись.
_>И соответственно если через RAII получается реализовать скажем 90% задач работы с памятью (а остальное реализуем скажем через подсчёт ссылок и т.п.),
С помощью RAII можно решить 100% задач, решаемых с помощью RAII, это точно. А вот работа с иммутабельными структурами, например, не получится, если вы памятью с помощью RAII управляете.
_>то уже получим суперэффективный код. Который будет заметно превосходить все замечательные универсальные сборщики мусора.
Да, есть, конечно, такие сценарии, на которых ГЦ покажет результат хуже. Но на типичных сценариях выделения памяти для высокоуровневых языков вообще и работы с иммутабельными данными в частности ГЦ покажет большую производительность. Потому на низкоуровневых языках и пишут совсем не так, как на высокоуровневых.
_>Возможно. Но такова цена настоящего быстродействия.
Да, конечно.
_>Но опять же замечу главное — это ситуация для весьма редкого класса задач. А большую часть обычных задач C++ решает эффективнее всех и без написания какого-то специального кода (стандартные методы типа RAII на стеке).
Нет, наоборот, на C++ пишут только так, как он позволяет. Так как пишут на высокоуровневых языках на C++ не пишут, потому что это (на практике) невозможно. В частности, иммутабельные структуры данных при написании программ на C++ не используют почти никогда. При написании кода на высокоуровневых языках, вроде ФЯ, их используют — наоборот — почти всегда.
_>Если сама задача требует версионности, то безусловно. Вопрос опять же в том насколько это часто встречающаяся на практике задача.
Еще раз. Версионности требует задача "удобство для программиста". На практике встречается всегда.
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll