
Daniel
04.09.2018
14:29:04
встроено

Aleksandr
04.09.2018
14:29:10
автоматически

Dk
04.09.2018
14:29:20
Кайф. Спасибо вам.

Google

Roman
04.09.2018
14:36:43
в таком случае интерфейс определяет, что опредлённые методы не должны мутировать объект имплементирующий этот интефейс, хорошо ли это?
должен ли интерфейс иметь право запрещать мутации на определённых методах?

Jentry
04.09.2018
14:37:20

Алексей
04.09.2018
14:40:03
скорее нет, чем да

Roman
04.09.2018
14:41:09
вот надо подумать
я пока что не вижу проблем. Но может есть таки кейсы в которых это бы было недопустипо? В таких ситуациях без помощи зала… вернее community не обойтись

Алексей
04.09.2018
14:41:39
так как всё равно нет запрета на мутацию вложенных по указателю данных, как я понял
то есть имеет ли смысл выносить такие тонкие вопросы в язык?

Jentry
04.09.2018
14:43:15
Обнаружил в горилле вебсокетах такое - вместо timeout автор оперирует понятием deadline и ждет time.Now()+таймаут, потом вычитает из него time.Now(), кто знает, зачем это было сделано? https://github.com/gorilla/websocket/blob/master/conn.go#L393

Roman
04.09.2018
14:46:43

Aleksandr
04.09.2018
14:46:49

Daniel
04.09.2018
14:47:28

Алексей
04.09.2018
14:47:55

Jentry
04.09.2018
14:47:55

Google

Roman
04.09.2018
14:48:27
https://github.com/golang/go/issues/27443

Daniel
04.09.2018
14:48:39

Jentry
04.09.2018
14:50:12

Daniel
04.09.2018
14:50:31

Jentry
04.09.2018
14:51:11
Все в го так говорят

Daniel
04.09.2018
14:51:40
смысла нет со мной это обсуждать, тем не менее

Roman
04.09.2018
14:52:57

Алексей
04.09.2018
14:54:39

Alexander
04.09.2018
15:02:13
Я конечно понимаю, что писать const *const Object неприятно, но что поделать, если в го всё мутабельно по дефолту

Алексей
04.09.2018
15:05:51
мммм прям крестами запахло

Alexander
04.09.2018
15:07:16
мммм прям крестами запахло
ну так ведь это реально разные вещи и значат они совершенно разное. const *Object значит что указатель нельзя поменять, а *const Object значит, что память на которую указывает указатель менять нельзя.

Алексей
04.09.2018
15:07:36
ну да, но всё же

Alexander
04.09.2018
15:08:35
Ещё нужно добавить оператор &const

Никита
04.09.2018
15:09:17
Жесть

Alexander
04.09.2018
15:09:53
Жесть
Ну иначе иммутабельность в го будет кривая
И придётся снова городить костыли, чтобы срезать углы

Roman
04.09.2018
15:11:43

Никита
04.09.2018
15:12:05
Честно говоря от таких извращенских конструкций чуть воротит
Начинаешь задумываться а надо ли оно))

Google

Roman
04.09.2018
15:12:40

Daniel
04.09.2018
15:13:00
так

Roman
04.09.2018
15:13:14

Daniel
04.09.2018
15:13:21
2 и 3 - это одно и тоже, иначе мы с ума сойдем
я тут понял, что в пропозал я сегодня не напишу, поэтому кратко отчитаюсь здесь

Roman
04.09.2018
15:13:58

Daniel
04.09.2018
15:15:07
вариантов два:
1. мы взяли нечто, и присвоили его иммутабельной переменной. оно стало иммутабельным
2. мы зяли нечто, сделали его иммутабельным и присвоили переменной

Alexander
04.09.2018
15:15:21

Daniel
04.09.2018
15:15:22
по эффектам это должно быть ± одно и то же
но!
парадигма разная
и мне кажется, что парадигма 2 лучше подходит для go - у нас переменная появляется позже сущности

Daniel
04.09.2018
15:16:53
именно поэтому я думаю, что отдельные константные поля в структурах не нужны
и поэтому я думаю, что константный возврат не нужен

Roman
04.09.2018
15:17:37

Alexander
04.09.2018
15:17:46
инкрементирую последний 2 коммента Подольского
а вот константные указатели нужны

Roman
04.09.2018
15:18:12
вот собственно почему нужны иммутабельные поля
https://github.com/romshark/Go-2-Proposal---Immutability/pull/3#discussion_r214764431

Daniel
04.09.2018
15:18:14
я почитал бегло, и понял, что я не спорить хочу, а обсудить :)
так вот

Google

Александр
04.09.2018
15:18:59
/start@daysandbox_bot

Daniel
04.09.2018
15:19:38
мне кажется, что моификатор const должен относиться к созданию сущности (инициализации и передаче параметров), а не к хранению
хочешь константное поле - инициализируй его константным выражением, и оно будет константное
хочешь константный возврат - возвращай константное выражение

Roman
04.09.2018
15:21:36

Daniel
04.09.2018
15:22:00
ну вот это вопрос открытый

Roman
04.09.2018
15:23:35
ну вот это вопрос открытый
я к тому, что если представить себе относительно большой пакет, над которым работает community, то незаметная мутация приватных полей - может прокотить в каком-нибудь pull request'е, потому-что reviewer'ы всего-лишь люди и могут ошибиться
однако если поле const, тогда никто, никогда, нигде не сможет его перезаписать случайно, в этом смысл, полная безопасность

Admin
ERROR: S client not available

Alexander
04.09.2018
15:24:12

Никита
04.09.2018
15:24:20
Вообще, как имутабельность реализована в расте?

Roman
04.09.2018
15:25:34
Ну это такая себе проблема.
такая или секая - неважно, это проблема. Так раз мы уже заговорили об иммутабельности, почему тогда не реализовать иммутабельные поля? Я лично вижу только плюсы к безопасности.
Вас никто не заставляет делать их иммутабельными, но если таки вы хотите написать безопасный код - у вас есть на то возможность.

Alexander
04.09.2018
15:25:34

Никита
04.09.2018
15:26:02

Alexander
04.09.2018
15:27:01

Daniel
04.09.2018
15:27:28
да вот нет
с++ - очень плохой пример для подражания

Никита
04.09.2018
15:28:02

Roman
04.09.2018
15:28:20

Alexander
04.09.2018
15:28:28

Google

Никита
04.09.2018
15:28:28
Так а что мешает сделать также в Го?
Зачем все эти ужасы с конст везде?

Roman
04.09.2018
15:28:53

Никита
04.09.2018
15:29:13
Так зачем все по умолчанию делать имутабельным
Оставляем как есть

Alexander
04.09.2018
15:29:20

Roman
04.09.2018
15:29:30

Dorian
04.09.2018
15:29:41

Никита
04.09.2018
15:29:47
Как в Расте для мутабельных

Alexander
04.09.2018
15:30:02

Dorian
04.09.2018
15:30:08
Что-то в последнее время тут стало много споров и меньше полезной инфы к сожалению

Alexander
04.09.2018
15:30:19

Никита
04.09.2018
15:30:31
Оставим Конст, окей
Зачем все эти конст в параметрах функций?

Dorian
04.09.2018
15:30:58
Чтобы никто не изменил то, что вы передали

Daniel
04.09.2018
15:31:47

Dorian
04.09.2018
15:31:56
Хотя я видимо из контекста вырвал, простите