
Roman
08.09.2018
19:11:32
однако не так чтоб прям 8 часов в день

snip
08.09.2018
19:12:10
Ну вот два разработчика уже есть) в принципе можно начинать)
А там люди потянутся

Google

Daniel
08.09.2018
19:12:52

Alexey
08.09.2018
19:13:38
типичный пример апи которое никак не дружит - Unmarshal в json.

Roman
08.09.2018
19:15:09

Alexey
08.09.2018
19:16:44
оно не идиоматично. оно вынуждает меня иметь мутабельный объект

Roman
08.09.2018
19:17:53

Alexey
08.09.2018
19:20:34
Невозможно иметь только иммутабельные структуры и сделать Unmarshall. Сейчас он принимает ссылку на структуру и изменяет ее содержимое. Это не дает вызывающей стороне иметь только иммутабельные структуры. Идиоматичным было бы вернуть новый объект (как передать при этом тип этого объекта остается вопросом)

Daniel
08.09.2018
19:20:40

Alexey
08.09.2018
19:21:21

Daniel
08.09.2018
19:21:52
иногда - инстанс.

Pavel
08.09.2018
19:21:56

Daniel
08.09.2018
19:22:32
но мы же не собираемся превращать go в язык с чистыми функциями

Google

Alexey
08.09.2018
19:22:37

Daniel
08.09.2018
19:23:56
поэтому - линтер будет предупреждать о передаче указателя на const объект кудато, где мы не имеем контроля.
и можно будет отключить эти ворнинги или все разом, или специальным комментом

Roman
08.09.2018
19:24:40

Daniel
08.09.2018
19:25:05
не, это все еще можно делать без генериков
просто result := MyType{} был бы внутри Unmarshal, а не снаружи

Roman
08.09.2018
19:26:52

Alexey
08.09.2018
19:27:23

Roman
08.09.2018
19:27:40

Daniel
08.09.2018
19:29:09

Roman
08.09.2018
19:29:15

Daniel
08.09.2018
19:29:17
идея с комментом нравится мне больше

Roman
08.09.2018
19:30:01

Daniel
08.09.2018
19:30:19
ну вот да, надо таки написать пропозал

Roman
08.09.2018
19:32:34
идея с комментом нравится мне больше
func(ref /*const*/ * /*const*/ Object)
уфф... тогда уж лучше так:
type ObjectConst Object
type ObjectPtrConst *ObjectConst
func(refConst ObjectPtrConst)
"шо то хня, шо это хня"))))

Daniel
08.09.2018
19:33:59
не надо такого никому
const ref - это вообще непонятно, зачем. это же по любому копия, навнешний мир не повлияет, хоть объизменяйся

Google

Alexey
08.09.2018
19:35:21
большой минус с комментами в том, что любая опечатка молчаливо съедается, а не вызывает ошибку компиляции

Daniel
08.09.2018
19:35:49
большой плюс - их можно сделать уже сейчас

Roman
08.09.2018
19:36:10
не надо такого никому
это мы ещё не выяснили на самом деле: https://github.com/romshark/Go-2-Proposal---Immutability#38-whats-the-difference-between-immutable-references-and-references-to-immutables
Я пишу абзац "Discussion", там упомяну про облегчённый но ограниченный const pointer
но увы, так просто взять и отрезать возможность создания мутабельного слайса немутабельных объектов и наоборот - просто не могу

Daniel
08.09.2018
19:36:44
а зачем может быть нужен мутабельный слайс иммутабельных объектов?

Roman
08.09.2018
19:37:02

Alexey
08.09.2018
19:37:29

Roman
08.09.2018
19:37:31

Daniel
08.09.2018
19:37:33
а зачем это нам? какой смысл переменую аргумента защищать?

Roman
08.09.2018
19:38:03
теоретически же могут быть такие ситуации, поэтому я не могу их взять и отрезать только ради упрощения синтаксиса

Daniel
08.09.2018
19:39:01
почему не можешь?

Roman
08.09.2018
19:39:12

Daniel
08.09.2018
19:39:56
ну можно ввести параноидальный режим, когда комментом надо отметить как раз мутабельные параметры
или даже и параметры, и переменные :)
вот будет счастие :)

Roman
08.09.2018
19:40:31

Alexey
08.09.2018
19:41:43

Daniel
08.09.2018
19:42:50
я, коллеги, хочу, чтобы вы придумали код, для которого это важно
например - изобрели ошибку, от которой такая конструкция защитит

Google

Roman
08.09.2018
19:44:51

