
Daniel
06.09.2018
16:51:58

Sergey
06.09.2018
16:52:34

Daniel
06.09.2018
16:52:59
авторы go будут делать то, что сочтут нужным

Bogdan (SirEdvin)
06.09.2018
16:53:16

Google

Daniel
06.09.2018
16:53:31
правда, если они будут тянуть обратную совместимость - будут проблемы рано или поздно

Roman
06.09.2018
16:54:25
ну так давайте считать go и go2 разными экосистемами, и не париться
кстати, как считаешь, таки будет "реальный" Go 2 в скором или его ещё, веря словам разработчиков, не будет очень долго?
потому-что если они запланировали его уже на скажем следующий год то пропосал стоит адресовать на Go 2.x
если же нет, то на Go 1.x с пометкой о том, как можно бы было сделать в Go 2.x ещё лучше

Sergey
06.09.2018
16:54:30
Это спор ни о чем, авторы го свое мнение озвучили, а остальное это дрочерство
Ну и каждые 5 лет новую экосистему это конечно же бред

Daniel
06.09.2018
16:55:01
собственно - пока он не нужен

Roman
06.09.2018
16:55:58

Daniel
06.09.2018
16:57:24
угу

Roman
06.09.2018
16:57:32
я не знаю как авторы определяют "очень долгое время", может для них год это уже очень долго... хотя с итерациями в пол-года конечно можно предположить что это наверное лет эдак 5

Sergey
06.09.2018
16:58:53

Roman
06.09.2018
16:59:20
поэтому - иммутабельности всего по умолчанию и ключевого слова mut, увы - не быть

Aleksandr
06.09.2018
17:00:16

Google

Roman
06.09.2018
17:00:41

Pawel
06.09.2018
17:07:56

Daniel
06.09.2018
17:08:48
это просто мое мнение, ни на что не влияющее :)

Roman
06.09.2018
17:16:44


Pawel
06.09.2018
17:23:00
Поповоду const объектов. Вот допустим их таки добавят (хотя шансов нет, аналогичных предложений много висит, их игнорят). Вроде бы всё гут, но я лично вижу в этом две проблемы
1. Эстетическая. Добавится писанины, const будет по всюду, и выглядеть это будет как Rust
2. Перформанс. Появится возможность писать неэффективные функции вида "получить const-объект - вернуть модифицированный"

Pavel
06.09.2018
17:26:40

Pawel
06.09.2018
17:26:52


Roman
06.09.2018
17:28:26


Pavel
06.09.2018
17:28:44
но в моей практике обычно код и горячие циклы в приложении статичны очень долго после фазы активной разработки
ты добавляешь новый функционал, но редко делаешь большие рефакторинги

Pawel
06.09.2018
17:30:27

Pavel
06.09.2018
17:31:35
и часто ты рефакторишь прям с руки типа много чего переписать за раз? что у тебя прям архитектура приложения меняется?
это просто вопрос, не имеет отношения к const, мне const не нравится тоже -- слишком долго писать const const const

Pawel
06.09.2018
17:32:35

Roman
06.09.2018
17:33:06
shared state, это, ребята, сложно.
shared state, это опасно.
но
shared state, это часто производительнее и порой практически неизбежимо
так вот чтоб сделать shared state - менее опасным, нужна compiler-enforced иммутабельность

Daniel
06.09.2018
17:37:02

Roman
06.09.2018
17:37:22

Google

Pawel
06.09.2018
17:37:47
один только pointer aliasing чего стоит.
но это больше к самоконтролю относится, чем к переиспользованияю кода. Безопасный код, в котором кишки изолированы, несколько сложнее писать, зато значительно проще читать - ну так это самый что ни на есть Go way.
Поясню. Не все типы из пакета входят в апи модуля. Те немногие, которые входят, надо сделать безопасными, скрыть все слайсы, мапы и пйнтеры, изолировать нужные методы. Такой код читать на много проще, чем АПИ с константными объектами

