> 1 <
Автор | Сообщение |
mew2
13 сообщений |
#7708 2016-03-10 07:00 GMT+3 часа(ов) |
И все таки, в чем практическая польза immutable объектов и в чем их достоинство перед mutable? Честно говоря, я не очень въезжаю. Насколько я понял, в ракет принято отдавать предпочтение immutable, но с чем это связано, ведь с mutable все работает намнооого быстрее. Много где пишут, что это вопрос религии, но меня такой ответ мало устраивает, честно говоря.
|
|
misha![]()
1275 сообщений |
#7711 2016-03-12 00:02 GMT+3 часа(ов) |
>Насколько я понял, в ракет принято отдавать предпочтение immutable, но с чем это связано, ведь с mutable все работает намнооого быстрее.
Кто вам такое сказал? Или вы сами тестировали? ![]() >Много где пишут, что это вопрос религии, но меня такой ответ мало устраивает, честно говоря. А вы вместо того, чтобы школьников слушать, лучше бы писали многопоточные приложения. И тогда этот вопрос отпал бы сам, без чьей-либо помощи. |
|
mew2
13 сообщений |
#7712 2016-03-13 00:40 GMT+3 часа(ов) |
Цитата Да, я делал простенькие тесты на производительность с разными типами структур, которые идут из коробки, в частности тогда меня больше всего интересовал set. Мне очень нравится как выглядят программы с immutable объектами, как лаконично выглядят рекурсии вместо циклов и я бы с радостью везде пихал именно их, если бы не проблемы с производительностью, которые они создают, особенно с большими структурами данных. То есть, может эти проблемы и не заметны при использовании программы на глаз, но мне все равно не дает покоя тот факт, что производительность приносится в жертву красоте кода. Хотя, я допускаю, что чего-то не понимаю и делаю не правильно, поэтому мои тесты и были максимально примитивными по сути своей, чтобы свести к минимуму зависимость результатов от моей некомпетенции в вопросе. (чуть позже приведу примеры тестов, которые я делал) Цитата Честно говоря, я щас и не вспомню когда в последний раз я писал программу, отличную от хеловорлда, которая была бы не многопоточной. Мне вообще нравятся многопоточные программы, да и проблем с многопоточностью у меня вроде не возникало нигде. А в ракет так вообще я был удивлен насколько просто управляются потоки. Плюс, в каком-то гайде рассказывалось про дебаггер который эти самые потоки визуализирует, короче очень круто. Но, если вернуться к теме, многопоточность это лишь частный случай, где в силу обстоятельств выгоднее использовать immutable, но если вынести реализацию многопоточности за скобки и рассмотреть вот общие случаи, где вам нужно бегать по спискам, что-то искать, что-то менять и так далее, короче вот эти все примитивные вещи, которые вы вынуждены делать постоянно, разве вы отдали бы в них предпочтение неизменяемым объектам? |
|
misha![]()
1275 сообщений |
#7714 2016-03-13 01:55 GMT+3 часа(ов) |
>Мне очень нравится как выглядят программы с immutable объектами, как лаконично выглядят рекурсии вместо циклов и я бы с радостью везде пихал именно их, если бы не проблемы с производительностью, которые они создают, особенно с большими структурами данных.
Неизменяемые объекты существуют как раз для удобства программирования, особенно в функциональном стиле. Так что вы вправе сами решать, что вам лучше использовать. >рассмотреть вот общие случаи, где вам нужно бегать по спискам, что-то искать, что-то менять и так далее, короче вот эти все примитивные вещи, которые вы вынуждены делать постоянно, разве вы отдали бы в них предпочтение неизменяемым объектам? А для этого существуют mutable cons, хотя я зачастую отдаю предпочтение связанным структурам. |
|
mew2
13 сообщений |
#7721 2016-03-15 02:52 GMT+3 часа(ов) |
Ну вот, например, первое что в голову пришло потестить. Там где большие числа - это все иммутабле.
|
|
misha![]()
1275 сообщений |
#7723 2016-03-15 17:16 GMT+3 часа(ов) |
А смысл этого тестирования? Зачем пытаться доказать очевидные вещи? Потестить можно операции над примитивными типами данных, например, cons vs mcons (car vs mcar, cdr vs mcdr). Ведь скорость операций над сложными типами данных будет зависеть от реализации алгоритмов этих операций. Так что в будущих версиях рэкета "картина" может несколько поменяться, поэтому над этим не стоит заморачиваться.
|
|
> 1 <