Roman
Roman
да, это именно имутабельный тип. В данном пропосале каждый тип имеет своего иммутабельного собрата, как материя и антиматерия... есть слайс, а есть иммутабельный слайс, есть * Object, а ещё есть * const Object
Roman
pointer aliasing, в нём вся проблема, понимаете?
Roman
https://en.wikipedia.org/wiki/Pointer_aliasing
Roman
слайсы в Go это практически указатели обёрнутые в структуру. Слайсы подвержены проблеме aliasing'а
Roman
у меня аналогичный вопрос))
Roman
верно
Roman
возможно)
третий пункт верно уточнён
🏁Александр
народ народ, а что за кейс то такой
🏁Александр
"передать по ссылке и не давать поменять"
🏁Александр
вы где это используете?
Roman
жаль что вы не понимаете, что копирование зачастую это последствие отсутствия иммутабельности.
Видите ли, копирование не решает одной проблемы совсем: ambiguous code (двусмысленный код)
func TakeSlice(slc []string)
сегодня в документации написано что slc не мутируется и вы естественно не копируете передаваемый slc, потому-что зачем писать лишний код и лишний раз тратить CPU и память, верно?...
а завтра, одним комитом позже, он уже вдруг мутируется 😋 а ведь ваш код продолжает компилироваться и работать, но вот результаты выдаёт уже неверные, и вы скорее всего заметите это когда будет слишком поздно и большая часть данных уже коррупированы, здорово, не правда ли?
Никто не гарантирует, все только обещают, здорово жить в мире обещаний без гарантий? 🙂
@ruelephant
🏁Александр
если я захочу поменять на "мутируемые данные" то мне надо будет сменить сигнатуру
🏁Александр
а это уже совсем другой метод получится
Roman
криворуким может оказаться даже гуру. Человек не алгоритм и независимо от того, как часто вы ему говорите о том что он "должен" - он всё-равно делает ошибки.
Будучи реалистами, понимая что такие ошибки будут всегда происходить - наша задача: уменьшить вероятность таких ошибок.
🏁Александр
где тут проблема то?
🏁Александр
какой то программиста-маразматик, сменил сигнатуру везде (включая вызовы) и потом ЗАБЫЛ
🏁Александр
да с таким же успехом я могу переменные просто путать в теле
Roman
я тоже так думал раньше) увы, всё не так просто
🏁Александр
на самом деле для дебага достало 🙂
🏁Александр
кусок вырезаешь чисто позырить
Roman
вот если бы ещё так-же за мутации пинал было бы здорово 😀
🏁Александр
"блэт переменную а не используешь"
Roman
с годами в разработке серверного ПО вы этим избиениям со стороны компилятора будете рады))
Roman
потому-что мне спокойнее спится когда днём меня побил компилятор но я уверен что в коде "нет" ошибок. Нежели когда компилятор сказал "всё окей", а сервер ночью упал
Roman
размеры команды были какие?
какой разброс по скилу участников команды?
какой размер/масштаб проектов?
как долго проекты мейнтейнились?
Roman
я работал над софтиной в несколько лямов кода, которая содержалась на протяжении 5 лет к тому моменту (было это тут https://www.adition.com/) и команда была > 50 человек. Всё это дело писали на C++. Если бы тогда Rust был уже достаточно популярным и я про него знал - я бы либо уволился либо переписал всё на Rust))) Потому-что баги там были феерические
Roman
"it segfaulted"... you know..
Roman
а data race это вообще страшная вещь
Roman
её можно даже и не заметить
Roman
всё будет похоже на то что всё окей, а на самом деле данные корримпированные
Roman
ладно, не будем оффтопить
🏁Александр
у меня был конечно кейс
🏁Александр
с конфигом
🏁Александр
но я решил через сеттеры
Roman
кстати, забыл напомнить:
Again: do not use freeze in production.
🏁Александр
это и понятно
🏁Александр
оно юзает рефлект
🏁Александр
couchdb.NewConnection(config.GetString("DB.Host"), config.GetInt("DB.Port"), timeout)
🏁Александр
у меня конфиг так юзается
🏁Александр
может это конечно и не правильно, пути протягивать через string
Roman
нет) это библиотекой не решается
Roman
но если таки решите перейти на тёмную сторону силы то предложу поставить proposal'у звёздочку в знак солидарности)
Roman
https://github.com/romshark/Go-2-Proposal---Immutability
может даже пару строк почитаете 😏
Roman
спасибо
YᑌᖇIY
Блин... Я это все прочитал. Целый день некогда было залезть в чат, а тут 500> сообщений.
Роман совершенно прав, dangling pointers, pointer aliasing — это беда языка, если её не решить хоть каким способом. Скала, раст решили эту детскую проблему.
Проблема очевидна только тем, кто её понимает.
Начать понимать её можно только на больших командах (точнее разными командами на одном проекте), с очень разношерстной публикой от новичков до опытных.
На проекте, где как обычно некогда разбираться, что делает чужой код/либа, но вдруг!! оказывается что она меняет твои данные (состояние), которые ты не ожидал для изменения!
И не ты их сам сознательно поменял, а произошёл "side effect" и цепочка выполнения, которая к этому привела, оказалась "очень вычурной и витеиватой".
Кто с этим сам не сталкивался, писал только "домашние" проекты, тот к сожалению мало понимает суть проблемы, увы....
Эта проблема отсутствует в скала, потому что заложена в языке, тк сделать мутацию как сайд-эффект можно только сознательно и тогда коллеги это внимательно изучат, насколько это оправдано.
Раст решил это на уровне компилятора.
Это же решение ОЧЕНЬ НЕОБХОДИМО в компиляторе Go.
Но есть сомнения, как вообще создатели го относятся к этой идее? Какие были или нет контакты, комменты от них, Роман? Может имеет смысл бомбить их на почту, в гугл группе, в слак каналах? Какие кто знает "наиболее прямые точки доступа" к создателям языка и компилятора? Поставить star + watch в гитхабе — это почти ни о чем...
Нужно больше усилий и я понимаю Романа и его постоянные попытки форсить и рекламировать свой proposal на канале. Но нужны другие, более "прямые и точные каналы", чтобы обращаться к "главным го разработчикам". Роман, думаю ещё стоило бы сделать более наглядные (то ли простые, то ли наоборот quiz, не очевидные примеры) с примером такого поведения, которое disaster.
Да, иногда вы можете увидеть и дать кому то" по рукам" в своей команде, но лучше, чтобы за вас это делал компилятор!
саша
Блин... Я это все прочитал. Целый день некогда было залезть в чат, а тут 500> сообщений.
Роман совершенно прав, dangling pointers, pointer aliasing — это беда языка, если её не решить хоть каким способом. Скала, раст решили эту детскую проблему.
Проблема очевидна только тем, кто её понимает.
Начать понимать её можно только на больших командах (точнее разными командами на одном проекте), с очень разношерстной публикой от новичков до опытных.
На проекте, где как обычно некогда разбираться, что делает чужой код/либа, но вдруг!! оказывается что она меняет твои данные (состояние), которые ты не ожидал для изменения!
И не ты их сам сознательно поменял, а произошёл "side effect" и цепочка выполнения, которая к этому привела, оказалась "очень вычурной и витеиватой".
Кто с этим сам не сталкивался, писал только "домашние" проекты, тот к сожалению мало понимает суть проблемы, увы....
Эта проблема отсутствует в скала, потому что заложена в языке, тк сделать мутацию как сайд-эффект можно только сознательно и тогда коллеги это внимательно изучат, насколько это оправдано.
Раст решил это на уровне компилятора.
Это же решение ОЧЕНЬ НЕОБХОДИМО в компиляторе Go.
Но есть сомнения, как вообще создатели го относятся к этой идее? Какие были или нет контакты, комменты от них, Роман? Может имеет смысл бомбить их на почту, в гугл группе, в слак каналах? Какие кто знает "наиболее прямые точки доступа" к создателям языка и компилятора? Поставить star + watch в гитхабе — это почти ни о чем...
Нужно больше усилий и я понимаю Романа и его постоянные попытки форсить и рекламировать свой proposal на канале. Но нужны другие, более "прямые и точные каналы", чтобы обращаться к "главным го разработчикам". Роман, думаю ещё стоило бы сделать более наглядные (то ли простые, то ли наоборот quiz, не очевидные примеры) с примером такого поведения, которое disaster.
Да, иногда вы можете увидеть и дать кому то" по рукам" в своей команде, но лучше, чтобы за вас это делал компилятор!
По моему создатели го сделали го типизированным лишь затем, чтобы он работал быстрее. Что уж говорить о каких-то нетривиальных компайл-тайм проверках.
Captain Jack Vielfrass
привет.кто работал с https://github.com/Dimonchik0036/vk-api ,как в update.Message получить название беседы?
snip
Блин... Я это все прочитал. Целый день некогда было залезть в чат, а тут 500> сообщений.
Роман совершенно прав, dangling pointers, pointer aliasing — это беда языка, если её не решить хоть каким способом. Скала, раст решили эту детскую проблему.
Проблема очевидна только тем, кто её понимает.
Начать понимать её можно только на больших командах (точнее разными командами на одном проекте), с очень разношерстной публикой от новичков до опытных.
На проекте, где как обычно некогда разбираться, что делает чужой код/либа, но вдруг!! оказывается что она меняет твои данные (состояние), которые ты не ожидал для изменения!
И не ты их сам сознательно поменял, а произошёл "side effect" и цепочка выполнения, которая к этому привела, оказалась "очень вычурной и витеиватой".
Кто с этим сам не сталкивался, писал только "домашние" проекты, тот к сожалению мало понимает суть проблемы, увы....
Эта проблема отсутствует в скала, потому что заложена в языке, тк сделать мутацию как сайд-эффект можно только сознательно и тогда коллеги это внимательно изучат, насколько это оправдано.
Раст решил это на уровне компилятора.
Это же решение ОЧЕНЬ НЕОБХОДИМО в компиляторе Go.
Но есть сомнения, как вообще создатели го относятся к этой идее? Какие были или нет контакты, комменты от них, Роман? Может имеет смысл бомбить их на почту, в гугл группе, в слак каналах? Какие кто знает "наиболее прямые точки доступа" к создателям языка и компилятора? Поставить star + watch в гитхабе — это почти ни о чем...
Нужно больше усилий и я понимаю Романа и его постоянные попытки форсить и рекламировать свой proposal на канале. Но нужны другие, более "прямые и точные каналы", чтобы обращаться к "главным го разработчикам". Роман, думаю ещё стоило бы сделать более наглядные (то ли простые, то ли наоборот quiz, не очевидные примеры) с примером такого поведения, которое disaster.
Да, иногда вы можете увидеть и дать кому то" по рукам" в своей команде, но лучше, чтобы за вас это делал компилятор!
Есть вполне нормальный и прямой способ предлагать свои идеи, а спамить коретим это не нормальный способ
Subbotin
Subbotin
Стоит оценивать совокупную стоимость владения-разработки софта
саша
YᑌᖇIY
Не факт, что скорость работы программера будет выше на расте/скале чем на го, если взять рандомного прогера и потратить одинаковое время на изучение языка
Под "скоростью" я подразумевал немного другое, извините, не совсем точно выразился. Речь не про скорость кодинга или проектирования.
Цена ошибки и цена её исправления, которая займёт время и нервы (а произойдёт она как правило на продакшн, и как бывает после свежего деплоя).
Цену этого сложно вычислить "легко и точно". Но лучше и правильнее это сделать в языке и компилятором, даже за счёт "сложных проверок" или "увеличения времени компиляции", чем потраченными человеко-часами. Кто этого не понимает, увы, его убедить, что это важно сложно. Это только с опытом приходит, что лучше этого гемороя НЕ иметь и столкнуться "иногда", чем иметь заложеннвй в языке, для "супер скоростной компиляции".
саша
скорость компиляции это конечно хорошо, но не так хорошо, если после компиляции всегда нужно запускать тесты
YᑌᖇIY
саша
саша
А за деньги пишу на го.
саша
Вот такая вот грустная история.
V
Ошибки создаёт не язык, а программист.
Subbotin
Под "скоростью" я подразумевал немного другое, извините, не совсем точно выразился. Речь не про скорость кодинга или проектирования.
Цена ошибки и цена её исправления, которая займёт время и нервы (а произойдёт она как правило на продакшн, и как бывает после свежего деплоя).
Цену этого сложно вычислить "легко и точно". Но лучше и правильнее это сделать в языке и компилятором, даже за счёт "сложных проверок" или "увеличения времени компиляции", чем потраченными человеко-часами. Кто этого не понимает, увы, его убедить, что это важно сложно. Это только с опытом приходит, что лучше этого гемороя НЕ иметь и столкнуться "иногда", чем иметь заложеннвй в языке, для "супер скоростной компиляции".
А вот это вопрос. Софт бывает разный. Баги есть везде. И делая софт мы всегда ищем компромисс между богами и скоростью/ценой. Если у тебя баланс и так смещен в сторону скорости и есть много других багов кроме сайд-эффектов владения, то внезапно го выгоднее
саша
Pavel
Под "скоростью" я подразумевал немного другое, извините, не совсем точно выразился. Речь не про скорость кодинга или проектирования.
Цена ошибки и цена её исправления, которая займёт время и нервы (а произойдёт она как правило на продакшн, и как бывает после свежего деплоя).
Цену этого сложно вычислить "легко и точно". Но лучше и правильнее это сделать в языке и компилятором, даже за счёт "сложных проверок" или "увеличения времени компиляции", чем потраченными человеко-часами. Кто этого не понимает, увы, его убедить, что это важно сложно. Это только с опытом приходит, что лучше этого гемороя НЕ иметь и столкнуться "иногда", чем иметь заложеннвй в языке, для "супер скоростной компиляции".
И потом словить ошибку off by one потому что ты человек.
V
Легаси и говнокод на любом языке, чего бурчать-то
саша
V
Что вы просто флудите (:
YᑌᖇIY
Ошибки создаёт не язык, а программист.
Никто не спорит. Другое дело если язык позволяет сделать очень неприятную и трудно отлавливаемую ошибку, или язык защищён от того, чтобы сделать такую ошибку случайно.
Специально воспользоваться возможностями языка и нести ответственность — пожалуйста.
Но также иметь возможность "специально защититься" от такой ошибки, именно этого сейчас нет, и именно это предлагает proposal.
V
С другой стороны чем больше инструментов, тем сильнее можно наговнокодить и сложнее потом в этом разобраться
саша
Ошибки создаёт не язык, а программист.
В любой инженерной области дабы повысить надёжность и производительность стараются убрать из производственной цепочки человека. А если из цепочки человека убрать невозможно, то стараются сделать всякие штуки, чтобы проверять, что человек не делает херню.
саша
К сожалению программирование — это по большей части не инженерная область.
саша
А детсад.
Artem
V
Вот поэтому независимо от языка есть две лучшие практики: тесты и код ревью
Диёр
Кодревью это человеческий фактор, тесты тоже
саша
V
Это называется мутацтонное тестирование, рекомендую
саша
если бы у нас так мосты строили, то их срок годности считался бы месяцами
Диёр