
anatolii
27.09.2018
22:36:47
я не пойму проблемы )

Евгений
27.09.2018
22:36:54
Функция короче.

anatolii
27.09.2018
22:37:04
думаю оно не сбилдится

Евгений
27.09.2018
22:37:08

Google

Roman
27.09.2018
22:37:12

Евгений
27.09.2018
22:37:33
Заряд сел подвёл.

anatolii
27.09.2018
22:38:17
в доке на это указывается в первую очередь и тока потом уже функционал

Roman
27.09.2018
22:39:20

anatolii
27.09.2018
22:40:51
есть функция copy она не помогает?

Roman
27.09.2018
22:41:14

anatolii
27.09.2018
22:42:19
ну он же не по ссылке копирует

Roman
27.09.2018
22:42:23
1. копирование это зачастую дорого
2. в слайсе у тебя могут быть указатели, скопировав слайс у тебя по прежнему останется pointer aliasing на хранимое в нём

anatolii
27.09.2018
22:42:23
не понимаю
тоесть вы хотите чтоб копировало, но указываете это недостатком?
странно

Google

anatolii
27.09.2018
22:43:37
имутебельные типы это copy по сути
и это будет долго
второе не понял

Roman
27.09.2018
22:44:01

anatolii
27.09.2018
22:44:53
копируйте, это делают все имутабельные библиотеки в языках где нет имутабельности, не идеал, но работает хорошо и ожидаемо

Roman
27.09.2018
22:45:32

anatolii
27.09.2018
22:46:07
ну я ж не против имутабельности, но не указываю это как недостаток языка просто

Roman
27.09.2018
22:46:43

Kirill
27.09.2018
22:47:36
я наоборот иногда пишу на сях
потому что там проще получить всё неиммутабельное

Roman
27.09.2018
22:48:27

Kirill
27.09.2018
22:48:46

anatolii
27.09.2018
22:48:48
это не серьезный недостаток, если есть простая возможность его избежать (самый первый гугл https://github.com/lukechampine/freeze)

Kirill
27.09.2018
22:49:01
прям вообще нигде

anatolii
27.09.2018
22:49:06
такого "сахара" думаю полно

Roman
27.09.2018
22:49:36

Kirill
27.09.2018
22:49:58
я вот дебажил

anatolii
27.09.2018
22:49:58
я просто копирую данные где надо и по ссылке где надо

Google

Kirill
27.09.2018
22:50:09
но мне часто нужно самому контролировать, что у меня и как

anatolii
27.09.2018
22:50:21
так контролируйте

Roman
27.09.2018
22:50:22
я в JavaScript и C++ этого наелся вдоволь, так что аж тошнит))

Kirill
27.09.2018
22:50:42
в js не то))

anatolii
27.09.2018
22:51:06
в жс нельзя копию отдать функции

Kirill
27.09.2018
22:51:42

anatolii
27.09.2018
22:51:57
копию массива в функцию

Kirill
27.09.2018
22:52:03
можно
только костылём
но можно же

anatolii
27.09.2018
22:52:13
как и в го, сделав копию

Kirill
27.09.2018
22:52:24

anatolii
27.09.2018
22:52:30
будет та же имутабельность
получил данные, сделал копию, работаешь с ними, гарантия того что ни у кого ничего не поламается
Я постоянно слышу фразы: вот была бы имутабельность, у меня бы было меньше проблем. Проблема в логике а не в имутабельности, и такой код тесты ловят почти 100%
имутабельность не поможет от ошибок, лишь уменьшит их


Roman
27.09.2018
22:56:37
я просто копирую данные где надо и по ссылке где надо
жаль что вы не понимаете, что копирование зачастую это последствие отсутствия иммутабельности.
Видите ли, копирование не решает одной проблемы совсем: ambiguous code (двусмысленный код)
func TakeSlice(slc []string)
сегодня в документации написано что slc не мутируется и вы естественно не копируете передаваемый slc, потому-что зачем писать лишний код и лишний раз тратить CPU и память, верно?...
а завтра, одним комитом позже, он уже вдруг мутируется ? а ведь ваш код продолжает компилироваться и работать, но вот результаты выдаёт уже неверные, и вы скорее всего заметите это когда будет слишком поздно и большая часть данных уже коррупированы, здорово, не правда ли?
Никто не гарантирует, все только обещают, здорово жить в мире обещаний без гарантий? ?


anatolii
27.09.2018
22:59:21
Я прекрасно понимаю что копирование добавляет погрешность в структуру. Но я так же понимаю что если у вас данные (якобы которые ридонли) меняются, это значит что код работает не правильно, и тут имутабельность поможет конечно, но внимательность тоже не стоит уменьшать, ибо в другом месте вам не нужна будет имутабельная структура, а подход будет тот же
это не панацея

Google

anatolii
27.09.2018
23:00:14
лишь небольшая помошь в сугубо некоторых местах


