@gogolang

Страница 1380 из 1630
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.

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

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

Daniel
08.09.2018
19:20:40
оно не идиоматично. оно вынуждает меня иметь мутабельный объект
конечно, вынуждает. если бы можно было передать тип как тип, а не вместе с указателем - не вынуждало бы. в некоторых местах в java сделано так - передаем объект, но он не модифицируется метод конструирует новые объекты того же типа

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
иногда - инстанс.
я уверен где-то такая конечно есть

но мы же не собираемся превращать go в язык с чистыми функциями
от нас слава богу в этом плане мало что зависит

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

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

Daniel
08.09.2018
19:25:05
не, это все еще можно делать без генериков

просто result := MyType{} был бы внутри Unmarshal, а не снаружи

Roman
08.09.2018
19:26:52
и можно будет отключить эти ворнинги или все разом, или специальным комментом
проблема только то что он будет реально вербозным. Нужно будет reference типы обарачивать в alias типы, уфф..

Alexey
08.09.2018
19:27:23
поэтому - линтер будет предупреждать о передаче указателя на const объект кудато, где мы не имеем контроля.
Так тоже не сработает. Можно почитать про опыт котлин и их построения интеропа с джавой. Они отказались от явных проверок на границе в пользу оптимистичного сценария. Можно почитать тут - https://kotlinlang.org/docs/reference/java-interop.html#null-safety-and-platform-types

Roman
08.09.2018
19:27:40
просто result := MyType{} был бы внутри Unmarshal, а не снаружи
ну это уже тогда на тему runtime cost (extra memory + CPU time) vs compile-time cost (of generics)

Daniel
08.09.2018
19:29:09
проблема только то что он будет реально вербозным. Нужно будет reference типы обарачивать в alias типы, уфф..
ну вот похоже идея с типами так себе. это же и правда надо будет на каждый свой тип создать ему алиас константный. получится масса синтаксического мусора

Roman
08.09.2018
19:29:15
просто result := MyType{} был бы внутри Unmarshal, а не снаружи
сейчас таким-же образом устроен assert.IsType(t, ExpectedType{}, actual) в testify, но в тестах конечно пофиг лишний инстанс зафигарить

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
const ref - это вообще непонятно, зачем. это же по любому копия, навнешний мир не повлияет, хоть объизменяйся
constRef не позволит саму переменную аргумента в данном контексте мутировать

Roman
08.09.2018
19:37:31
а зачем может быть нужен мутабельный слайс иммутабельных объектов?
ну блин, я не могу решать за всех, это эгоистично))

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

ну блин, я не могу решать за всех, это эгоистично))
реши за себя. это вполне go way, как мы знаем

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
а зачем это нам? какой смысл переменую аргумента защищать?
такой же какой и в иммутабельных переменных по сути. Аргумент тоже переменная из scope'а функции

Alexey
08.09.2018
19:41:43
а зачем это нам? какой смысл переменую аргумента защищать?
тут смысл не том, что ты что-то сломаешь, а в том, что если ты ее меняешь, то скорее всего, ты ожидаешь чего-то другого

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

например - изобрели ошибку, от которой такая конструкция защитит

Google
Roman
08.09.2018
19:44:51
например - изобрели ошибку, от которой такая конструкция защитит
ну относительная большая функция, в которой мы случайно мутируем копию аргумента и получаем неправильный state в конце. Это-ж проблема принципиальная. Мы же хотим "при декларации чего-либо - знай, мутабельно ли оно али нет"

Alexey
08.09.2018
19:45:56
я, коллеги, хочу, чтобы вы придумали код, для которого это важно
я могу порекомендовать почитать вот это - http://www.lihaoyi.com/post/WhatsFunctionalProgrammingAllAbout.html И эту часть в частности. http://www.lihaoyi.com/post/WhatsFunctionalProgrammingAllAbout.html#preventing-errors-with-functional-programming

там как раз пример. надеюсь не го не смутит сильных духом

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
Daniel
08.09.2018
19:53:10
хорошо

Roman
08.09.2018
19:53:14
func(ref /*const*/ * /*const*/ Object) уфф... тогда уж лучше так: type ObjectConst Object type ObjectPtrConst *ObjectConst func(refConst ObjectPtrConst)
поэтому собственно и иммутабельные переменные и иммутабельные аргументы

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

Admin
ERROR: S client not available

Roman
08.09.2018
19:55:06
а теперь изобретите, зачем нужна иммутабельная ссылка на мутабельный объект
я это буквально сегодня добавил в документ: When we need a pointer to be immutable to prevent it from pointing to anything other than a certain object, which should be mutable though т.е. сама по себе сущность может меняться внутри, а вот другой объект заместо неё вставить уже нельзя

Alexey
08.09.2018
19:55:54
а теперь изобретите, зачем нужна иммутабельная ссылка на мутабельный объект
чтобы описать глобальный мутабельный стейт? Например, кеш

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
Roman
08.09.2018
20:02:09
побуду адвокатом дьявола. я думаю тебе скажут что это 1% случаем а ради него мы не будем усложнять язык.
я боюсь что такое мышление убьёт Go во многих сферах и он так и останется супер-нишевым, хотя очень даже зря

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.

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
Есть в c# такой keyword как readonly. Оставлю это здесь)
в Go его не будет, никогда либо const, либо mut с иммутабельностью по умолчанию в Go2 через лет эдак 10

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
хм

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