Alexey
08.09.2018
19:45:56
там как раз пример. надеюсь не го не смутит сильных духом


Roman
08.09.2018
19:48:22
https://github.com/qbeon/webwire-go/blob/master/serveHttp.go
вот например конкретно мой случай: меня все кодоанализаторы уже своим варнингом о том, что функция превышает макс. уровень когнитивной сложности (branching) и размер (LOC)
но когда я пытался её рефакторнуть дабы разбить на более малые функции возникали проблемы и я психовал и просто бросал её оставив как есть.
В таких случаях иметь иммутабельные переменные довольно удобно, потому-что со временем можешь поменять то что менять изначально не стоитло.. а так тебя компилятор/линтер за лапу цап! Ап, низзя X в этом контексте менять и ты начинаешь вспоминать "а зачем я тогда делал её иммутабельной..... ааа!"

Alexey
08.09.2018
19:51:02

Roman
08.09.2018
19:51:59

Daniel
08.09.2018
19:53:10
хорошо

Roman
08.09.2018
19:53:14

Daniel
08.09.2018
19:53:30
а теперь изобретите, зачем нужна иммутабельная ссылка на мутабельный объект

Admin
ERROR: S client not available

Roman
08.09.2018
19:55:06

Alexey
08.09.2018
19:55:54

Daniel
08.09.2018
19:56:18

Roman
08.09.2018
19:56:23
например какое-нибудь древо там например которое построено на указателях.
Само древо статичное, а узлы древа - нет

Alexey
08.09.2018
19:57:23

Roman
08.09.2018
19:57:37
иначе эту проблему не решить... если тебе нужно вот именно статичное древо на указателях, а Go тебе в ответ: "извини, я так не умею, придётся переосмысливать проблему"... это херово

Alexey
08.09.2018
19:58:16
в языке как-то принято что говорят как жить сверху

Roman
08.09.2018
20:00:01
в языке как-то принято что говорят как жить сверху
есть такое, но оно не так часто ограничивает тебя до "невозможного"
вот пример с древом это будет взрыв нижнего отверстия... придётся выбирать: либо древо не статичное (опасно, мутации), либо ноды иммутабельные (не решает задачу)
и опять мы вынуждены писать небезопасный код дабы решить проблему... зачем тогда пропосал писали - не понятно.

Google

Alexey
08.09.2018
20:01:24

Roman
08.09.2018
20:02:09
I mean.... "who needs 4 billion IP addresses anyway?..."

Alexey
08.09.2018
20:03:06
Опять же позиция авторов языка проста. Дав что-то забрать это нельзя. Можно посмотреть во что превратился с++. Их задача это предотвратить.

Roman
08.09.2018
20:05:09
язык прост тогда - когда в правилах нет исключений. Чем меньше исключений - тем лучше, а "const применяется на указатель и на объект" это спец-правило и это очень нехорошо

Alexey
08.09.2018
20:05:51
Да я только за. И за консты и за тайпклассы. :)

Roman
08.09.2018
20:07:16
а с моим предложением правило без исключений распространяется на все типы.
иммут и мут типы это как Материя и Антиматерия.. они практически одинаковы, за исключением заряда
Object это тип
[]Object это тоже тип
const []Object же это исключение тогда, потому-что на самом деле это const [] const Object ибо не понятно кто иммено имутабелен, слайс? или тип в слайсе?
я лично против таких исключений из правила, даже ради упрощённого синтаксиса, больше неясности вносит чем символов экономит

Alexey
08.09.2018
20:10:40
Я думаю авторы языка как раз не против. Посмотри на map.

Roman
08.09.2018
20:12:11

Alexey
08.09.2018
20:12:31
всмсл?)
всмысле генерики можно, но не всем.

Roman
08.09.2018
20:13:39

Vadim
08.09.2018
20:16:32
Есть в c# такой keyword как readonly. Оставлю это здесь)

Roman
08.09.2018
20:17:08

Vadim
08.09.2018
20:18:42
Просто пища умам.

Roman
08.09.2018
20:20:15
ronly, ro.
про причину использования const мы уже горовили неоднократно

Алексей
08.09.2018
20:25:12
Парни, а что гугл за DI выпустил? Кто-нибудь использовал?

Александр
08.09.2018
20:30:14
мы тут решили как то
что самописный на структуре - the best
?

Алексей
08.09.2018
20:32:35
Мы используем fx, но только не прикольно в runtime ловить null pointer. У di гугловского он упадет во время компиляции, если мне изменяет память..)

Александр
08.09.2018
20:33:04
хм