Roman
27.09.2018
23:01:37
жаль что вы не понимаете, что копирование зачастую это последствие отсутствия иммутабельности.
Видите ли, копирование не решает одной проблемы совсем: ambiguous code (двусмысленный код)
func TakeSlice(slc []string)
сегодня в документации написано что slc не мутируется и вы естественно не копируете передаваемый slc, потому-что зачем писать лишний код и лишний раз тратить CPU и память, верно?...
а завтра, одним комитом позже, он уже вдруг мутируется ? а ведь ваш код продолжает компилироваться и работать, но вот результаты выдаёт уже неверные, и вы скорее всего заметите это когда будет слишком поздно и большая часть данных уже коррупированы, здорово, не правда ли?
Никто не гарантирует, все только обещают, здорово жить в мире обещаний без гарантий? ?
а теперь решение:
func TakeSlice(slc const []string)
этот код не двусмыслен, он однозначен: slc не будет мутирован, это гарантирует компилятор.
даже если автор этой функции вдруг ошибётся - у него не скомпилируется.
а если он таки намеренно пожелает мутировать slc то ему придётся изменить интерфейс и поломать совместимость:
func TakeSlice(slc []string)
а это значит что не скомпилируется теперь уже у вас - и вы обратите на это внимание, потому-что передаёте немутабельный слайс туда, где ожидается мутабельный. Вы сразу заметите ошибку и недопустите коварный баг до продакшна.


anatolii
27.09.2018
23:03:10
ага, то же самое произойдет и с &*
либо вы разрешаете передавать копию, которая не отражается дальше, либо передаете ссылку
любое изменение приводит к ошибке

Roman
27.09.2018
23:04:43

Александр
27.09.2018
23:05:16
2 часа ночи....

anatolii
27.09.2018
23:05:19

Александр
27.09.2018
23:05:22
что тут за холивар?

Roman
27.09.2018
23:05:49

Admin
ERROR: S client not available

Roman
27.09.2018
23:06:07
это immutable reference

anatolii
27.09.2018
23:06:59
это НЕ копия, товарищь ?
вы не правильно скопировали кусочек кода из фразы человека выше
func TakeSlice(slc []string)
тут прийдет в функцию копия

Roman
27.09.2018
23:07:10
что тут за холивар?
холивар это когда без аргументов и в деструктивном тоне, а это обычный спор ?

Александр
27.09.2018
23:07:13
я тут скажу свое фи, мне кажется если вы хотите "защитить обьект" ну сделайте сеттеры и геттеры
и саму структуру с маленькой буквы

anatolii
27.09.2018
23:08:22

Roman
27.09.2018
23:08:27

anatolii
27.09.2018
23:09:26

Google

anatolii
27.09.2018
23:09:31
Изменить то его можно
Блин, вы меня путаете, это банально копия структуры

Roman
27.09.2018
23:10:58
тоесть по сути это имутабельный тип? не понимат
да, это именно имутабельный тип. В данном пропосале каждый тип имеет своего иммутабельного собрата, как материя и антиматерия... есть слайс, а есть иммутабельный слайс, есть * Object, а ещё есть * const Object

anatolii
27.09.2018
23:11:31
нет, я не знаю что это

Roman
27.09.2018
23:11:51

anatolii
27.09.2018
23:12:18
я точно знаю что то что говорил чевалек выше, имутабельность, вызвает ошибку при изменении данных, тут же все ок

Roman
27.09.2018
23:12:50
слайсы в Go это практически указатели обёрнутые в структуру. Слайсы подвержены проблеме aliasing'а

anatolii
27.09.2018
23:13:51
да, слайсы это указатели
это понятно
вопрос в другом
вы не читали все о чем мы говорили выше?

Roman
27.09.2018
23:14:46

anatolii
27.09.2018
23:16:17
е мае, есть два варианта передачи данных в функцию
1. по ссылке
2. копию данных (бла бла умная фраза, все равно будет копия в итоге)
Человек хочет третий, чтоб передавалось по ссылке, но нельзя было изменить, ибо данные нельзя будет изменить

Roman
27.09.2018
23:16:48

anatolii
27.09.2018
23:17:02
тоесть я таки читал?

Roman
27.09.2018
23:17:24
возможно)
третий пункт верно уточнён

Александр
27.09.2018
23:18:11
народ народ, а что за кейс то такой
"передать по ссылке и не давать поменять"
вы где это используете?

anatolii
27.09.2018
23:18:33
ну я веду к тому что обычно третий пункт вашен при криворуких людях которые тупо меняют данные что им дают. И этот вариант можно решить именно вторым пунктом

Roman
27.09.2018
23:18:39
жаль что вы не понимаете, что копирование зачастую это последствие отсутствия иммутабельности.
Видите ли, копирование не решает одной проблемы совсем: ambiguous code (двусмысленный код)
func TakeSlice(slc []string)
сегодня в документации написано что slc не мутируется и вы естественно не копируете передаваемый slc, потому-что зачем писать лишний код и лишний раз тратить CPU и память, верно?...
а завтра, одним комитом позже, он уже вдруг мутируется ? а ведь ваш код продолжает компилироваться и работать, но вот результаты выдаёт уже неверные, и вы скорее всего заметите это когда будет слишком поздно и большая часть данных уже коррупированы, здорово, не правда ли?
Никто не гарантирует, все только обещают, здорово жить в мире обещаний без гарантий? ?
@ruelephant

Александр
27.09.2018
23:19:34