Roman
я мельком видел вашу войну за иммутабельность, даже теоретически понимаю, где это поможет (допустим передача аргументов в интерфейс отправляет их на хип, тк кто знает, то там в интерфейсе будет, с конст станет лучше), но by default == плохая идея
https://github.com/romshark/Go-2-Proposal---Immutability#311-safety-by-default Immutability stands for compile-time safety, which would then be default behavior. The developer will have to explicitly annotate mutable types using the mut modifier preventing types from accidentally being declared mutable by forgetting to prepend the const qualifier.
Roman
const это круто, но писать постоянно const это не круто. А забыть const и тем самым выстрелить себе в ногу это вообще не круто забыть легче, чем конкретно намеренно ошибиться
Foxcool
откуда вы проблемы такие находите в нежирных сервисах?
Foxcool
юниттестирование иммутабельность
Foxcool
вот в 10-летнем монолите выстрелить себе в ногу да (:
Foxcool
когда его 5 поколейний говноедов колхохозят
Илья
прям OTRS вспомнился
Roman
юниттестирование иммутабельность
не смогу точно процитировать, но в данном интервью Rob Pike упомянул: https://youtu.be/BBbv1ej0fFo что он ужаснулся когда понял что большинство unit test'ов в динамических языках писали из-за отсутствие строгой типизации.
Roman
юниттестирование иммутабельность
зачем писать unit тесты, в которых вероятность ошибиться выше, нежели сложить эту ответственность на компилятор? может мы тогда и типизацию уберём и заменим её unit тестами?
Roman
откуда вы проблемы такие находите в нежирных сервисах?
и в целом вас никто не обязывает использовать иммутабельность, она опциональна. Но если вы пишете open source библиотеку, большой проект и т.д. и т.п. то вы поймёте зачем нужна иммутабельность
Foxcool
ну я вообще за неслишком жирные сервисы, которые тестить снаружи
Roman
зачем писать постоянно const?
тогда пишите копирующий код
Foxcool
про дроч на статтипизацию - тоже не понимаю. ПО ощущениям с нее больше гемора, а ошибки в рантайме все равно ловятся
Daniel
ну я вообще за неслишком жирные сервисы, которые тестить снаружи
есть подозрение, что ты не понимаешь, зачем нужны юнит-тесты а нужны они, чтобы ты, когда при фиксе бага добавишь новых два, об этом узнал
Илья
тогда пишите копирующий код
я тут видел либу, где мне кусок памяти из shared memory из функции возвращали, и норм :) на доверии
Roman
ну я вообще за неслишком жирные сервисы, которые тестить снаружи
ну не используйте тогда иммутабельность))) кто вам мешает?)))
Roman
я тут видел либу, где мне кусок памяти из shared memory из функции возвращали, и норм :) на доверии
молодцы, всё на доверии строите! вам в таком случае лучше в мир JS, там типизация тоже по доверию 🙂
Илья
ну не используйте тогда иммутабельность))) кто вам мешает?)))
насколько я понимаю, мешают люди, которые пытаются вкорячить в язык иммутабельность by default
Daniel
это только я, вроде
Roman
насколько я понимаю, мешают люди, которые пытаются вкорячить в язык иммутабельность by default
если вы не поняли зачем это нужно - это не значит что оно не нужно всем)))
Roman
это только я, вроде
я тоже за, но для Go 1 предлагаю компромис, потому-что выбора нет
Roman
@onokonem меня сейчас больше интересует как будет действовать иммутабельность на каналы
Roman
Нельзя закрыть канал?
ну т.е. const chan можно только читать?
Roman
ни посылать в него ни закрывать его нельзя?
Kirill
Как вариант
Daniel
что делать с ними?
snip
Иммутабельность головного мозга
Kirill
Запретить закрытие из функции, куда такой канал был передан
Roman
ch := library.GetChan() // const chan int ch <- 10 // Compile-time error val := <- ch // reading is fine
Roman
это зачем может быть нужно?
ну если мы канал из сторонней библиотеки получаем, она же заинтересована чтоб ты в этот канал не писал предсказуемости ради
Kirill
это какой-то странный кейс.
А в другом раскладе смысла не вижу
Roman
а чо с ним делал?
только читал
Daniel
ну так верни канал только для чтения
Roman
ну так верни канал только для чтения
ну а как ты предотвратишь чтоб в него писали?
Daniel
OMG
Roman
пусть лучше компилятор это запрещает
Илья
стрелочкой
Daniel
коллега, есть RO каналы, и компилятор запрещает в них писать
Илья
https://gobyexample.com/channel-directions
Roman
https://gobyexample.com/channel-directions
да, вот этого я до сих пор не знал
Roman
спасибо
Илья
век живи, как говорится
Roman
в таком случае... хмм, да, видимо каналы в этом не нуждаются
Daniel
поясни плиз
https://play.golang.org/p/fme3YsxbbJa
Daniel
правда, илья быстрее успел
Roman
https://play.golang.org/p/fme3YsxbbJa
👍🏻 не знал, спасибо
Илья
https://play.golang.org/p/fme3YsxbbJa
корректнее тогда уж так https://play.golang.org/p/71kXOCdon4p
Roman
короче я понял const chan относится к категории immutable reference type. Это не означает что в канал нельзя писать или его нельзя закрывать, это означает что сам reference на канал нельзя мутировать, т.е. это равносильно const * T const chan const Object иммутабельный канал на иммутабельный объект же просто вернёт иммутабельный объект при чтении из канала и не позволить изменить сам reference на этот канал
Roman
всё в принципе складывается в согласованную целостную картинку https://github.com/romshark/Go-2-Proposal---Immutability/issues/11
Artem
Скоро такое и до го докатится, Создатель языка программирования Python Гвидо ван Россум объявил о том, что из языка уберут служебные слова master («хозяин») и slave («раб») по соображениям политкорректности.
Subbotin
Ээээ. 10 лет пишу на Питоне и не слышал про кейворд мастер
Michael
Ээээ. 10 лет пишу на Питоне и не слышал про кейворд мастер
Каменты в исходниках пайтона писали слэйвы
Sebor▂▅▇█▓▒░
А в го что менять-то?
Anonymous
А в го что менять-то?
Рутину переименовать в хобби
kopMuk
Да и не так сказано было
kopMuk
Испорченный телефон каиф
Kirill
а репликация теперь у них менеджер/уборщик вместо master/slave?
Aleksander baltazor
Здравствуйте. Кто то наблюдал снижение скорости вызова функции time.Now() в версии go 1.11? после обновления Go с версии 1.10 до версии 1.11 проект стал кушать процессора в 2 раза больше По pprof на 2 месте по потреблению процессора - time.Now
Aleksander baltazor
памяти потребляется так же
Aleksander baltazor
операций то же
Aleksander baltazor
откатился до 1.9.7 потребление проца упало в 2 раза
Anonymous
На что стало времени больше тратиться? Что делает time.now долго?
Kirill
celebrity/follower
Да-да-да
Aleksander baltazor
просто получение текущего времени, вот код: time.Now().AddDate(2, 0, 0)
Anonymous
просто получение текущего времени, вот код: time.Now().AddDate(2, 0, 0)
Pprof же умеет дальше по стеку строить граф что происходит? Не сравнивали 2 графа?
Aleksander baltazor
еще не сравнивал