Здравствуйте, kaa.python, Вы писали:
KP>Ну, как ты понимаешь, показать код который был у нас я не могу, тут придется просто поверить на слово, что было проще, легче и понятнее чем в случае с C++... но вполне можно глянуть в какой-нибудь активный проект и, при желании, найти там как подтверждение моим словам, так и что-то не читабельное и сказать что я вру
Так вопрос как раз в том, чтобы сразу погрузиться в код, который считается хорошим примером Go-шного кода, а не рыскать по непонятно чему.
Здравствуйте, so5team, Вы писали:
S>Так вопрос как раз в том, чтобы сразу погрузиться в код, который считается хорошим примером Go-шного кода, а не рыскать по непонятно чему.
Хорошо, самое просто – компилятор, само собой там своя специфика. Как-то я смотрел реализацию Raft в Etcd, на мой взгляд довольно хорошее качество у проекта в целом.
Здравствуйте, kaa.python, Вы писали:
S>>Так вопрос как раз в том, чтобы сразу погрузиться в код, который считается хорошим примером Go-шного кода, а не рыскать по непонятно чему.
KP>Как-то я смотрел реализацию Raft в Etcd, на мой взгляд довольно хорошее качество у проекта в целом.
Упс. Ошибочка. Приведенный в первой версии ответа пример оказался сгенерирован
Здравствуйте, so5team, Вы писали:
S>Упс. Ошибочка. Приведенный в первой версии ответа пример оказался сгенерирован
Да, это же Protobuf, он и для C++ кучу кода генерит. Но вообще, в Go очень много генерированного кода (я и сам генерил) так как, с одной стороны нет шаблонов, а с другой стороны поддержка построения и манипуляций с AST встроена в стандартную библиотеку, да и язык крайне простой, так что код генерировать очень просто.
А в целом-то как ощущения? Я по началу, после C++ очень плевался от Go, но сейчас мне скорее C++ кажется переусложенным (да еще и без каналов и зеленых потов, что вообще фи).
KP>А в целом-то как ощущения? Я по началу, после C++ очень плевался от Go, но сейчас мне скорее C++ кажется переусложенным (да еще и без каналов и зеленых потов, что вообще фи).
Смотря с чем сравнивать. Любой язык с GC и лаконичным синтаксисом будет восприниматься проще чем C++. Тут скорее другое интересует: в каких таких областях Go и C++ конкурируют? Если речь о том, что были тоны говнокода на "Си с классами" родом из 90-х, над которыми в течении многих лет надругались толпы "индусов" всех национальностей, и о качестве/производительности речи нет, тогда понятно в чем преимущество Go. Но если брать более нормальные условия?
Если же сравнивать с языками с GC, с каким-нибудь D, то вообще непонятно, в чем преимущества Go. Писать код вида:
func (c *Config) Clone() Config {
clone := func(m map[uint64]struct{}) map[uint64]struct{} {
if m == nil {
return nil
}
mm := make(map[uint64]struct{}, len(m))
for k := range m {
mm[k] = struct{}{}
}
return mm
}
return Config{
Voters: quorum.JointConfig{clone(c.Voters[0]), clone(c.Voters[1])},
Learners: clone(c.Learners),
LearnersNext: clone(c.LearnersNext),
}
}
можно на любом современном языке. И на каком-нибудь Rust-е это будет даже получше делать, т.к. там меньше проверок на nil нужно выполнять.
Здравствуйте, so5team, Вы писали:
S> Смотря с чем сравнивать. Любой язык с GC и лаконичным синтаксисом будет восприниматься проще чем C++. Тут скорее другое интересует: в каких таких областях Go и C++ конкурируют?
Мы на Go помимо бэкенда (где он ожидаем) написали кросплатформенный сервис и несколько утилит для командной строки. В принципе, это когда-то была зона ответственности C++
S> Если речь о том, что были тоны говнокода на "Си с классами" родом из 90-х, над которыми в течении многих лет надругались толпы "индусов" всех национальностей, и о качестве/производительности речи нет, тогда понятно в чем преимущество Go. Но если брать более нормальные условия?
Не только "индусов", а для обычного кода, который спокойно переживет ±1мс в вопросе производительности, но при этом хочется получить хорошую читабельность (Gо про "удобно читать", а не "удобно писать").
Здравствуйте, kaa.python, Вы писали:
KP>Мы на Go помимо бэкенда (где он ожидаем) написали кросплатформенный сервис и несколько утилит для командной строки. В принципе, это когда-то была зона ответственности C++
Это расплывчатые понятия, ибо такие вещи некоторые люди принципиально продолжают писать исключительно на чистом Си, а другие вполне себе успешно делают это на Perl/Python/Ruby уже несколько десятков лет как.
KP>Не только "индусов", а для обычного кода, который спокойно переживет ±1мс в вопросе производительности, но при этом хочется получить хорошую читабельность (Gо про "удобно читать", а не "удобно писать").
±1мс -- это для каких вещей? Перекодирования изображений или выполнения системных вызовов типа epoll/accept/read/write?
Ну и по читабельности хотелось бы таки увидеть примеры, на которых эта читабельность была бы видна. Пока что внимание привлекает только лаконичный синтаксис для получения слайса вектора, типа a[:n].
Здравствуйте, so5team, Вы
S>Это расплывчатые понятия, ибо такие вещи некоторые люди принципиально продолжают писать исключительно на чистом Си, а другие вполне себе успешно делают это на Perl/Python/Ruby уже несколько десятков лет как.
У нас было много логики включая встроенный Web-сервер. Да и как-то не очень идея ставить приложение в виде исходников на машину пользователя.
S>±1мс -- это для каких вещей? Перекодирования изображений или выполнения системных вызовов типа epoll/accept/read/write?
Мелкие тормоза из-за посредственного оптимизатора и пауз GC.
S>Ну и по читабельности хотелось бы таки увидеть примеры, на которых эта читабельность была бы видна. Пока что внимание привлекает только лаконичный синтаксис для получения слайса вектора, типа a[:n].
Ну, думаю что рассказывать о прелестях не-C++ заядлому C++-нику я дальше не буду. Пример простого и читабельного кода я привёл, можешь открыть сравнимое на C++ да сравнить. Всяко убедить не выйдет, пробовать надо.
Здравствуйте, kaa.python, Вы писали:
KP>У нас было много логики включая встроенный Web-сервер. Да и как-то не очень идея ставить приложение в виде исходников на машину пользователя.
Речь о другом: какие именно задачи решали эти утилиты командной строки? Преобразование форматов данных? Запрос информации через Web? Проверка каких-то параметров машины пользователя?
S>>±1мс -- это для каких вещей? Перекодирования изображений или выполнения системных вызовов типа epoll/accept/read/write?
KP>Мелкие тормоза из-за посредственного оптимизатора и пауз GC.
Но все-таки на каких именно задачах тестировалась производительность? У вас было перекодирование изображений, математические расчеты, обслуживание сетевых соединений?
KP>Пример простого и читабельного кода я привёл, можешь открыть сравнимое на C++ да сравнить.
Ну так как-то с примерами простого, расширяемого и поддерживаемого кода что-то пока не задается. Можно показать пальцем: вот, мол, здесь всего 10 строк, а на менее выразительном языке это бы потребовало больше усилий?
Здравствуйте, kaa.python, Вы писали: KP>Я этот этап давно прошел. Интересно — это сделать легко поддерживаемое, расширяемое решение в срок и с ожидаемым качеством. И вот в таком случае конкурентов у Go почти нет.
Оффтоп про Go — программист на Go ратует за дальнейшее упрощение языка: убрать else, против generic и т.д.
Здравствуйте, Nuzhny, Вы писали: N>Оффтоп про Go — программист на Go ратует за дальнейшее упрощение языка: убрать else, против generic и т.д. N>
Видео
N>
А в Го сообществе много странненьких. Я в Го слэках сижу (русский, английский), иногда волосы шевелятся от того бреда что они несут. Особенно в русском слэке