@gogolang

Страница 1470 из 1630
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
можно пример, я из говноязыков пришел, не очень понимаю до конца
https://github.com/romshark/Go-2-Proposal---Immutability#111-ambiguous-code-and-dangerous-bugs

Евгений
27.09.2018
22:37:33
думаю оно не сбилдится
Это псевдо код, конечно.

Заряд сел подвёл.

anatolii
27.09.2018
22:38:17
https://github.com/romshark/Go-2-Proposal---Immutability#111-ambiguous-code-and-dangerous-bugs
так слайс это ссылка, это в доке прописано

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

Roman
27.09.2018
22:39:20
так слайс это ссылка, это в доке прописано
дело в том что pointer aliasing это mutable shared state, а это опасно

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

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
тоесть вы хотите чтоб копировало, но указываете это недостатком?
мы хотим иммутаьбельность гарантируемую компилятором ? если попробуешь мутировать немутабельный тип - компилятор быстро надаёт по пальцам молоточком

имутебельные типы это copy по сути
нет, совершенно нет, воспринимай их как "read only" типы. Их можно читать, но мутировать нельзя

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

Roman
27.09.2018
22:45:32
копируйте, это делают все имутабельные библиотеки в языках где нет имутабельности, не идеал, но работает хорошо и ожидаемо
ну вы конечно копируйте, но я буду бороться за иммутабельность в системе типов пока я использую Go

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

Roman
27.09.2018
22:46:43
ну я ж не против имутабельности, но не указываю это как недостаток языка просто
это серьёзный недостаток языка. Аргументации предостаточно

Kirill
27.09.2018
22:47:36
я наоборот иногда пишу на сях

потому что там проще получить всё неиммутабельное

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
это не серьезный недостаток, если есть простая возможность его избежать (самый первый гугл https://github.com/lukechampine/freeze)
значит скорее всего вы ещё не дебажили проблемы, которые породил mutable shared state и всё ещё впереди ?

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
либо вы разрешаете передавать копию, которая не отражается дальше, либо передаете ссылку
const []string это не копия, это всё тот-же слайс, но на нём запрещено выполнять мутирующие операции

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

anatolii
27.09.2018
23:05:19
const []string это не копия, это всё тот-же слайс, но на нём запрещено выполнять мутирующие операции
это копия ведь, можешь делать с ней что угодно, вне ничего не поменяется

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

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
вы не правильно скопировали кусочек кода из фразы человека выше func TakeSlice(slc []string) тут прийдет в функцию копия
дак неважно скопируется ли сам struct слайса или нет, важно то что массив, на который этот слайс / эти слайсы будут указывать - не будет изменён TakeSlice'ом

я тут скажу свое фи, мне кажется если вы хотите "защитить обьект" ну сделайте сеттеры и геттеры
читайте пропосал, там подобные ситуации описаны. Поможет только копирование, но у него свои проблемы

Google
anatolii
27.09.2018
23:09:31
Изменить то его можно

Блин, вы меня путаете, это банально копия структуры

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

Блин, вы меня путаете, это банально копия структуры
pointer aliasing, в нём вся проблема, понимаете?

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

Roman
27.09.2018
23:11:51
нет, я не знаю что это
https://en.wikipedia.org/wiki/Pointer_aliasing

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. копию данных (бла бла умная фраза, все равно будет копия в итоге) Человек хочет третий, чтоб передавалось по ссылке, но нельзя было изменить, ибо данные нельзя будет изменить

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
ну я веду к тому что обычно третий пункт вашен при криворуких людях которые тупо меняют данные что им дают. И этот вариант можно решить именно вторым пунктом

Александр
27.09.2018
23:19:34
@ruelephant
не понял проблему если честно

Страница 1470 из 1630