@gogolang

Страница 1356 из 1630
Daniel
04.09.2018
14:29:04
встроено

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

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

Jentry
04.09.2018
14:37:20
Помогите. Как понять, вот создаю я хандлеры, или делаю через Mux допустим, затем http.ListenAndServe и оно однопоточное? Всмысле, при запросе нескольких клиентов где мне надо разваливаться на отдельные потоки (или не надо и оно уже встроено?)
Го настолько прост, что на многие вопросы ты можешь ответить сам и прояснить, здесь видно, как принимается соединение и обработка в горутине) https://golang.org/src/net/http/server.go#L2805

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

Daniel
04.09.2018
14:47:28
Алексей
04.09.2018
14:47:55
запрета на мутацию вложенных по указателю данных? ты о чём?
ну вот структура, в ней указатель на другую структуру, метод не меняет саму исходную структуру, но меняет структуру по указателю (сам указатель не меняется при этом)

Jentry
04.09.2018
14:47:55
https://github.com/gorilla/websocket/issues/52
Интересно, спасибо, я уже хотел было PR повесить)

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
так в стандартной библиотеке сделано - там тоже не таймаут, а дедлайн. позволяет не хранить внутри "время последней операции"
Тогда неконсистентно, здесь уже таймаут, например, в клиенте https://github.com/gorilla/websocket/blob/master/client.go#L71

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

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

Roman
04.09.2018
14:52:57
ну вот структура, в ней указатель на другую структуру, метод не меняет саму исходную структуру, но меняет структуру по указателю (сам указатель не меняется при этом)
type Object struct { parent *Object } func (o *Object) SetParent(newParent *Object) { return o.parent = newParent // Mutation } func (o const *Object) ReadOnlyMethod() { // You can’t call a function with a non-const receiver // on an immutable receiver „o“ o.parent.SetParent(&Object{}) // Compile-time error }

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
Странное на самом деле. Сразу не увидел. У тебя что нету разделения на const *Object и *const Object? Непорядок
да вот я и не знаю, стоит ли так усложнять или не стоит. потому-что тогда у нас 3 вариации: 1. "мутабельный указатель на иммутабельный объект" 2. "иммутабельный указатель на мутабельный объект" 3. "иммутабельный указатель на иммутабельный объект" может стоит облегчить сиё дело в Go и если указатель иммутабельный то и объект тоже?

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

Начинаешь задумываться а надо ли оно))

Google
Roman
04.09.2018
15:12:40
Начинаешь задумываться а надо ли оно))
надо, иначе бы нам не нужны были типы, компиляторы и т.д. ибо нафиг безопасность!

Daniel
04.09.2018
15:13:00
так

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
2 и 3 - это одно и тоже, иначе мы с ума сойдем
А тут никак, либо только один const *Object, либо добавлять модификатор указателя и появляется 4 комбинации вместо 2-х. Это же комбинаторная логика.

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
мне кажется, что моификатор const должен относиться к созданию сущности (инициализации и передаче параметров), а не к хранению
const защищает от мутаций. Если мы знаем что UniqueObject.Identifier не должен меняться в течении всей жизни объекта - мы хотим предовтратить возможные скрытые мутации этого поля в контексте пакета и приватных методов без const полей херово будет, это я вам точно говорю

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

Никита
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
Daniel
04.09.2018
15:27:28
да вот нет

с++ - очень плохой пример для подражания

Никита
04.09.2018
15:28:02
Ну да, во время компиляции проверяется
А с мутабельными переменными также? То есть для всех переменных проверяется можно ли их менять на этапе компиляции?

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
Что-то в последнее время тут стало много споров и меньше полезной инфы к сожалению

Никита
04.09.2018
15:30:31
Оставим Конст, окей

Зачем все эти конст в параметрах функций?

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

Daniel
04.09.2018
15:31:47
Зачем все эти конст в параметрах функций?
чтобы без const оно продолжало работать как работает сейчас

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

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