Size: a a a

Programming Offtop

2020 October 28

VP

Vladimir Petrakovich in Programming Offtop
Anton Korotkikh
за производительностью. просто пример из жизни - schema registry для кафки, по апишке подразумевается, что это очень динамичная штука, разные схема могут быть чуть ли не для каждой отедльной запииси их можно динамически вытягивать и кешировать. но максимум, что ты может сделать с этой динамикой - это обмазать GenericRecord вручную оттуда что-то доставать в духе  record.get("name").toString() и перекладывать это в каокй-нибудь уже заранее описанный свой класс...

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

VP

Vladimir Petrakovich in Programming Offtop
Ну и самой кафке твоя схема до пизды, она же байтики хранит, не?
источник

AN

Alexander Nozik in Programming Offtop
Bogdan Panchenko
Нет. Но таким способом хотел решит. Но думаю это не стоит того
Не стоит так делать в принципе. Все попытки, что я знаю, для сериализации произвольных данных без заранее оговоренных схем, превратились в неподдерживаемы хлам
источник

AN

Alexander Nozik in Programming Offtop
Anton Korotkikh
кстати, в жвм вообще как-то можно синтезировать на лету новый тип, класс? вот прилетела какая-нибудь схема, например авро или прото. и ты такой - хопача, создал под неё новый тип, сгенерил десериализатор без рефлексии и давай неистово херачить byte[] -> new_type
Можно, к примеру @commandertvis статью написал. Но это очень узко специфичное решение. Широко его лучше не использовать
источник

AM

Artem Molotov in Programming Offtop
источник

AK

Anton Korotkikh in Programming Offtop
Vladimir Petrakovich
Так если класс данных уже описан, зачем его создавать в рантайме?
тут две задачи сразу могут быть.
1. твой сервис это что-то типа фасада или прокси, для других, у которы не жвм, у них хуёвые либы и вообще они лучше дружат с json или proto неджели с авро. чтобы тебе макимально производительно делать конвертацию форматов, тебе нужна генерация кода, а не рефлексия, для этого нужно нагенерить классы и серилизаторы чисто под них. поскольку это универсальная прокся - то заранее определять эти классы вообще не вариант, мало ли какая система и что оттуда запросила.

2. вариант два, ты хочешь не просто тип данных, а некий минимально необходимый тебе набор полей, интерфейс. под него попадают условные типа yoba_schmea_v1 и yoba_schema_v2, ты ленивый и не хочешь делать класс прослойку реализующиую этот интерфейс куда будешь всё перекладывать из генрик записи - вот бы он осамо просто реализовало нужные мне интерфейс
источник

AN

Alexander Nozik in Programming Offtop
Anton Korotkikh
тут две задачи сразу могут быть.
1. твой сервис это что-то типа фасада или прокси, для других, у которы не жвм, у них хуёвые либы и вообще они лучше дружат с json или proto неджели с авро. чтобы тебе макимально производительно делать конвертацию форматов, тебе нужна генерация кода, а не рефлексия, для этого нужно нагенерить классы и серилизаторы чисто под них. поскольку это универсальная прокся - то заранее определять эти классы вообще не вариант, мало ли какая система и что оттуда запросила.

2. вариант два, ты хочешь не просто тип данных, а некий минимально необходимый тебе набор полей, интерфейс. под него попадают условные типа yoba_schmea_v1 и yoba_schema_v2, ты ленивый и не хочешь делать класс прослойку реализующиую этот интерфейс куда будешь всё перекладывать из генрик записи - вот бы он осамо просто реализовало нужные мне интерфейс
источник

(

( in Programming Offtop
саша сок #KotlinGang
Запоминаем: не говнокод, а уникальный стиль
Shitable
источник

AN

Alexander Nozik in Programming Offtop
Но выигрыш в результате не особо большой, а граблей много. Очень специфичные места так можно оптимизировать, но для широкой практики не рекоммендую
источник

VP

Vladimir Petrakovich in Programming Offtop
Anton Korotkikh
тут две задачи сразу могут быть.
1. твой сервис это что-то типа фасада или прокси, для других, у которы не жвм, у них хуёвые либы и вообще они лучше дружат с json или proto неджели с авро. чтобы тебе макимально производительно делать конвертацию форматов, тебе нужна генерация кода, а не рефлексия, для этого нужно нагенерить классы и серилизаторы чисто под них. поскольку это универсальная прокся - то заранее определять эти классы вообще не вариант, мало ли какая система и что оттуда запросила.

2. вариант два, ты хочешь не просто тип данных, а некий минимально необходимый тебе набор полей, интерфейс. под него попадают условные типа yoba_schmea_v1 и yoba_schema_v2, ты ленивый и не хочешь делать класс прослойку реализующиую этот интерфейс куда будешь всё перекладывать из генрик записи - вот бы он осамо просто реализовало нужные мне интерфейс
Не очень понимаю, что ты хочешь делать, но JVM спокойно генерит байткод в рантайме. Можешь хоть javac затащить и даже не трахаться с ASM.
источник

AN

Alexander Nozik in Programming Offtop
Кто не осилит вот на русском: https://habr.com/ru/company/JetBrains-education/blog/515614/
источник

с#

саша сок #KotlinGang... in Programming Offtop
(
Shitable
Ору
источник

AK

Anton Korotkikh in Programming Offtop
ух бля, спс
источник

СП

Сергей П. in Programming Offtop
A fuckable проект наоборот хорош. С ним хочется затейливо это самое.
источник

AK

Anton Korotkikh in Programming Offtop
Vladimir Petrakovich
Не очень понимаю, что ты хочешь делать, но JVM спокойно генерит байткод в рантайме. Можешь хоть javac затащить и даже не трахаться с ASM.
пока стоит задача 1. валидировать произвольный avro и трансплировать его в json. есть два решения, одно аккуратное, другое быстрее но из категории 'мои вкусы специфичны'
источник

VP

Vladimir Petrakovich in Programming Offtop
Anton Korotkikh
пока стоит задача 1. валидировать произвольный avro и трансплировать его в json. есть два решения, одно аккуратное, другое быстрее но из категории 'мои вкусы специфичны'
Ну если у тебя хайлоад, можно и кодогенерацией (в рантайме) побаловаться
источник

СП

Сергей П. in Programming Offtop
Ну если тимлид/пм не против... но надо стоп слово запомнить
источник

AN

Alexander Nozik in Programming Offtop
Anton Korotkikh
пока стоит задача 1. валидировать произвольный avro и трансплировать его в json. есть два решения, одно аккуратное, другое быстрее но из категории 'мои вкусы специфичны'
На самом деле то, что сделал @commandertvis - это практически единственный кейс, где эта штука вообще актуальна. Я имею в виду исключение вложенных лямбд. Но там оказалось, что после того, как мы формализовали промежуточный AST, который нужен для генереции, по нему не сильно хуже получается, потому что вложенность заменяется обходом дерева.
источник

AN

Alexander Nozik in Programming Offtop
Anton Korotkikh
пока стоит задача 1. валидировать произвольный avro и трансплировать его в json. есть два решения, одно аккуратное, другое быстрее но из категории 'мои вкусы специфичны'
Я бы все-таки взял вариант аля kotlinx-serialization с компайл-таймовой генерацией если это возможно.
источник

DP

Dmitry Ponyatov in Programming Offtop
источник