По поводу перфа, можно инлайнить композицию, правда это не динамическая история вообще, нужно будет каждую комбинацию описывать. У меня на проекте я специально делал кодген чтобы заинлайнить массив в класс, типа делал абстрактный MyCoolArray и реализации MyCoolArray0, MyCoolArray1 и тп. Но была цель оптимизироваться по памяти в первую очередь. После 16ти элементов уже была реализация MyCoolArrayN с массивом честным.
Потом это через виртуализацию разруливается на калсайте. Да, сдеградируешь на вызовах функций, но зато выигрываешь по плотности укладки в памяти.
Если совсем с ума сойти, можно ваще сделать «value types у нас дома» через VarHandle + byte[]. Производительность должна быть на уровне, тк JIT потом это всё вклеивает нормально.
конечно, это крайне костыльно, потому что JVM:(
Комментарий отредактирован:
29 ноября 2024, 14:46
(5 раз)
Если человек называет себя сеньором но при этом не может атомарно работать с конкурентной мапой, а прод «не упал» только потому что ревьюер уже в сотый раз смог это заметить…
А по поводу второго, это зависит от задач. Я тут задушнил не спорю, потому что в 99% случаев тебе будет достаточно простого решения. но в случае где его недостаточно… из недавних примеров, замена EnumMap на ConcurrentHashMap просто чтобы «па-быстраму» сделать класс тред-сейф положила кластер. А вот это на ревью пролетело к сожалению.
По поводу третьего это прямо моя личная жопоболь, когда ты встречаешь в коде воздушный замок который какой-то челик построил сто лет назад. А тебе нужно там что-то поменять. По итогу проблема добавить одно поле в POJO превращается в путешествие туда и обратно только потому что кто-то до тебя решил что тут нужно байткодогенерацию зафигачить.
Сорри за оффтоп уже конкретный от сабжа.
Комментарий отредактирован:
27 ноября 2024, 19:23
(3 раза)
я вот скоко работаю (байесд, не спорю), от чего реально горела жопа и из-за чего людей увольняли:
1) неправильный канкаренси код
2) неэффективные структуры данных
3) решение выдуманных проблем
> начинаются извращения с венгерской нотацией типа long timeMs; double speedKmh
А минусы будут?
в джаве тем более это экономия аллокаций.
ну типа да, ты можешь случайно смешать красное с липким, но от ошибок тебя не застрахуют полностью даже проверки на адекватность комбинаций.
Опять же, имхо, настоящая проблема в ЯП это читаемость кода, а ещё важнее читаемость многопоточного и асинхронного кода. А вот эти все вещи типа «а какой иерархией типов и перегрузками мне выразить мою идеальную модель», за решением таких паззлов это к хаскеллу и прочим функциональщикам. Т.е. кодить не за деньги.
В реальной жизни ты:
1) чтобы не ошибиться в вычислениях тестируешь код
2) если тебе надо вычислить физ величину ты просто её вычисляешь. ты не думаешь.
у перегрузки операторов есть плохое свойство: они вызывают код неявно.
холиварная тема, но именно из-за неё в джаве например от перегрузок отказались.
то есть если ты будешь читать какой-то код без возможности быстро прыгнуть в дефинишены, тебе вариант с конструкторами или методами подойдёт гораздо больше.
ты как человек даёшь осмысленность и названия разным комбинациям измерений.
так что логично что тебе нужно их перечислить будет. и самому описать правила их взаимодействия.
кроме того, с конструктором ты получишь как бонус невозможность попутать местами время и расстояние.
а вот с apple music айфремы не работают
Потом это через виртуализацию разруливается на калсайте. Да, сдеградируешь на вызовах функций, но зато выигрываешь по плотности укладки в памяти.
Если совсем с ума сойти, можно ваще сделать «value types у нас дома» через VarHandle + byte[]. Производительность должна быть на уровне, тк JIT потом это всё вклеивает нормально.
конечно, это крайне костыльно, потому что JVM:(
Angelscript + C++ очень похож на groovy + java
типа, пара компилируемый и скриптовый языки, которые очень друг на друга похожи. что очень удобно.
мы же прикладные кодеры народ простой — нам джейсончик переложить и изредка литкод порешать.
а академической работой пусть занимаются учёные на грантах. а от изобретения до индустриального применения проходит какое-то время.
ну к примеру тот же paxos. очень сложный капец, поэтому придумали raft для решения задачек попроще.
ну а чё он блицы свои сидит дёргает на дворе уже 2024век все норм ребята уже кодят на расте
Если человек называет себя сеньором но при этом не может атомарно работать с конкурентной мапой, а прод «не упал» только потому что ревьюер уже в сотый раз смог это заметить…
А по поводу второго, это зависит от задач. Я тут задушнил не спорю, потому что в 99% случаев тебе будет достаточно простого решения. но в случае где его недостаточно… из недавних примеров, замена EnumMap на ConcurrentHashMap просто чтобы «па-быстраму» сделать класс тред-сейф положила кластер. А вот это на ревью пролетело к сожалению.
По поводу третьего это прямо моя личная жопоболь, когда ты встречаешь в коде воздушный замок который какой-то челик построил сто лет назад. А тебе нужно там что-то поменять. По итогу проблема добавить одно поле в POJO превращается в путешествие туда и обратно только потому что кто-то до тебя решил что тут нужно байткодогенерацию зафигачить.
Сорри за оффтоп уже конкретный от сабжа.
1) неправильный канкаренси код
2) неэффективные структуры данных
3) решение выдуманных проблем
А минусы будут?
в джаве тем более это экономия аллокаций.
ну типа да, ты можешь случайно смешать красное с липким, но от ошибок тебя не застрахуют полностью даже проверки на адекватность комбинаций.
Опять же, имхо, настоящая проблема в ЯП это читаемость кода, а ещё важнее читаемость многопоточного и асинхронного кода. А вот эти все вещи типа «а какой иерархией типов и перегрузками мне выразить мою идеальную модель», за решением таких паззлов это к хаскеллу и прочим функциональщикам. Т.е. кодить не за деньги.
В реальной жизни ты:
1) чтобы не ошибиться в вычислениях тестируешь код
2) если тебе надо вычислить физ величину ты просто её вычисляешь. ты не думаешь.
но тут же всё логично — так работает линал
холиварная тема, но именно из-за неё в джаве например от перегрузок отказались.
то есть если ты будешь читать какой-то код без возможности быстро прыгнуть в дефинишены, тебе вариант с конструкторами или методами подойдёт гораздо больше.
так что логично что тебе нужно их перечислить будет. и самому описать правила их взаимодействия.
кроме того, с конструктором ты получишь как бонус невозможность попутать местами время и расстояние.
а ещё он не дал сделать предпросмотр покуда я не укажу минимум 2 тега
Но прикольно конечно что есть силы развивать булку.
Передаю чаю.