LINUX.ORG.RU
ФорумTalks

protobuf и java

 , , , ,


0

1

Вести с полей: решил попробовать заюзать протобуф и посмотреть какой классец он сделаем вместо моей шлачной деревянной pojo-модельки с пачкой аннотах для джексона, валидаторов и базы.

Короче ну его нафиг

Особо эпичный кусок сгенеренного кода:

            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                field_ = new java.util.ArrayList<my.test.RepeatedField>();
                mutable_bitField0_ |= 0x00000040;
              }
              field_.add(
                  input.readMessage(my.test.RepeatedField.parser(), extensionRegistry));
              break;
            }

продолжаю наблюдение

p.s. для тех кто в танке. Это блин модель. И очень неплохо когда глядя на модель ты блин видишь что же в ней за поля и на кой хрен она вообще нужна.

p.p.s. кстати javanano вполне читабелен. Прям наверху поля и конструктор. Чисто и удобно

★★★★★

А что не так с этим кодом?

Legioner ★★★★★ ()

Занятно.

А можете привести исходный .proto-файл, из которого эта прелесть былв сгенерироваана?

Bass ★★★★ ()
Последнее исправление: Bass (всего исправлений: 1)

Где пример «До» ? Ты сравнивал производительсность ? Ты понимаешь, что обычно не нужно править сгенерированый код ?

Dred ★★★★★ ()

Ничего себе, срочно напиши письмо в гугл, они там через этот код екзабайты гоняют, они и не знают что можно миллиард баксов економить

vertexua ★★★☆☆ ()
Ответ на: комментарий от vertexua

я не говорю что он неэффективен. Я говорю что он нечитабелен

upcFrost ★★★★★ ()

Спасибо, ваше мнение очень важно для нас. Держите нас в курсе. Интересно так же узнать ваше мнение о сгенерированном коде в Apache XmlBeans и прочих.

Deleted ()
Ответ на: комментарий от Dred

да, понимаю. Но глядя на модель иногда хочется хотя бы черт возьми понимать что за дерьмо в ней происходит, правда? Плюс я подумал было написать плагин что аннотахи накрутить для базы (в их вики сказано что это правильный способ), но блин быстро передумал

upcFrost ★★★★★ ()
Ответ на: комментарий от Deleted

Интересно так же узнать ваше мнение о сгенерированном коде в Apache XmlBeans и прочих

как не смешно апач читабельнее

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

Так смысл кодогенерации в том, что бы не страдать при выборе читабельности и оптимизаций. Ты делаешь как читабельно, кодогенератор - оптимизирует

Dred ★★★★★ ()
Ответ на: комментарий от Dred

Так смысл кодогенерации в том, что бы не страдать при выборе читабельности и оптимизаций. Ты делаешь как читабельно, кодогенератор - оптимизирует

Для читабельности можно хотя бы как в апачегенераторах перед классом давать коммент с исходником

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

как не смешно апач читабельнее

А, так вы его читаете. А мы вот сериализуем-десериализуем и важнее-то скорость этого дела. А читать можно и состав освежителя воздуха с тем же эффектом.

Страшно сказать, мы ещё сгенеренный код в систему контроля версий не добавляем, храним только исходные схемы. А вы, наверное, ещё и пулл-реквесты создаете для ревью сгенеренного кода? Вдруг они там накосячили с отступами или с именами переменных?

Deleted ()
Ответ на: комментарий от upcFrost

Для читабельности можно хотя бы как в апачегенераторах перед классом давать коммент с исходником

Это такой троллинг или серьезно? Коммент в сгенеренном классе с исходной схемой просто о-х-р-е-н-е-т-ь как читабелен. Такой весь серенький, монотонный, с ескейп последовательностями в нём. Не, если заглянуть в джавадок сгенеренный, то там ещё более-менее. Но, черт возьми, что мешает сразу в файл схемы пойти и посмотреть? Там и подсветка и навигация от IDE.

Deleted ()
Ответ на: комментарий от Deleted

просто очень хочется страдать, ничего с собой человек поделать не может.

Rastafarra ★★★ ()
Ответ на: комментарий от Deleted

А вы, наверное, ещё и пулл-реквесты создаете для ревью сгенеренного кода

троллить это конечно весело, а вот лишний раз глазами посмотреть что все ок и что никакое поле случайно не потерлось бывает очень полезно, особенно когда в команде сильно больше 10 разработчиков

