Stanislav
нет, сегодня про immutability 🙂 https://github.com/romshark/Go-2-Proposal---Immutability
вместе с контрактами приведет гошечку в состояние адового трындеца имхо 🙂
Roman
вместе с контрактами приведет гошечку в состояние адового трындеца имхо 🙂
это лишь утверждение, "мнение" так сказать, только не понятно на чём сиё мнение основано
Vladislav
а разве там не написано какую проблему он решает, или вы не читали? 🙂 признавайтесь))
Ну вы выдумали какие-то копирования. Решили что они проблема и начали с ними бороться. С самодокументацией в принципе ок. Но это недостаточно. Ну а безопасность. Иммутабельные данные все равно можно против вас применить.
Daniel
копирование, кстати, и правда наименьшая из проблем
Daniel
просто потому, что редко применяется именно для защиты от мутаций
Roman
копирование, кстати, и правда наименьшая из проблем
я не спорю что это не самая главная, главная проблема в данном случае это безопасность и читабельность, а потом уже копирование. но тем не менее когда можно не копировать, то зачем лишний раз копировать и лишние for циклы писать? не так ли?
Vladislav
"выдумали копирование"? вы серьёзно?))) озвучьте тогда "как их можно против вас применить" 🙂
Ну если это правда блэк бокс либа в которую вы не смотрите, то она может и базу слить и ещё кучу всего.
Stanislav
это лишь утверждение, "мнение" так сказать, только не понятно на чём сиё мнение основано
для этого было добавлено "имхо" 🙂 окей, что такое контракты? по сути это замена тайпсвича и/или проверкой можно ли что-то сделать с этими данными (ну типа T.(type) == int). И, смотря в https://go.googlesource.com/proposal/+/master/design/go2draft-generics-overview.md, я все равно нихрена не понимаю, чем это лучше тайпсвича 🙂 ну может на строчку-другую кода будет меньше, как и читаемости кода, кстати
Daniel
при чем тут блекбокс? мы же не от злоумышленников защиты хотим, а от ошибок
Stanislav
при чем тут блекбокс? мы же не от злоумышленников защиты хотим, а от ошибок
для этого голова должна на плечах быть, а не костыли в язык вставлять, имхо 🙂
Daniel
от случайных модификаций данных, которые модифицировать нельзя
Daniel
это не очень частая ошибка, но очень неприятная
Vladislav
Я бы даже сказал совсем нечастая.
Stanislav
кстати, по примеру, просто вслушайтесь - "неизменяемый объект с динамически изменяемым размером"
Stanislav
брррр)
Roman
для этого голова должна на плечах быть, а не костыли в язык вставлять, имхо 🙂
вы предлагаете нагрузить голову программиста нежели алгоритм компилятора? тогда зачем вы используете Go? вон куча других языков с таким-же менталитетом
Roman
для этого голова должна на плечах быть, а не костыли в язык вставлять, имхо 🙂
и иммутабельность это вам не костыль! почитайте про неё
Daniel
разгружая голову программиста - падает его зарплата 😄
падает, разгружая? коллега, русский язык должен быть русским
Stanislav
падает, разгружая? коллега, русский язык должен быть русским
ну как водится - меньше работы и дум, начальство думает, что не работаем 🙂
Roman
затем, что это быстрый язык, который позволяет сделать мне то, что мне нужно
да, так говорят JavaScript'еры, у которых нет строгой типизации, а потом переходят на Go, потому-что без неё - хреново Иммутабельность позволит вам наоборот повысить продуктивность. Вы просто не сможете допустить ошибок передавая reference через три-девять функций получив странные side-effect'ы от коварных багов. Не поленитесь прочитать пропосал, я его для вас писал, старался 🙂
Vladislav
На самом деле то как вы предлагаете это сделать не поможет. Большая часть либ не начнёт внезапно использовать новый модификатор. А его отсутсвие не говорит о том, что данные обязательно будут изменяться. В общем останется как есть.
Stanislav
🙂
Pavel
ну как водится - меньше работы и дум, начальство думает, что не работаем 🙂
да гошники 300к/сек и так зажрались, до рыночного уровня пхп надо опускать им зп)))
Roman
На самом деле то как вы предлагаете это сделать не поможет. Большая часть либ не начнёт внезапно использовать новый модификатор. А его отсутсвие не говорит о том, что данные обязательно будут изменяться. В общем останется как есть.
тогда можно вообще ничего с языком не делать! 🙂 ведь большая часть библиотек не начнёт внезапно использовать новую фичу но если вы такого мнения, то у вас довольно не много единомышленников и язык скорее всего вопреки вашим желаниям - будет меняться в лучшую сторону, а вендоры библиотек будут постепенно добавлять поддержку новых возможностей, как это происходит в ЛЮБОМ языке и любой экосистеме
Stanislav
чем мне нравится текущий подход в Go: 1. Хочешь, чтобы изменения увидели все? Передавай ссылку. 2. Хочешь, чтобы изменения НЕ видели все, а были доступны только вызывателю - передавай сам объект. Пропосал добавляет пункт: 3. Хочешь, чтобы изменения увидели все и не думать об архитектуре? Используй const для слайсов, структур и прочего. Вы понимаете токсичность этого подхода?
Anonymous
что-то он не изменился за 10 лет в лучшую сторону
Roman
референс через тридевять функций - уже говнокод
чепуху несёте, мисьё. передать reference в фукцию - не имея гарантии иммутабельности - уже склонено к ошибкам. Даже если вы работаете над кодом один, про команду или open source сообщество я уже вообще молчу.
Daniel
коллеги
Daniel
ну что вы как неродные
Daniel
в с++ есть слово const для параметров, и оно широко используется
Daniel
в первую очередь для уберегания себя же от проблем
Roman
Если у вас архитектура построена именно таким образом - это грустно. Как минимум мне :)
вы совершенно не поняли смысл immutability, мисьё) читайте, читайте 🙂
Daniel
там, правда, возврат результата через модификацию входного параметра куда как более частое явление - традиция-с
Pawel
блин, это же всего то на всего синтаксический сахар над вызоывами функций и методов. нету это - и на фиг оно не надо, язык меньше перегружен малозначительной ерундой, увеличивающей mental coast
Daniel
то и у нас можно себе член отстрелить
Daniel
я бы, если бы контролировал язык, ввел бы ключевое слово mutable
Pawel
хочешь неизменяемость - пиши геттеры и сеттеры, не ипи моск, вот и всё
Roman
в с++ есть слово const для параметров, и оно широко используется
++ я собственно с C++ и пришёл, там концепция иммутабельности реализована довольно хорошо. и, нет, я не собираюсь превращать Go в C++, это нонсенс. Ибо описал, что на самом деле это наоборот повышает продуктивность а не делает язык сложнее
Daniel
чтобы параметры, которые могут мутировать, были видны всегда
Daniel
а остальные бы запретил менять
Pawel
const_cast используется ещё шире.
а ещё шире - reinterpret_cast
Daniel
const_cast используется ещё шире.
кстати, не видал. а я за последний год килотонны c++ ghjxtk
Roman
блин, это же всего то на всего синтаксический сахар над вызоывами функций и методов. нету это - и на фиг оно не надо, язык меньше перегружен малозначительной ерундой, увеличивающей mental coast
mental cost увеличивается, когда вы не понимаете, почему у вас где-то мутирует слайс. а когда у вас есть гарантии и компилятор не позволит никому творить безобразие а в документации обещать что "я этого не делаю" - работать в Open Source комьюнити и команде, да даже одному над большим проектом - становится легче
Pawel
Roman
чет тут не понятного? есть слайс - можно мутировать. Есть объект с доступом по индексу, внутри которог ослайс - нельзя мутировать. Нахер ещё что-то изобретать? чтобы запутать джунов и усложнить коде ревью?
знаете почему вы городите wrapper объекты, ради того чтоб слайс защищать? потому-что нет immutability 🙃 вы можете добиться гарантии иммутабельности только враппером. Короче думайте сами, коллега, как вам удобнее, но я с вами не согласен, я скорее единомышленников ищу 🙂
Daniel
никак
Roman
никак
да вот и я о чём
aadz
Я чего-то не понял, или все считают, что добавления модификатор const при объявлении переменных или параметров функций как-то поломает совместимость?
Roman
aadz
вот я и не понял. Чем плохо сказать лишний раз const, если надо?
aadz
Оно же для компилятора, по сути, чтобы он ругался, если что
Roman
Оно же для компилятора, по сути, чтобы он ругался, если что
совершенно верно, компилятор должен думать за нас как можно больше, а мы должны описывать API'шки как можно более точно это устраняет ошибки, экономит дебагинг неявных ошибок и по очень мало стоит с точки зрения написания кода (это-ж вам не врапперы городить!) плюс ещё и небольшой прирост производительности
aadz
не, я, наверное, невнимательно что-то не понял тогда
aadz
Я бы модификатор const хотел!
Daniel
а я, повторюсь, хотел бы мотификатор mutable :)
Daniel
потому, что это будет меня сразу настораживать
Roman
а я, повторюсь, хотел бы мотификатор mutable :)
но тогда-же ломается совместимость 😭
aadz
А оно и так разве, не все изменяемое по умолчанию?
Daniel
я бы хотел других умолчаний
aadz
угу