Daniel
06.09.2018
17:38:19
коллега
вы с каким тезисом спорите

Pawel
06.09.2018
17:38:48

Pavel
06.09.2018
17:38:52

Roman
06.09.2018
17:39:31

Pavel
06.09.2018
17:39:45

Roman
06.09.2018
17:40:07

Pawel
06.09.2018
17:40:14

Aleksandr
06.09.2018
17:40:14
Забавное из комментов:
Наполовину офтоп, но раз уж речь зашла о го и оптимизациях, недавно разработчики решили выпилить ассемблерные версии алгоритма шифрования RC4 (ибо алгоритм слабый, а поддерживать ассемблер не хочется). После бенчмарков оказалось, что нынче код на го быстрее того ассемблера, что использовался в пакете. На треть.

Pavel
06.09.2018
17:41:07

Pawel
06.09.2018
17:41:32
Вот кстати годный пропозал в плане добавления тру иммутабельности если кто не в курсах https://docs.google.com/document/d/1UKu_do3FRvfeN5Bb1RxLohV-zBOJWTzX0E8ZU1bkqX0/edit#heading=h.2wzvdd6vdi83

Pawel
06.09.2018
17:42:08
тут я зв обеими руками

Mike
06.09.2018
17:43:46
Лёгкий оффтоп на тему: с тех пор как в js появились лет и конст, га практике 90% переменных стали конст, и рука уже на автомате их так объявляет, и многие баги прям по ходу написания улавливаются так.

Pavel
06.09.2018
17:44:57
??

Mike
06.09.2018
17:45:28
И дальше ты уверен, что ее не поменяют => предсказуемость

Google

Mike
06.09.2018
17:46:42
(для прояснения -- из всех языков, на которых я писал, самый любимый -- кложурка)

Pawel
06.09.2018
17:46:42

Pavel
06.09.2018
17:46:45

Mike
06.09.2018
17:47:33
Но медленно писалось, так что в прод не тащу пока


Roman
06.09.2018
17:50:59
а какой процент трудных багов предотвратило бы обкладывание констами в вашем опыте за последние года два?
я не смогу спонтанно перечислить конкретные случаи за последние пару лет, надо вспоминать. Но я могу с уверенно сказать что эти проблемы были самыми грязными и стабильно портили настроение, потому-что дебажить их то ещё удовольствие!
я вам дам аналогию для более простого понимания:
зачем нам в Go int32 и int64? Если Go это про простоту, то зачем усложнять и просто не оставить int а там пускай компилятор решает где это 32 а где 64 bit. Причина на то имеется, и она называется integer overflow и все вы её прекрасно знаете.
так вот если бы мы не смогли предсказать, где 64 а где 32, то очень легко можно бы было придти к неверным вычислениям, и сразу этого не заметить, а потом потерять из-за этого кучу бабла, реального, зелёного, когда 2,147,483,647 вдруг превратится в 4200, хотя код компилируется и работает.
С pointer aliasing’ом проблема такая-же. Код компилируется, а программа выдаёт бредовые результаты и хер пойми почему, особенно когда не ты один работал над кодом да ещё и возможно со сторонними библиотеками.
зачем нам типизация? да для того чтоб работать в команде было легче, чтоб кто-нибудь по невнимательности не передал слона в жирафа. А иммутабельность это всё эщё про систему типов, она просто ещё более конкретизирут типы раздeляя их на мутабельные и немутабельные, для того, чтоб кто нибидь случайно не оторвал нашему слону хобот, там, где ожидается полноценый слон


Pawel
06.09.2018
17:51:18
Карч я пожытожу свою мыслю, ок? const * const:
- задолбёшся писать
- задолбёшся читать
- рано или поздно напорешься на тормоза с копированием как в C++
- в плане бонусов и плюшек получишь в итоге пшик

Daniel
06.09.2018
17:53:02
так, все, я здолбался
колеги, сворачиваем дискуссию
pawel может голосовать против, если пропозал доберется до голосования

