Daniel
то есть - при создании нового указателя, структуры, слайса и мапы (все, вроде?) надо рядом с типом еще взвести флаг immutable, и дальше его при передаче копировать. а компилятор пусть проверяет его
aadz
слайсы
Daniel
слайсы тоже по значению, указатели и счетчики копируются
Roman
слайсы
слайс передаётся копией, но вот сам array под ним конечно не копируется
aadz
да, по ссылке передается
Roman
да, по ссылке передается
это не по ссылке, это копия структуры слайса
Daniel
в котрой есть указатель на массив
aadz
OK! пусть так
Daniel
чего именно ты не понимаешь?
Daniel
как компилятор типы проверяет при присваивании - понимаешь?
Roman
Потому что в твоём объяснении смешаны runtime & compile time
Daniel
нет, не смешаны вообще
Daniel
в рантайме мне никакой контроль мутабельности не нужен (пока?)
aadz
Блин, все же, может быть, не надо так глобально. Просто позволить пограммистам писать в определении функции модификатор const при параметре? Это - уже на тупых пользователей этой функции повлияет, и, наверное, этого достаточно было бы
aadz
пока существуют конпутеры и пограммисты - лучше не будет никак :)
Daniel
как обычно
aadz
И почему, кстати, все думают, что по умолчанию, каждый хочет отстрелить себе ногу и часами сидеть дебажить?
aadz
Хотя, часто видишь, что хотят, конечно :)
Roman
как обычно
Я про вот этот флаг
Daniel
никто не хочет, но за последние 5 лет я проделывал это дважды
Roman
И структура с поинтером на саму себя
Daniel
я проблемы не понимаю
aadz
никто не хочет, но за последние 5 лет я проделывал это дважды
И что в этом такого? Ты видел кого-то, кто этого не проделывал?
Daniel
я бы хотел больше никогда не
aadz
не получится. Проблема слишком сложная, чтобы решить ее так просто
aadz
и не в иммутабельности проблема, в общем-то даже :)
Daniel
в с++ решили, и у нас можно
Daniel
есть несколько паттернов, которые реально помогают
Roman
Мне кажется, что иммутабельность ничего не даст
Roman
[] const MyStruct
Я про внутреннее устройство
Daniel
Мне кажется, что иммутабельность ничего не даст
в каком смысле ничего? класс редких, но очень неприятных ошибок она предотвращает полностью map-reduce, когда он у нас появится, можно будет раскидывать по горутинам оптимизатор сможет не вычислять одно и тоже по 100 раз
aadz
нет const []int
Roman
нет const []int
Это иммутабельный слайс, а я про слайс из иммутабельных объектов
Roman
И почему, кстати, все думают, что по умолчанию, каждый хочет отстрелить себе ногу и часами сидеть дебажить?
дело не в том что все хотят. Дело в том что это всё-равно часто происходят, потому-что наличие даже гениальной головы не гарантирует отсутствие ошибок. Поэтому у нас собственно и есть компиляторы, умные алгоритмы облегчающие нам жизнь дабы слишком голову стейтом не забивать. самое страшное в том, что некоторые господа, привыкают городить врапер-структуры только для того чтоб защитить слайс от мутабельности и считают это нормальным отказываясь от const []byte
Daniel
Это иммутабельный слайс, а я про слайс из иммутабельных объектов
слайс иммутабельных структур ничем не отличается от слайса мутабельных
Roman
способность приспосабливаться к любым условиям это особенное качество человека... особенно хорошее и особенно плохое... погрузи человека в нищиту и он привыкнет к ней и будет напрочь отрицать богатства. Погрузи человека в "плохой язык" (я с осторожностью, не буду конкретизироватрь) и он привыкнет на нём костылить
Daniel
да
aadz
Ну, надо сначала хотя бы начать с модификатора const при описании функции. А?
Roman
Окей, слайс из иммутабельных слайсов
Roman
Я про внутреннее устройство
устройство чего конкретно?
Roman
то есть - при создании нового указателя, структуры, слайса и мапы (все, вроде?) надо рядом с типом еще взвести флаг immutable, и дальше его при передаче копировать. а компилятор пусть проверяет его
Daniel
Окей, слайс из иммутабельных слайсов
да объясни уже, где ты проблему видишь :)
aadz
Кстати, а чего это вы тут так разорались-то? lexx всем сказал идти работать! А вы чего?
Roman
Речь об этом флаге :)
Roman
слайс иммутабельных структур ничем не отличается от слайса мутабельных
ооо нет, ещё как отличается!! вот смотри: https://github.com/romshark/Go-2-Proposal---Immutability#31-are-the-items-within-immutable-slicesmaps-also-immutable
aadz
Иногда сон - это тоже работа!
Roman
map [ const *Object ] const [] [] Object мапа имутабельных слайсов мутабельных слайсов мутабельных структур типа Object, с имутабельным ключём типа указателя на структуру Object 😂
aadz
не надо так огород городить! Иначе это не проверить будет на этапе компиляции
aadz
Надо, если сказано const, то шаг влево, шаг вправо - до свидания по поводу всей переменной
Roman
[] const [] int
Угу. Мапа иммутабельных слайсов содержащая иммутабельные структуры
Roman
не надо так огород городить! Иначе это не проверить будет на этапе компиляции
что значит не проверить?)) компилятор всё смогёт, но такой код писать конечно не надо, это эстремум, утрированный пример
aadz
как-то я думаю, что не сможет, но думать и рассказывать лень :( Ночь на дворе
Roman
как-то я думаю, что не сможет, но думать и рассказывать лень :( Ночь на дворе
всё он сможет))) если я могу, то почему он не сможет?)
aadz
угу
Roman
map[string] const [] const Object
Да, а проверка на этапе компиляции. Меня смутила идея флага у обьекта
aadz
не флага, а модификатора
Roman
Да, а проверка на этапе компиляции. Меня смутила идея флага у обьекта
это решаемая алгоритмическая задача, это не нерешемая проблема 🙂
aadz
хоть это - одно и то же
Roman
не флага, а модификатора
qualifier, если быть точным
aadz
угу
Roman
"спецификатором" если верить гугл переводчику
Daniel
или так, да
Roman
по крайней мере в C++ const это qualifier
Roman
Ммм, а как это все будет жить с unsafe?
Daniel
параллельно
Roman
Ммм, а как это все будет жить с unsafe?
честно - никогда не возился в unsafe, а что там может быть?