@gogolang

Страница 1502 из 1630
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
коллега хотел сказать "литерал", видимо. а про типизованные константы просто забыл.

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
ИМХО, но это таки треш

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

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

жесть какая-то.

Aleksandr
04.10.2018
15:31:16
если же мы хотим таки иметь возможность изменять *T в матрице, тогда нам нужно оповестить об этом пользователя функции: `func ReadMatrix(m [][]* mut T)` func ReadMatrix(m [][]* mut T) { t := m[0][1] t.Mutate() // Fine! t.Field = "newval" // Fine! }
я вчера кстати задавал вопрос про const в js, типа что с ним не так. Мне объяснили) но я сегодня вспомнил что имел в виду простоту использования. одна const и все. Насколько я понимаю, большинству не нравится сложность использования и понимания конструкций. нет?

Roman
04.10.2018
15:31:23
а значение под указателем T* в примере выше тоже будет иммутабельным? Или только сам указатель?
*T = immut pointer to immut T * mut T = immut pointer to mut T mut * mut T = mut pointer to mut T mut * T = mut pointer to immut T mut -> type, слева направо

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

Nik
04.10.2018
15:34:16
Пояснили что константы в го инлайновые и вычисляются в момент подстановки.
остается понять почему это 1«100 влезает в флоат64 и не влезает в инт64 при том что у них одинаковый размер, и 1»100. Особенности представления чисел с плавающей точкой ?

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
почему нельзя просто const a = []int{1,2,3}?
потому-что это transitive immutabiliy, который я уже упоминал только-что, читайте тут

Zver
04.10.2018
15:36:59
потому-что это transitive immutabiliy, который я уже упоминал только-что, читайте тут
В скольки процентах операций потребуется что-то сложнее этого: const a = []int{1,2,3}?

Roman
04.10.2018
15:37:08
а если я хочу типа матрицу то mut [] mut [] mut * mut T ?
скорее mut [] mut [] * mut T, нет смысла делать указатель мутабельным. для таких случаех существуют alias типы type MutableMatrix mut [] mut [] * mut T

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

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

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

Maruf
04.10.2018
15:38:57


Artem
04.10.2018
15:39:27
В скольки процентах операций потребуется что-то сложнее этого: const a = []int{1,2,3}?
несколькими параллельными процессами изменять один слайс или матрицу итд

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
потому-что это transitive immutabiliy, который я уже упоминал только-что, читайте тут
давай так: если я ставлю const я хочу чтобы a[0] = 4 вызвало ошибку. Но если я хочу все же изменить, ничего мне не помешает подшаманить: i := &a[0]; *i = 4. Почему бы не пойти на компромисс ля читаемости?

Виктор
04.10.2018
15:44:07
Roman
04.10.2018
15:44:16
давай так: если я ставлю const я хочу чтобы a[0] = 4 вызвало ошибку. Но если я хочу все же изменить, ничего мне не помешает подшаманить: i := &a[0]; *i = 4. Почему бы не пойти на компромисс ля читаемости?
я уже пояснил почему, но ладно, повторюсь: в сложных ситуациях люди выбросят имутабельность, которая их ограничивает, но она иммено для этого и нужна: защищать тебя в сложных ситуациях от стрельбы по ногам. Начнётся "дайте нам const_cast"

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
интересный question
Да... Я после работы, чёт загружен вообще. Исправил вопрос

Roman
04.10.2018
15:47:35
а в простых ситуациях люди выбросят иммутабельность, которую не понимают
она им не нужна. Она нужна для надёжных API, пусть каждый пользуется если ему надо, никто не заставляет

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
можно и на го - и скомпилять в js
дебажить только потом застрадаешься)

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

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

не?

Daniel
04.10.2018
15:49:40
не

но это безумие, коллеги

с++ как он есть

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

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

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

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

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

Artem
04.10.2018
15:51:42
И бутет все завалено mut-ми.
очевидно будет. Потому что не все понимают что такое иммутабельность и как и зачем ее использовать

Maruf
04.10.2018
15:53:18
Пробуй вручную пакет поставить, что скажет.
вроде работает, с другого компа закинул файлы

Darwin
04.10.2018
15:53:20
Artem
04.10.2018
15:53:38
да нихера это не C++. Это называется "надёжное, чёткое описание намерений", а мы на Go только CLI тулзы пишем? да нет, мы на нём целые кубернетисы валяем
в java тоже четко описаны намерения, вот только читабельности 0 не зря сделали, что External и internal вместо private/public

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

пиши новый пропозал, без шуток

не трать мое время

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

Maruf
04.10.2018
15:58:04
Пробуй вручную пакет поставить, что скажет.
2 extension все равно не устанавливаются

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

Роман, необязательно новая фича должна покрывать все кейсы - в данном случае это приводит к усложнению и высокому порогу понимания фичи. Можно компромиссно упростить фичу и выкинуть 5% редких кейсов. Дефолтная иммутабельность всей структуры с одним const - это по-моему единственный вариант, жизнеспособный для внедрения в го
собственно вот, можно написать: mut [][] int и всё будет мутабельно. Так-же можно написать: [][] int и всё будет немутабельно. А для очень редких случаев можно написать: mut [][] immut int чтобы всё кроме int'а было мутабельно. Ну а для ещё более редких: mut [] immut [] mut int чтоб прям оочень точно выразить что мут а что нет.

Страница 1502 из 1630