Roman
Alexey
тухло не с точки зрения возможностей языка, а с точки зрения адопшена
Daniel
а не похер ли нам на стандартную либу?
snip
Daniel
Daniel
snip
Alexey
а не похер ли нам на стандартную либу?
нет. если все слайсы из всех либ будут мутабельны, то как мне использовать иммутабельные в своей песочнице? конвертировать все? тут даже я забью на иммутабельность
Roman
однако не так чтоб прям 8 часов в день
snip
Ну вот два разработчика уже есть) в принципе можно начинать)
snip
А там люди потянутся
Daniel
Alexey
Alexey
типичный пример апи которое никак не дружит - Unmarshal в json.
Roman
Roman
Alexey
оно не идиоматично. оно вынуждает меня иметь мутабельный объект
Roman
Alexey
Невозможно иметь только иммутабельные структуры и сделать Unmarshall. Сейчас он принимает ссылку на структуру и изменяет ее содержимое. Это не дает вызывающей стороне иметь только иммутабельные структуры. Идиоматичным было бы вернуть новый объект (как передать при этом тип этого объекта остается вопросом)
Alexey
Daniel
иногда - инстанс.
Pavel
Daniel
но мы же не собираемся превращать go в язык с чистыми функциями
Alexey
Daniel
поэтому - линтер будет предупреждать о передаче указателя на const объект кудато, где мы не имеем контроля.
Daniel
и можно будет отключить эти ворнинги или все разом, или специальным комментом
Roman
Daniel
не, это все еще можно делать без генериков
Daniel
просто result := MyType{} был бы внутри Unmarshal, а не снаружи
Daniel
идея с комментом нравится мне больше
Daniel
ну вот да, надо таки написать пропозал
Roman
идея с комментом нравится мне больше
func(ref /*const*/ * /*const*/ Object)
уфф... тогда уж лучше так:
type ObjectConst Object
type ObjectPtrConst *ObjectConst
func(refConst ObjectPtrConst)
Roman
"шо то хня, шо это хня"))))
Daniel
Daniel
не надо такого никому
Daniel
const ref - это вообще непонятно, зачем. это же по любому копия, навнешний мир не повлияет, хоть объизменяйся
Alexey
большой минус с комментами в том, что любая опечатка молчаливо съедается, а не вызывает ошибку компиляции
Daniel
большой плюс - их можно сделать уже сейчас
Roman
не надо такого никому
это мы ещё не выяснили на самом деле: https://github.com/romshark/Go-2-Proposal---Immutability#38-whats-the-difference-between-immutable-references-and-references-to-immutables
Я пишу абзац "Discussion", там упомяну про облегчённый но ограниченный const pointer
но увы, так просто взять и отрезать возможность создания мутабельного слайса немутабельных объектов и наоборот - просто не могу
Daniel
а зачем может быть нужен мутабельный слайс иммутабельных объектов?
Roman
Alexey
Roman
Daniel
а зачем это нам? какой смысл переменую аргумента защищать?
Daniel
Roman
теоретически же могут быть такие ситуации, поэтому я не могу их взять и отрезать только ради упрощения синтаксиса
Daniel
почему не можешь?
Daniel
ну можно ввести параноидальный режим, когда комментом надо отметить как раз мутабельные параметры
Daniel
или даже и параметры, и переменные :)
Daniel
вот будет счастие :)
Roman
Daniel
я, коллеги, хочу, чтобы вы придумали код, для которого это важно
Daniel
например - изобрели ошибку, от которой такая конструкция защитит
Alexey
я, коллеги, хочу, чтобы вы придумали код, для которого это важно
я могу порекомендовать почитать вот это - http://www.lihaoyi.com/post/WhatsFunctionalProgrammingAllAbout.html
И эту часть в частности. http://www.lihaoyi.com/post/WhatsFunctionalProgrammingAllAbout.html#preventing-errors-with-functional-programming
Alexey
там как раз пример. надеюсь не го не смутит сильных духом
Roman
https://github.com/qbeon/webwire-go/blob/master/serveHttp.go
вот например конкретно мой случай: меня все кодоанализаторы уже своим варнингом о том, что функция превышает макс. уровень когнитивной сложности (branching) и размер (LOC)
но когда я пытался её рефакторнуть дабы разбить на более малые функции возникали проблемы и я психовал и просто бросал её оставив как есть.
В таких случаях иметь иммутабельные переменные довольно удобно, потому-что со временем можешь поменять то что менять изначально не стоитло.. а так тебя компилятор/линтер за лапу цап! Ап, низзя X в этом контексте менять и ты начинаешь вспоминать "а зачем я тогда делал её иммутабельной..... ааа!"
Alexey
Roman
Daniel
хорошо
Roman
Daniel
а теперь изобретите, зачем нужна иммутабельная ссылка на мутабельный объект
Alexey
Daniel