Daniel
unsafe пускай делает, что хочет, на то он и unsafe
aadz
В общем, я хочу qualifier конст только при описании функции. А иначе как это сделать, чтобы погроммист у себя внутри пакета менял все, что ему нада?
Daniel
вообще-то, нам давно нужны константы сложных типов
Daniel
так что его надо и к переменным, и к параметрам приделывать
Roman
так что его надо и к переменным, и к параметрам приделывать
return values, arguments, variables, struct fields, function receivers как я собственно в пропосалe детально и описал
aadz
почитай пропосал, он не только в функции полезен 🙂
А я пока хочу - только! И не надо делать резких движений. Вот чего я, старый человек, хочу :)
Roman
да объясни уже, где ты проблему видишь :)
Сложный составной объект, где-то в глубине которого есть огромные коллекции иммутабельных объектов.
Daniel
почитай пропосал, он не только в функции полезен 🙂
я советую его в adoc конвертнуть. в adoc есть TOC штатный
Roman
я советую его в adoc конвертнуть. в adoc есть TOC штатный
честно говоря впервые слышу про "adoc" (правда название "адок" многообещающее)
Roman
честно - никогда не возился в unsafe, а что там может быть?
Я могу кастить unsafe.Pointer во что угодно.
Daniel
да, и это меня не беспокоит
Roman
и где проблема?
Каст const в обычный
Roman
http://asciidoc.org/
ascii... слушай, а зачем?
Daniel
Сложный составной объект, где-то в глубине которого есть огромные коллекции иммутабельных объектов.
компилятор способен же вычислить тип для любой херни, которую мы используем, так? значит, и спецификатор иммутабельности способен вычислить
Daniel
ascii... слушай, а зачем?
реальное преймущество - штатная TOC. по-моему, есть еще что-то полезное ва районе таблиц, но я не помню
Roman
Каст const в обычный
cast это конечно хороший вопрос и уже склоняет к вопросу "можно ли защитить суицидального человека от смерти?" я думаю тот кто прям горит желанием отстрелить себе ногу - найнёд возможность это сделать однако, можешь привести пример кода? я в пропосале учту
Roman
реальное преймущество - штатная TOC. по-моему, есть еще что-то полезное ва районе таблиц, но я не помню
если можно будет без "адка" (pun intended) автоматически транспильнуть из markdown без потерь, то посмотрю
Daniel
каст надо бы научить спецификатор дублировать от оригинального объекта.
Roman
Нет, не для любой. У нас уже есть "encoding/json", для чего пригодилось interface{}
вот насчёт func Function(any const interface{}) const interface{} { /*...*/ return any } надо подумать
Daniel
Нет, не для любой. У нас уже есть "encoding/json", для чего пригодилось interface{}
а еще у нас есть easyjson, который как раз без рефлексии
Daniel
это ты о чем?
aadz
const interface{} - вот это как раз то, что называется "когнитивный диссонанс". Уж начали типизировать, я считаю, так и нечего увиливать тогда
Roman
var a [4]uint32 var b = *(*[16]uint8)(unsafe.Pointer(&a))
не, я думаю в таком случае нахер. Unsafe он и в африке unsafe))
Daniel
вот
Roman
но хотя... если стронний код может взять const но таки поломать твои данные... хмммм, не знаю...
Daniel
еще раз - мы не от сознательных действий защищаемся, а от ошибок
Roman
но хотя... если стронний код может взять const но таки поломать твои данные... хмммм, не знаю...
Ровно об этом речь. И я вот не очень могу представить const struct с поинтером на саму себя
aadz
+1
Roman
const interface{} - вот это как раз то, что называется "когнитивный диссонанс". Уж начали типизировать, я считаю, так и нечего увиливать тогда
есть немного.. надо подумать завтра, поэтому любая помощь в написании пропосала привествуется
Daniel
да почитай его уже :)
aadz
блин... OK! завтра почитаю, если проснусь
Daniel
а зачем нужны Immutable Return Values?
Roman
А о чем пропозал-то посути, расскажи?
аааааааа, людиииии, я для вас его пишу!! 😂😂 ну почитайте, ну ё-моё 🙂
aadz
у тебя даже и сцылко на него есть?
Roman
ну там минут 10, хотите я read-time добавлю в заголовок точный?
Daniel
https://github.com/romshark/Go-2-Proposal---Immutability/blob/master/README.md
aadz
OK! thanks. почитаю
Roman
Ещё бы нормальные геттеры/сеттеры в го
aadz
аааааааа, людиииии, я для вас его пишу!! 😂😂 ну почитайте, ну ё-моё 🙂
Хорошо пишешь, между прочим! Да, надо будет почитать
Roman
Ещё бы нормальные геттеры/сеттеры в го
вот как раз с имутабельностью к ним на шажок ближе type Object struct { internal *Object } func (o const *Object) Get() const *Object { return o.internal }
aadz
ну, не был бы, но типа того :)
Roman
И это тут же был бы Python
Собственно, оттуда идея. Фактически, в зависимости от того с какой стороны знака присваивания надо вызвать либо Get, либо Set
aadz
а оно тут правда так уж нада?
Roman
а оно тут правда так уж нада?
Оно хорошо ложится на возврат из ф-ии нескольких значений, например
Roman
foo.one, foo.two = fn()
aadz
Блин, многие и в футбол никогда толком не играли, а обсуждают это, как заведенные... То же и с разработкой языков программирования - по себе чую, я все в этом понимаю, что даже мама не горюй :)
Roman
Вместо a, b = fn() и потом foo.Set(a), foo.Set(b)
Daniel
https://github.com/romshark/Go-2-Proposal---Immutability/pull/3/files
Daniel
слушай, а сеттеры-геттеры - это зачем?
aadz
Чтобы вести бухгалтерию, столько раз спросили, а саолько раз назначили
aadz
И чтобы проверить, кто это спросил, или кто назначил, например
Daniel
Вообще?
в реальном программировании на go :)
Roman
в реальном программировании на go :)
R/o поле структуры, например
aadz
не за чем :)
aadz
просто такая парадигма доступа к данным
Roman
просто такая парадигма доступа к данным
Это может быть и вычисляемое в момент доступа
aadz
да
aadz
Вот по этому Роб Пайк думал, что сишники подтянутся, и был даже удивлен, что Go юзают питонисты
Roman
И вот это n = obj.GetJobState().Current.LastUpdated выглядит ужасно
aadz
да :) Питонисты же и сиишники :)))
aadz
программирование вобще выглядит ужасно
Roman
программирование вобще выглядит ужасно
Нууу... Я за бесплатный сахар.
Roman
слушай, а сеттеры-геттеры - это зачем?
когда мы перед отдачей/чтением чего-либо хотим выполнить кусок логики то... собственно, нужен getter
aadz
бесплатный сахар, думаешь, лучше выглядит? :)
Daniel
А для умных все есть же