Stanislav
Roman
Daniel
копирование, кстати, и правда наименьшая из проблем
Daniel
просто потому, что редко применяется именно для защиты от мутаций
Roman
копирование, кстати, и правда наименьшая из проблем
я не спорю что это не самая главная, главная проблема в данном случае это безопасность и читабельность, а потом уже копирование.
но тем не менее когда можно не копировать, то зачем лишний раз копировать и лишние for циклы писать? не так ли?
Vladislav
Stanislav
это лишь утверждение, "мнение" так сказать, только не понятно на чём сиё мнение основано
для этого было добавлено "имхо" 🙂
окей, что такое контракты? по сути это замена тайпсвича и/или проверкой можно ли что-то сделать с этими данными (ну типа T.(type) == int). И, смотря в https://go.googlesource.com/proposal/+/master/design/go2draft-generics-overview.md, я все равно нихрена не понимаю, чем это лучше тайпсвича 🙂 ну может на строчку-другую кода будет меньше, как и читаемости кода, кстати
Daniel
при чем тут блекбокс? мы же не от злоумышленников защиты хотим, а от ошибок
Roman
Vladislav
Daniel
от случайных модификаций данных, которые модифицировать нельзя
Daniel
это не очень частая ошибка, но очень неприятная
Roman
Vladislav
Я бы даже сказал совсем нечастая.
Stanislav
кстати, по примеру, просто вслушайтесь - "неизменяемый объект с динамически изменяемым размером"
Stanislav
брррр)
Roman
Stanislav
Daniel
Roman
Stanislav
Roman
Roman
затем, что это быстрый язык, который позволяет сделать мне то, что мне нужно
да, так говорят JavaScript'еры, у которых нет строгой типизации, а потом переходят на Go, потому-что без неё - хреново
Иммутабельность позволит вам наоборот повысить продуктивность. Вы просто не сможете допустить ошибок передавая reference через три-девять функций получив странные side-effect'ы от коварных багов.
Не поленитесь прочитать пропосал, я его для вас писал, старался 🙂
Vladislav
На самом деле то как вы предлагаете это сделать не поможет. Большая часть либ не начнёт внезапно использовать новый модификатор. А его отсутсвие не говорит о том, что данные обязательно будут изменяться. В общем останется как есть.
Stanislav
Stanislav
🙂
Stanislav
чем мне нравится текущий подход в Go:
1. Хочешь, чтобы изменения увидели все? Передавай ссылку.
2. Хочешь, чтобы изменения НЕ видели все, а были доступны только вызывателю - передавай сам объект.
Пропосал добавляет пункт:
3. Хочешь, чтобы изменения увидели все и не думать об архитектуре? Используй const для слайсов, структур и прочего.
Вы понимаете токсичность этого подхода?
Anonymous
что-то он не изменился за 10 лет в лучшую сторону
Roman
референс через тридевять функций - уже говнокод
чепуху несёте, мисьё.
передать reference в фукцию - не имея гарантии иммутабельности - уже склонено к ошибкам. Даже если вы работаете над кодом один, про команду или open source сообщество я уже вообще молчу.
Stanislav
Vladislav
Daniel
коллеги
Daniel
ну что вы как неродные
Daniel
в с++ есть слово const для параметров, и оно широко используется
Daniel
в первую очередь для уберегания себя же от проблем
Roman
Daniel
там, правда, возврат результата через модификацию входного параметра куда как более частое явление - традиция-с
Pawel
блин, это же всего то на всего синтаксический сахар над вызоывами функций и методов. нету это - и на фиг оно не надо, язык меньше перегружен малозначительной ерундой, увеличивающей mental coast
Daniel
то и у нас можно себе член отстрелить
Stanislav
Daniel
я бы, если бы контролировал язык, ввел бы ключевое слово mutable
Pawel
хочешь неизменяемость - пиши геттеры и сеттеры, не ипи моск, вот и всё
Daniel
чтобы параметры, которые могут мутировать, были видны всегда
Daniel
а остальные бы запретил менять
Pawel
Pawel
Pawel
Pawel
Pawel
Daniel
Roman
Daniel
никак
Roman
aadz
Я чего-то не понял, или все считают, что добавления модификатор const при объявлении переменных или параметров функций как-то поломает совместимость?
Roman
Roman
aadz
вот я и не понял. Чем плохо сказать лишний раз const, если надо?
aadz
Оно же для компилятора, по сути, чтобы он ругался, если что
Roman
Оно же для компилятора, по сути, чтобы он ругался, если что
совершенно верно, компилятор должен думать за нас как можно больше, а мы должны описывать API'шки как можно более точно
это устраняет ошибки, экономит дебагинг неявных ошибок и по очень мало стоит с точки зрения написания кода (это-ж вам не врапперы городить!)
плюс ещё и небольшой прирост производительности
aadz
не, я, наверное, невнимательно что-то не понял тогда
aadz
Я бы модификатор const хотел!
Daniel
а я, повторюсь, хотел бы мотификатор mutable :)
Daniel
потому, что это будет меня сразу настораживать
Roman
aadz
А оно и так разве, не все изменяемое по умолчанию?
Roman
Daniel
я бы хотел других умолчаний
aadz
угу