Admin
ERROR: S client not available


Pavel
06.09.2018
17:53:39
я не смогу спонтанно перечислить конкретные случаи за последние пару лет, надо вспоминать. Но я могу с уверенно сказать что эти проблемы были самыми грязными и стабильно портили настроение, потому-что дебажить их то ещё удовольствие!
я вам дам аналогию для более простого понимания:
зачем нам в Go int32 и int64? Если Go это про простоту, то зачем усложнять и просто не оставить int а там пускай компилятор решает где это 32 а где 64 bit. Причина на то имеется, и она называется integer overflow и все вы её прекрасно знаете.
так вот если бы мы не смогли предсказать, где 64 а где 32, то очень легко можно бы было придти к неверным вычислениям, и сразу этого не заметить, а потом потерять из-за этого кучу бабла, реального, зелёного, когда 2,147,483,647 вдруг превратится в 4200, хотя код компилируется и работает.
С pointer aliasing’ом проблема такая-же. Код компилируется, а программа выдаёт бредовые результаты и хер пойми почему, особенно когда не ты один работал над кодом да ещё и возможно со сторонними библиотеками.
зачем нам типизация? да для того чтоб работать в команде было легче, чтоб кто-нибудь по невнимательности не передал слона в жирафа. А иммутабельность это всё эщё про систему типов, она просто ещё более конкретизирут типы раздeляя их на мутабельные и немутабельные, для того, чтоб кто нибидь случайно не оторвал нашему слону хобот, там, где ожидается полноценый слон
ну во первых компилятор может всегда делать int64, во вторых как-то скучно я живу, что у меня за два года не было ни одного такого бага ?


Daniel
06.09.2018
17:54:29
у меня был в 2015 один такой, я его неделю ловил
и в 2018 тоже, но тут мне помогло то, что оно иногда падало по конкурентной модификации мапы

Pavel
06.09.2018
17:55:18
профит от const -- перформанс для оптимизаций компилятором, но компилятор в го по сравнению с c++ -- практически не умеет в оптимизации все равно
да и в Java JIT без final как-то нормально живет

Daniel
06.09.2018
17:55:36
он учится, и довольно быстро

Roman
06.09.2018
17:55:55

Pavel
06.09.2018
17:55:59

Roman
06.09.2018
17:56:19
1.2. Benefits
https://github.com/romshark/Go-2-Proposal---Immutability#12-benefits

Pavel
06.09.2018
17:58:23
но я верю, что компилятор может быть лучше и без const =)

Google

Daniel
06.09.2018
17:59:35
давайте про компилятор забудем пока

Roman
06.09.2018
17:59:36

Pavel
06.09.2018
18:00:00
ну я говорю что скучновато живу

Pawel
06.09.2018
18:04:55

Daniel
06.09.2018
18:05:50
еще раз - вы с каким тезисом спорите?

Pavel
06.09.2018
18:08:11

Pawel
06.09.2018
18:08:53

Daniel
06.09.2018
18:09:15

Danil
06.09.2018
18:11:08
здравствуйте, подскажите как декодировать строку
у меня есть строка вида \x02\xe5\x05\x07\xc0\x88\x1c~i
я знаю что ее кодировали с помощью кодировки ср437, скажите как ее декодировать в читаемый формат?

Daniel
06.09.2018
18:12:31
а len у этой строки какой?

Danil
06.09.2018
18:12:57
каждый раз разная

Aleksandr
06.09.2018
18:13:42

Abdulla
06.09.2018
18:14:05

Aleksandr
06.09.2018
18:14:24
пример
reader := bytes.NewReader(iter.Node().Bytes())
transformer := transform.NewReader(reader, charmap.Windows1251.NewDecoder())
buf, _ := ioutil.ReadAll(transformer)

Roman
06.09.2018
18:18:20

Александр
06.09.2018
18:19:11
какая то мистика блин
сделал два поля в модели - *time.Time
оба форматируются в .Format(time.RFC3339)