
Алексей
13.09.2018
14:59:49
такие вещи надо явно писать, иначе коллизия именований будет
и переделывать скорее всего всё равно придётся значительно

Roman
13.09.2018
15:01:27

Savely
13.09.2018
15:01:53

Google

Roman
13.09.2018
15:02:22

Savely
13.09.2018
15:02:44

Алексей
13.09.2018
15:02:57

Roman
13.09.2018
15:03:22

Savely
13.09.2018
15:03:31
Я просто не знаком

Алексей
13.09.2018
15:04:00
я немного знаком
но совсем немного

Roman
13.09.2018
15:04:15

Алексей
13.09.2018
15:04:33
но я к примеру знаю, что там два парсера, один для компилера, другой для go fmt и прочих утилит
зачем так сделали мне совершенно не ясно
если кто-то мне прояснит, то будет вообще круто

Илья
13.09.2018
15:05:28
исторические причины, помоему

Google

Roman
13.09.2018
15:05:55

Andrei
13.09.2018
15:06:13

Алексей
13.09.2018
15:06:29

Илья
13.09.2018
15:06:39
просто fmt был изначально, а парсер написали к 1.5

Savely
13.09.2018
15:07:41

Алексей
13.09.2018
15:07:44
Причём там написано в стиле Роба Пайка, то есть всё руками без особой кодогенерации через какой-нибудь bison/antlr/что угодно
Причём в обоих парсерах

Andrei
13.09.2018
15:08:29

Алексей
13.09.2018
15:08:36
хотя я с таким подходом не согласен совершенно

Savely
13.09.2018
15:09:01


Roman
13.09.2018
15:12:55
Растоманам может и нужна. Там я против неё ничего не имею, безопасность и всё такое. У Го немного другой прицел, ИМХО.
какой другой прицел? безответственность?
я не предлагаю убирать GC и завозить ownership & borrowing взамен.
я предлагаю уточнить систему типов, которая по описаниям в пропосале - чуток хромает из-за того что иммутабельных типов нет, которые же можно без проблем завезти.
основная разница Rust'а и Go это разные подходы к МЕНЕДЖМЕНТУ ПАМЯТИ!
- GC (Go) это просто
- ownership & borrowing (Rust) это сложнее
- RAII (C++) это очень сложно
- alloc/delete (C) это адово сложно
поэтому не надо сравнивать Rust и Go и гнать на compile-time security. Потому-что compile-time security это очень важно во времена большого, сложного, конкуррентного open source кода. А имутабельные типы НЕ вносят значительный overhead в процесс компиляции (в теории, числа зависят от конкретной имплементации)! Понижение скорости компиляции настолько незначительное что вы его не заметите.


Artem
13.09.2018
15:14:47


Алексей
13.09.2018
15:15:20
да тут и не надо особо пруфов
и так понятно, что иммутабельность - это явно не та вещь, которая может замедлять компиляцию

Aleksey
13.09.2018
15:15:58

Artem
13.09.2018
15:16:15

Алексей
13.09.2018
15:16:19
да и скорее всего если я даже сделаю pull request, то его наверняка не примут

Roman
13.09.2018
15:17:12

Google

Алексей
13.09.2018
15:17:47
так что мои изменения (если их удастся внести) скорее всего так и останутся моими :(

Roman
13.09.2018
15:18:26

Artem
13.09.2018
15:18:32

Roman
13.09.2018
15:18:44

Artem
13.09.2018
15:19:06

Roman
13.09.2018
15:21:46
var a const func() что значит
это типичная иммутабельная переменная, это означает что в a нельзя присвоить никакую другую функцию:
var a const func() { fmt.Print("A") }
/*...*/
a = const func() { fmt.Print("B") } // Compile-time error
.example.go:3:3: cannot assign to immutable variable a

Savely
13.09.2018
15:24:41

Roman
13.09.2018
15:26:20

Алексей
13.09.2018
15:27:32
Вообще сама идея мне нравится
а вот насчёт реализации я не уверен
это я про иммутабельность если что

Savely
13.09.2018
15:28:27
Зе сейм. Но я не знаю что ещё можно предложить, не поломав совместимость с Go1.

Roman
13.09.2018
15:28:31
я подумываю переименовать документ в Go 1/2 - Immutable Types

Savely
13.09.2018
15:29:13
Но можно сделать синтакс лучше, поломав :)

Димка
13.09.2018
15:29:47
Подскажите best practice по написанию тестов на Go?
Или киньте ссылкой, пожалуйста

Savely
13.09.2018
15:32:26
@Romshark ImmutableField const *Object, а если вот так объявить, то что будет? Я туповат под вечер
Ты в примере пишешь:
type Object struct {
ImmutableField const * const Object // Immutable
MutableField *Object // Mutable
}

Roman
13.09.2018
15:34:18

Google

Roman
13.09.2018
15:34:45

Savely
13.09.2018
15:35:49
не понял вопрос
type Object struct {
ImmutableField const * const Object // Immutable
MutableField *Object // Mutable
}
Я вот про этот пример.

Roman
13.09.2018
15:36:02

Savely
13.09.2018
15:36:39

Roman
13.09.2018
15:37:40

Savely
13.09.2018
15:37:58
Ага, понял

Алексей
13.09.2018
15:38:34
вот это как раз выглядит как-то не очень

Roman
13.09.2018
15:38:42

Admin
ERROR: S client not available

Roman
13.09.2018
15:39:22

Savely
13.09.2018
15:39:33

Roman
13.09.2018
15:39:54
Разве это не * const Object?
наоборот
const квалификатор применяется всегда к тому что справа от него, так-же как указатель применяется на тип справа от него

Алексей
13.09.2018
15:40:38
слишком кратко я бы сказал

Savely
13.09.2018
15:41:12

Roman
13.09.2018
15:41:23

Savely
13.09.2018
15:41:27
Вот и получается что не наоборот, разве нет?

Google

Алексей
13.09.2018
15:41:52

Roman
13.09.2018
15:42:57

Алексей
13.09.2018
15:43:33
да и Go не про системное программирование

Roman
13.09.2018
15:44:38

Savely
13.09.2018
15:45:11
Можно же написать *Object по классике?)

Roman
13.09.2018
15:45:34

Алексей
13.09.2018
15:46:19

Savely
13.09.2018
15:46:53
Потенциальное mut * mut Object меня тоже не сильно радует

Алексей
13.09.2018
15:47:15

Savely
13.09.2018
15:47:37
такого не будет
Так вон:
https://github.com/romshark/Go-2-Proposal---Immutability#3-immutability-by-default-go--2x

Алексей
13.09.2018
15:48:24
аа

Roman
13.09.2018
15:48:26

Алексей
13.09.2018
15:48:51
а, я думал и mut и const вместе
уф

Savely
13.09.2018
15:49:01
Почему, кстати, там так:
Immutable_immutMap_of_immutObj map[Object] Object // immutable key
Mutable_mutMap_of_immutObj mut [Object] Object // immutable key
Mutable_mutMap_of_mutObj mut [mut Object] mut Object // mutable key
А не вот так:
Immutable_immutMap_of_immutObj map[Object] Object // immutable key
Mutable_mutMap_of_immutObj mut map[Object] Object // immutable key
Mutable_mutMap_of_mutObj mut map[mut Object] mut Object // mutable key

Алексей
13.09.2018
15:49:58
mutable key для мапы я бы вообще запретил
совсем
это вообще не имеет никакого смысла

Roman
13.09.2018
15:50:45