
Nik
04.10.2018
15:17:00
Т.е. константа этот кусок нетипизированной памяти?

Zver
04.10.2018
15:17:38

Daniel
04.10.2018
15:17:46
а?!
какая строка?

Google

Nik
04.10.2018
15:17:54
1«100 возвращает строку? О_о

Zver
04.10.2018
15:18:33

Roman
04.10.2018
15:18:41
а вот и нет.
люди будут избегать конструкций, про которые они не твердо понимают, что они делают.
и то, что ты придумал - оно сложное, никто вникать не будет, все забьют.
а то, что я думаю - оно простое. написал const - все, привет, мутировать не дадут
обычным смертным иммутабельность будет не нужна, они будут продолжать писать всё в мутабельном стиле, им пофиг))
а вот авторам библиотек, API, проектировщикам сложных систем этих людей нужно будет ограничивать ради избежания багов.
мне пока никто вразумительно не пояснил, как мы решим проблему transitive immutability которую я описал

Daniel
04.10.2018
15:18:49
коллега хотел сказать "литерал", видимо. а про типизованные константы просто забыл.

Artem
04.10.2018
15:20:48

Zver
04.10.2018
15:20:48

Nik
04.10.2018
15:21:48
Как у человека с плюсовым бекграундом, в моем понимании литерал имеет тип.

Roman
04.10.2018
15:22:15
ну то есть надо будет тыщу раз писать конст?
в Go 1.x - да, но можете не беспокоиться, вероятность того что этот пропосал примут в Go 1.x довольно низка, к большому сожалению. В Go 2.x я предлагаю всё по умолчанию сделать немутабельным, тогда в коде вообще не будет const, но парочка mut тут или там

Nik
04.10.2018
15:24:45

Roman
04.10.2018
15:25:52
func ReadMatrix(m [][]*T) {
m = [][]*T{} // Compile-time error
m[0] = []*T{} // Compile-time error
m[0][1] = &T{} // Compile-time error
t := m[0][1]
t.Mutate() // Compile-time error
t.Field = "newval" // Compile-time error
m1 := &m[0]
append(*m1, []*T{}) // Compile-time error
}
если же мы хотим таки иметь возможность изменять *T в матрице, тогда нам нужно оповестить об этом пользователя функции: `func ReadMatrix(m [][]* mut T)`
func ReadMatrix(m [][]* mut T) {
t := m[0][1]
t.Mutate() // Fine!
t.Field = "newval" // Fine!
}

John
04.10.2018
15:28:25
ИМХО, но это таки треш

Artem
04.10.2018
15:29:26

Google

Roman
04.10.2018
15:29:47
ИМХО, но это таки треш
вы этого не поймёте пока не начнёте отвечать за большой проект, большую команду, опен сорсный пакет и т.д.

Artem
04.10.2018
15:31:10
ну то есть вроде как иммутабельная матрица а вроде как и нет
жесть какая-то.

Aleksandr
04.10.2018
15:31:16

Roman
04.10.2018
15:31:23

Nik
04.10.2018
15:32:23

Artem
04.10.2018
15:32:34
окей. а давайте все нахер сделаем иммутабельным и будем какой нить copy-on-write делать не? здесь не сработает?

Zver
04.10.2018
15:32:52

Roman
04.10.2018
15:33:07

Nik
04.10.2018
15:34:16

Aleksandr
04.10.2018
15:34:19

Artem
04.10.2018
15:35:03
а если я хочу типа матрицу то mut [] mut [] mut * mut T ?

Roman
04.10.2018
15:35:25

Zver
04.10.2018
15:36:59

Roman
04.10.2018
15:37:08

Maruf
04.10.2018
15:37:44
Всем Салют! Установил go на другой ноут.
В vscode при установке 10 расширений выпадает ошибка
пожалуйста, помогите решить, хз в чем проблема

Roman
04.10.2018
15:37:48

Artem
04.10.2018
15:38:09
там не написано

Google

Zver
04.10.2018
15:38:20

Artem
04.10.2018
15:38:32
там написано мол ой а вдруг понадобится тогда придется юзать мутабельное

Maruf
04.10.2018
15:38:57

Artem
04.10.2018
15:39:27

Viktor
04.10.2018
15:39:29
git установите

Maruf
04.10.2018
15:39:40
так установлен

Zver
04.10.2018
15:40:50

Roman
04.10.2018
15:40:56
В скольки процентах операций потребуется что-то сложнее этого: const a = []int{1,2,3}?
если лень читать:
если иммутабельность сильно ограничивает - её выбросят. Чем полезна такая концепция иммутабельности, которая работает только в простых случаях а в более сложных - неприменима?
это, знаешь... как если ребёнку поставить вспомогающие колёсики на велосипед чтоб он катался по двору, а когда он поедет на этом велике с горки - убрать колёсики (не лучший пример, но спотанно в голову пришло только это)
щит нужен тогда, когда в тебя 50м калибром херачат, а не тогда, когда на тебя нападают тупым ножом))

Artem
04.10.2018
15:42:38
по мне так более выгодно было бы сделать как в скале. либо все мутабельное либо нет. Дабы избежать вот такой двоякости

Zver
04.10.2018
15:42:44