и да, храним генеренный код в vcs, но это обусловлено системой сборки (иначе надо несколько раз присесть чтоб сгенерить все заново)

upcFrost ★★★★★ ()
Ответ на: комментарий от Deleted

Но, черт возьми, что мешает сразу в файл схемы пойти и посмотреть

у нас есть несколько тысяч файлов со схемами. Писать хотя бы из какой схемы что сгенерилось очень полезно

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

троллить это конечно весело, а вот лишний раз глазами посмотреть что все ок и что никакое поле случайно не потерлось

Если бы в Google Protobuf терялись поля, то я думаю уже бы еще один мировой финансовый кризис грянул бы

vertexua ★★★☆☆ ()
Ответ на: комментарий от upcFrost

Вам хоть молоко за вредность дают? Вручную всё это проверять это ж как себя не любить-то надо.

никакое поле случайно не потерлось

Не скомпилится ж, ну или надо интеграционными тестами API покрыть или что у вас там.

и да, храним генеренный код в vcs, но это обусловлено системой сборки (иначе надо несколько раз присесть чтоб сгенерить все заново)

Пока в Вилларибо хранят сгененеренный код в vcs, в Веллабаджо запушили либу в репозиторий (артифактори или нексус) и используют ее как зависимость в проекте.

Deleted ()
Ответ на: комментарий от upcFrost

а вот лишний раз глазами посмотреть что все ок и что никакое поле случайно не потерлось бывает очень полезно, особенно когда в команде сильно больше 10 разработчиков

Тесты?

Int64 ★★★ ()

А что не так? В данном случае исходником все-таки является файл, по которому «Это» сгенерировано. Если исходник читабелен и понимабелен, то не пофиг-ли вот на «это» ?

RiseOfDeath ★★★★ ()
Ответ на: комментарий от Deleted

артифактори или нексус

Nih, к сожалению. Если б можно было - не коммитили бы.

Не скомпилится ж, ну или надо интеграционными тестами API покрыть или что у вас там.

Полную интеграцию на коммит гонять никто не будет, у нас одних юнитов на коммит 70к проходит. Лишний раз глянуть глазами не навредит и займёт минуту-две

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

Ладно-ладно, вижу, у вас там своя атмосфера. Не буду в чужой бордель со своей камасутрой лезть. Держитесь там, хорошего вам настроения.

Deleted ()

Это ж сгенерированный код, зачем ты туда лезешь?

theNamelessOne ★★★★★ ()
Ответ на: комментарий от theNamelessOne

Это ж сгенерированный код, зачем ты туда лезешь?

его может быть много. Прям пц как много. И имена классов в крупном проекте на N тысяч файлов пересекаются довольно часто.

Часто бывает удобным в поиске баги открыть модель, дойти до проблемного элемента/геттера и посмотреть где он используется. Но для этого модель должна быть читабельной.

Ну и просто сам факт того что ты открываешь модель и не можешь сказать о чем оно вообще - это уже боль.

Да, можно открыть исходник. Но исходников может быть опять же дофигилион, и имена могу чуть-чуть отличаться (camelCase, подчеркивания, всякие i_ для интерфейсов и прочее). И писать из чего был сгенерен этот конкретный файл тоже очень неплохо бы

upcFrost ★★★★★ ()

case 58: {}

Это фича - так как нет метаданных.

столько-то лет назад пытался заюзать это чудо второй версии. там ещё и производительность была никакая т.к. копирования имно не нужные были туды сюда и вообще смысла в протоколе (компактности) в этом поделии для java я не разглядел. Очень специфическая весчЪ для сугубо числовых пересылок - т.е. надо модель данных затачивать под этот протокол иначе проще заюзать 100500 других вещей.

vtVitus ★★★★★ ()
Последнее исправление: vtVitus (всего исправлений: 1)

Дико извиняюсь, а JVM-байткод ты тоже глазами читаешь? Ну, на предмет, может, там что-то потерялось?

Miguel ★★★★★ ()

Скажи, а нафига при наличии прото файлика ты пялишься в нагенеренный жабакласс?

ya-betmen ★★★★★ ()

У нас на работе похожий персонаж был (крестовик): ему пипец как не нравился код сгенерёный для плюсов. Вылечили увольнением, потому что ни-%у-я не сделал.

Joe_Bishop ()
Ответ на: комментарий от upcFrost

Часто бывает удобным в поиске баги открыть модель

В этом случае надо открывать proto. И всё. Как его там, </thread>

Wizard_ ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)