Информация об изменениях

Сообщение Re[10]: Rust взлетает? от 10.12.2019 15:16

Изменено 10.12.2019 15:20 so5team

Re[10]: Rust взлетает?
Здравствуйте, kaa.python, Вы писали:

S>>Так вопрос как раз в том, чтобы сразу погрузиться в код, который считается хорошим примером Go-шного кода, а не рыскать по непонятно чему.


KP>Как-то я смотрел реализацию Raft в Etcd, на мой взгляд довольно хорошее качество у проекта в целом.


Подтверждает старое впечатление о том, что Go -- это для терпеливых людей, которым думать особо некогда, бо код нужно клепать:
func (m *Message) MarshalTo(dAtA []byte) (int, error) {
    var i int
    _ = i
    var l int
    _ = l
    dAtA[i] = 0x8
    i++
    i = encodeVarintRaft(dAtA, i, uint64(m.Type))
    dAtA[i] = 0x10
    i++
    i = encodeVarintRaft(dAtA, i, uint64(m.To))
    dAtA[i] = 0x18
    i++
    i = encodeVarintRaft(dAtA, i, uint64(m.From))
    dAtA[i] = 0x20
    i++
    i = encodeVarintRaft(dAtA, i, uint64(m.Term))
    dAtA[i] = 0x28
    i++
    i = encodeVarintRaft(dAtA, i, uint64(m.LogTerm))
    dAtA[i] = 0x30
    i++
    i = encodeVarintRaft(dAtA, i, uint64(m.Index))
    if len(m.Entries) > 0 {
        for _, msg := range m.Entries {
            dAtA[i] = 0x3a
            i++
            i = encodeVarintRaft(dAtA, i, uint64(msg.Size()))
            n, err := msg.MarshalTo(dAtA[i:])
            if err != nil {
                return 0, err
            }
            i += n
        }
    }
    dAtA[i] = 0x40
    i++
    i = encodeVarintRaft(dAtA, i, uint64(m.Commit))
    dAtA[i] = 0x4a
    i++
    i = encodeVarintRaft(dAtA, i, uint64(m.Snapshot.Size()))
    n3, err := m.Snapshot.MarshalTo(dAtA[i:])
    if err != nil {
        return 0, err
    }
    i += n3
    dAtA[i] = 0x50
    i++
    if m.Reject {
        dAtA[i] = 1
    } else {
        dAtA[i] = 0
    }
    i++
    dAtA[i] = 0x58
    i++
    i = encodeVarintRaft(dAtA, i, uint64(m.RejectHint))
    if m.Context != nil {
        dAtA[i] = 0x62
        i++
        i = encodeVarintRaft(dAtA, i, uint64(len(m.Context)))
        i += copy(dAtA[i:], m.Context)
    }
    if m.XXX_unrecognized != nil {
        i += copy(dAtA[i:], m.XXX_unrecognized)
    }
    return i, nil
}

отсюда, причем не похоже, чтобы это было сгенерировано автоматически, там вначале файла много комментариев.

За счет сборки мусора и лаконичного синтаксиса, конечно, получается компактнее, чем на Cи или "Си с классами". Но если сравнивать с Rust или D, то как-то уныло получается, имхо.
Re[10]: Rust взлетает?
Здравствуйте, kaa.python, Вы писали:

S>>Так вопрос как раз в том, чтобы сразу погрузиться в код, который считается хорошим примером Go-шного кода, а не рыскать по непонятно чему.


KP>Как-то я смотрел реализацию Raft в Etcd, на мой взгляд довольно хорошее качество у проекта в целом.


Упс. Ошибочка. Приведенный в первой версии ответа пример оказался сгенерирован