Artem
04.10.2018
15:42:53
val и var

$continue$
04.10.2018
15:43:00
Можно ли на Go писать addon для browser

Aleksandr
04.10.2018
15:43:26

Виктор
04.10.2018
15:44:07

Roman
04.10.2018
15:44:16

Aleksandr
04.10.2018
15:46:36
в чем ограничивает? изменить часть структуры, помеченной const?

Daniel
04.10.2018
15:46:40
а в простых ситуациях люди выбросят иммутабельность, которую не понимают

Google

Daniel
04.10.2018
15:46:52
простые - это примерно 99% всех ситуаций

Aleksandr
04.10.2018
15:47:20
если я пометил структуру const, я хочу чтобы она не менялась. не корень, не элемент слайса, не вложенная мапа в мапу

$continue$
04.10.2018
15:47:31

Roman
04.10.2018
15:47:35

Aleksandr
04.10.2018
15:47:52

$continue$
04.10.2018
15:48:14
Я на c++ писал

Daniel
04.10.2018
15:48:20
можно и на го - и скомпилять в js

Виктор
04.10.2018
15:48:27
https://github.com/gopherjs/gopherjs

Admin
ERROR: S client not available

Roman
04.10.2018
15:49:09

Zver
04.10.2018
15:49:13
Может тогда надо const [][] mut *T
Чтобы const задавала глобаную константность переменной, а если надо, то можно вложенные структуры сделать мутабельными.

Roman
04.10.2018
15:49:30

Artem
04.10.2018
15:49:32
так и предалагают же
не?

Daniel
04.10.2018
15:49:40
не
но это безумие, коллеги
с++ как он есть

Artem
04.10.2018
15:50:00

Zver
04.10.2018
15:50:17
И всем удобно. Хотя выглядит странновато.

Daniel
04.10.2018
15:50:22
почти любая конструкция имеет смысл, вот только почти никто не знает уверенно, какой

Google

Artem
04.10.2018
15:50:25
по дефолту всее иммутабельное, но на нужный тип можешь добавить мутабельность

Zver
04.10.2018
15:51:13

Roman
04.10.2018
15:51:15
с++ как он есть
да нихера это не C++. Это называется "надёжное, чёткое описание намерений", а мы на Go только CLI тулзы пишем? да нет, мы на нём целые кубернетисы валяем

Daniel
04.10.2018
15:51:34
как скажешь...

Artem
04.10.2018
15:51:42

Roman
04.10.2018
15:52:39

Maruf
04.10.2018
15:53:18

Darwin
04.10.2018
15:53:20

Artem
04.10.2018
15:53:38

Aleksandr
04.10.2018
15:54:40
Роман, необязательно новая фича должна покрывать все кейсы - в данном случае это приводит к усложнению и высокому порогу понимания фичи.
Можно компромиссно упростить фичу и выкинуть 5% редких кейсов. Дефолтная иммутабельность всей структуры с одним const - это по-моему единственный вариант, жизнеспособный для внедрения в го
пиши новый пропозал, без шуток
не трать мое время

Сергей
04.10.2018
15:56:37
Пиши на расте, без шуток

Maruf
04.10.2018
15:58:04

Zver
04.10.2018
15:58:51

Maruf
04.10.2018
15:59:13
да
покапался в переменных средах, вроде все норм

Zver
04.10.2018
16:02:12
@Marsaidoff А не может ли быть из-за пробела в пути ....

Maruf
04.10.2018
16:02:24
хммм


Roman
04.10.2018
16:04:28
Может тогда надо const [][] mut *T
Чтобы const задавала глобаную константность переменной, а если надо, то можно вложенные структуры сделать мутабельными.
DISCLAIMER:
WARNING! THE FOLLOWING CODE IS FOR TESTING PURPOSES ONLY!
НИКТО НЕ БУДЕТ ТАК ПИСАТЬ КОД, ЭТО ПРОВЕРКА ТЕОРИИ НА ПРАКТИКЕ
ПОЖАЛУЙСТА БЕЗ "аа, как сложно, это не Go"!
немного абсурдно сложного кода (писать так не рекомендую никому, никогда):
map [* T1] [] [] * [] * T2
"map of pointers to T1 to slices of slices of pointers to slices of pointers to T2"
первый мут делает все последующие типы мутабельными
mut map [* T1] [] [] * [] * T2
ибо в ином случае пришлось бы писать
mut map [mut * mut T1] mut [] mut [] mut * mut [] mut * mut T2
иммут в ключе делает T1 иммутабельным, но после него мутабельность продолжается, поскольку ] терминирует mut и не даёт ему дальше "течь"
mut map [* immut T1] [] [] * [] * T2
однако immut может заменять мут:
mut map [* immut T1] immut [] [] * [] * T2
но вернуть mut тоже можно:
mut map [* immut T1] immut [] mut [] * [] * T2
и под конец можно сделать T2 иммут:
mut map [* immut T1] immut [] mut [] * [] * immut T2
если убрать первый mut тогда всё то первого immut'а вне суб-контекстах (map key) будет immut:
map [* immut T1] immut [] mut [] * [] * immut T2
и линтер может предложить убрать лишний immut:
map [* immut T1] [] mut [] * [] * immut T2