aadz
я бы хотел других умолчаний
ну, все именяется, все течет, если не сказано обратного. Ты прямо картину мира хочешь изменить
Roman
я бы хотел других умолчаний
ты меня неправильно понял, я бы тоже хотел иммутабельность по умолчанию и какой-нить mut или mutable оператор.. но я исхожу из того что нельзя рушить экосистему поломанной совместимостью и ломать сотни, тысячи библиотек... я лишь выбираю из всех зол - меньшее зло, ради общего блага
aadz
Нельзя вот так взять и сделать все окружающее immutable
Заур
а я, повторюсь, хотел бы мотификатор mutable :)
Эт чё, типо всё - конст, хочешь менять: пиши mutable? O_o
Roman
ну, все именяется, все течет, если не сказано обратного. Ты прямо картину мира хочешь изменить
предполагаю что, если начинать с начала, тогда "Go 2.0" лучше переименовать в "Stay 1.0" 🤣
Daniel
видишь, иммутабельность по умолчанию может быть полезна 1. оптимизатору 2. параллелизатору (пока нет такого, но можно бы и сделать) 3. сборщику мусора (эту мысль я до конца не додумал)
Roman
Эт чё, типо всё - конст, хочешь менять: пиши mutable? O_o
да, это гораздо безопаснее с точки зрения оформления API
Roman
помню как я в начале аллергично реагировал на "Capital letter for public fields and functions"
aadz
Ну, разделение - это вобще катастрофа! Уже столько хороших вещей (библиотек) на Go 1 написано... И что тогда делать?
Daniel
с питоном беда в том, что пришлось у пользователя держать обе версии, и две версии либ, и все вот это вот
Daniel
у нас не так же
Daniel
да почему же
Заур
Это уже новый язык получается
Daniel
так да
Заур
Легче так и сделать
aadz
ну, и одним работать на Go1, а другим - на 2. И вместе им не сойтись (c)
Daniel
смотрите
Daniel
go уже тостаточно сделал для того, чтобы можно было написать его конвертер в любой язык
Daniel
и уж точно можно сделать go2 так, чтобы go в него конвертился автоматически
Daniel
:)
Daniel
вообще - да
aadz
и уж точно можно сделать go2 так, чтобы go в него конвертился автоматически
но еще недостаточно, чтобы аккуратно конвертировать mutable в его противоположность
Daniel
это да
Daniel
вызовам с go придется mutable прописывать
Daniel
или конвертить, пробовать компилять, репортить проблему
Roman
видишь, иммутабельность по умолчанию может быть полезна 1. оптимизатору 2. параллелизатору (пока нет такого, но можно бы и сделать) 3. сборщику мусора (эту мысль я до конца не додумал)
поможешь написать более технические аспекты относительно опцимизации засчёт имут. по умолч. ? Я думаю не сильно шарю в этом буду очень благодарен
Daniel
завтра попробую
Daniel
если опять прокрастинация нападет :)
aadz
Лучше, наверное, все же модификатор const. Пусть разработчик определяет, что это менять не стоит, если действительно не надо
Roman
если опять прокрастинация нападет :)
ничего, я буду пинговать))
aadz
ничего, я буду пинговать))
Не надо его пинговать. Возьми бота, который он же и писал, и им и пингуй :)
aadz
если опять прокрастинация нападет :)
Если я ничего не путаю, это ведь у тебя был доклад об насчет пинга коллег?
Roman
Лучше, наверное, все же модификатор const. Пусть разработчик определяет, что это менять не стоит, если действительно не надо
@onokonem А вообще можно даже реализовать пока-что const для иммут в Go => 1.12, а потом уже в Go 2 сделать её по умолчанию я думаю так даже лучше будет! считай старый код не сломаем, но иммутабельность добавим. а в го 2 сделаем ещё лучше - да и конвертировать код Go => 1.12 в таком случае будет гораздо легче ибо и там и там иммут. имеется
aadz
А! То есть все, что было до 1.12 - до свидания?
Заур
Эээ ребят это походит на восстание и революцию
Заур
Почему нельзя просто const добавить и нормас? Я тоже с плюсов, там вроде конста хватало
aadz
И вся эта игра с большими и маленькими буквами... Нет.. что-то не так с глобальным immutable, чую я
aadz
Кажется, фильме Матрица один паацан так поступил. Эльфы в костюмах просто даже застыли на месте и не знают что делать...
Daniel
Почему нельзя просто const добавить и нормас? Я тоже с плюсов, там вроде конста хватало
можно. но примерно 99% вызовов должны будут иметь этот const приписаным к каждому из параметров.
aadz
Даниэль, а если просто посчитать, какое солов чаще придется писать const, или mutable?
Roman
А чем вам вариант с модификатором блока кода mut/const не нравится?
aadz
да. 99%, и люди с этим живут уже хрен знает сколько
Daniel
у нас нет манеры возвращать значения модификацией входных параметров. исключая анмаршалеры - так никто не делает на постоянной основе. а, еще ридеры. так что const придется писать существенно чаще
Roman
Все что внутри блока имеет mut или const префикс
aadz
а, понял
Daniel
А чем вам вариант с модификатором блока кода mut/const не нравится?
мне бы хотелось иметь барьер именно на моменте передачи параметров. это кажется мне очевидным
Roman
Идея в маркере, который тупо префиксует все внутри блока как mut или const
aadz
Только на момент передачи параметров - вряд ли получится
Roman
Если не сказано явно иное перед переменной
Daniel
только, может быть, и не надо
Roman
Это компромисс между "хочу все immut" и текущим вариантом
aadz
В общем, изменения глобальная, чтобы все было immutable, надо только подумать, стоит ли это других глобльных проблем, и каких именно
Roman
Чтобы программист мог выбирать стратегию в рамках пакета, файла или блока кода
Daniel
другое дело, что const делается одним флажком в составе struct, slice, map а mutable надо будет тащить и проверять на каждом вызове
Daniel
так что, наверное, все же const
Daniel
и линтер, который предупреждает, что вы const не проставили :)
Roman
мне бы хотелось иметь барьер именно на моменте передачи параметров. это кажется мне очевидным
так что насчёт внедрить immutability уже в Go 1.x с const а в Go 2.x внедрить mut по умолчанию на всё? плюс написать транспилятор который писать будет легче если в Go 1.x уже есть поддержка имутабельности?
Daniel
вот так, наверное, это имеет хоть какие-то шансы
Daniel
смотри
Daniel
у нас все передается по значению
Daniel
и у всего есть тип
aadz
не все по значению