Size: a a a

Programming Offtop

2021 March 24

Kd

Konstantin dmz9 in Programming Offtop
андроидеры, есть какой то способ понимать какая анимация рецайклера происходит в настоящий момент? диспатч изменений из диффа идет, так что даже не руками
источник

КР

Кирилл Романенко... in Programming Offtop
Albert Abdullin
И для этого андроид 12 делают и компоуз. Чтобы затем депрекейтнуть их. Все логично
Для гугла - да. У них несколько независимых команд, кто победит тот и будет на рынке, кто проиграет - того депрекейтнут. Они могут себе позволить написать компоуз и через день депрекейтнуть андроид.
источник

AA

Albert Abdullin in Programming Offtop
Кирилл Романенко
Для гугла - да. У них несколько независимых команд, кто победит тот и будет на рынке, кто проиграет - того депрекейтнут. Они могут себе позволить написать компоуз и через день депрекейтнуть андроид.
Круто, когда так можешь себе позволить
источник

U

Unat in Programming Offtop
Господа, помогите, может кто помнит. Был тройку лет назад в сети один доклад по производительности параллельных запросов, фрагментации пактов в wifi и сотовых сетях и вот этому всему. Не уверен, но почему-то кажется что это были Badoo. Никто ссылку не держит под рукой?
источник

AD

Aleksey D. in Programming Offtop
Кирилл Романенко
Для гугла - да. У них несколько независимых команд, кто победит тот и будет на рынке, кто проиграет - того депрекейтнут. Они могут себе позволить написать компоуз и через день депрекейтнуть андроид.
аж на iOS захотелось перекатиться
те чуваки чуть больше заинтересованы в качестве, ибо у них нет «ну, не полетело - закрыли» в отношении ОСей
источник

t

tRuNKator in Programming Offtop
Konstantin dmz9
андроидеры, есть какой то способ понимать какая анимация рецайклера происходит в настоящий момент? диспатч изменений из диффа идет, так что даже не руками
Разве что кастомным ItemAnimator'ом
источник

КР

Кирилл Романенко... in Programming Offtop
Unat
Господа, помогите, может кто помнит. Был тройку лет назад в сети один доклад по производительности параллельных запросов, фрагментации пактов в wifi и сотовых сетях и вот этому всему. Не уверен, но почему-то кажется что это были Badoo. Никто ссылку не держит под рукой?
Если найдёшь - пингани плз
источник

Kd

Konstantin dmz9 in Programming Offtop
tRuNKator
Разве что кастомным ItemAnimator'ом
источник

VP

Vladimir Petrakovich in Programming Offtop
Anton Korotkikh
так он же изначально уродцем родился, даже без JDK нормального
В то время разработчики под мобилки и мечтать не могли о нормальном jdk.
Но в андроиде стандартная библиотека слишком хорошо под него косила, и они захотели жить как белые люди на десктопе/сервере.
источник

VP

Vladimir Petrakovich in Programming Offtop
Aleksey D.
аж на iOS захотелось перекатиться
те чуваки чуть больше заинтересованы в качестве, ибо у них нет «ну, не полетело - закрыли» в отношении ОСей
Ага, зато у них есть "не полетело - всё сломаем" в отношении языка программирования
источник

AD

Apache DOG™ in Programming Offtop
Ilmir
Пришло, видимо, время для моего очередного лонгрида. Это будет rant и бугуртить я буду, как обычно, по поводу статус-кво в функциональных языках. Задену ещё заодно ООП языки и платформы, в том числе JVM. Статус-кво, о котором я буду говорить, опять идёт через хаскель от ML - это ADT.

Ещё до нового года я задался вопросом - что лучше, union типы или ADT с точки зрения дизайна языка. Тогда я не нашёл однозначного ответа. У обоих подходов есть свои плюсы и минусы. Но я уже тогда склонялся в сторону union типов, ибо неявное приведение A к A | B позволяет сократить код и не требует явного вызова конструкторов Left и Right монады Either.

Теперь я знаю точный ответ - ADT - это тупиковый путь развития и должны уступить место union типам. Дело в обратной совместимости. Допустим у нас есть функция f: A -> R и мы хотим добавить новый тип в параметры. В случае union типов функция примет вид f: A | B -> R, в случае же ADT она примет вид f: Either A B -> R. Вроде бы всё одно, отличие только синтаксическое. Тогда в чём же проблема? Проблема в вызывающей стороне. Из-за того, что для Either приходится явно вызывать конструктор, изменение сигнатуры несовместимо. Придётся менять весь пользовательский код. В случае же union типов такой проблемы нет.

Кстати, изменение возвращаемого типа тоже можно сделать обратно-совместимым, если язык поддерживает intersection типы, то есть замена f: A -> R на f: A -> R & T не ломает пользовательский код. Поэтому, кстати, я приветствую обеими руками Dotty. Там хотя бы source совместимость будет сохранена.

К сожалению, сделать изменение ещё и бинарно-совместимым на JVM не выйдет. Только если все типы в сигнатурах функций генерировать как java.lang.Object. Для intersection типов проблем особых нет - можно не менять генерируемый возвращаемый тип. Но для union типов так не выйдет, что ломает всю красоту и весь, мать его, пойнт!

Возвращаясь в нашим баранам, то есть к нулябельности и Result. Добавление нулябельности параметру и убирание нулябельности в возвращаемом значении - бинарно-совместимое изменение, если не использовать инлайн классы. Там из-за манглинга ещё @JvmName надо будет повесить. Вообще, такая проблема присутсвует и для примитивов, поэтому такое поведение соответствует нашему видению, что инлайн классы подобны примитивам. Убирание же Result и замена на сырой тип не бинарно-совместимое изменение, в отличие от некидания исключения. Конечно, исключения всё равно не видны в сигнатуре, а так хотя бы можно сказать, чтобы принимающая сторона проверила на существование значения. Но Result не решает проблему checked exceptions полностью. Из-за как раз проблем обратной совместимости. Идеальное решение должно её принимать во внимание.

TL;DR: Result - это не очень, вернее даже, очень не.
1) что мешает иметь и адт и юньоны как в скале? 2) Это не дает магической обратной совместимости точно точно можно сказать что просто дописав ещё один кейс в адт, даже сигнатуру не нужно будет менять. А ещё есть тайпклассы с имплиситами у которых дело ещё лучше эта штука работает, ты прост дописываешь ещё одну имплементацию и все работает зашибись и не ломается, ну или ТФ, где ты можешь довешивать дополнительные фички не трогая старые и ещё тонна приемов 3) добавление добра в виде A -> A | B либо ломает код, либо оно аппендонли. Если оно аппенд-онли, то это нарушение SRP (и этот чел пишет язык) и должно быть не f A|B -> C, а f A -> B и g B -> C. А если нет - оно так или иначе потребует переписывания кода во всех местах вызова, на которые конпель не ткнет, и тут все байки про "обратную совместимость" идут коту под хвост. 4) адт в этом плане рабтает лучше, ибо оно обозвано одним классом который можно не менять при добавлении новых членов. 5) То, ломает ли код замена типа на подтип заависит его вариантности, если код инвариантен, то такая замена его сломает (чел пишет язык но не знает таких элементарных вещей, чё он за язык может написать?) 6) наллабл на не наллабл и на оборот это нефига не совместимые изменения, вы делаете взаимо исключающие изменения в протоколе, и то что их можно лихо игнорировать - это не достоинство а недостаток. 7) И правильно - не совместимым изменения протокола должны отвечать бинарно несовместимые вещи. Вся соль наличия резалта чтобы сломать весь код который надеется получать что-то без ошибки. Потому что он станет получать что-то с ошибкой или другим свойством. И это нужно переписать РУКАМИ и задать поведение - тут магия не возможна, забивание болта на подобные изменения ещё ни к чему хорошему никогда не приводили.
источник

AD

Apache DOG™ in Programming Offtop
Ломать код это целиком нормально - а ловко хачить ломая протокол семантически но оставляя бинарно - не нормально
источник

AD

Apache DOG™ in Programming Offtop
Сломать код где ломается семантика - это цель а не побочка
источник

AD

Apache DOG™ in Programming Offtop
А так идите в питухон там клавой по морде покатался будет бинарно совместимо
источник

t

tRuNKator in Programming Offtop
А что нужно именно момент анимации отлавливать? AdapterObserver ещё есть для notify методов
источник

U

Unat in Programming Offtop
Кирилл Романенко
Если найдёшь - пингани плз
источник

КР

Кирилл Романенко... in Programming Offtop
А, да, читал.
источник

t

tRuNKator in Programming Offtop
Примерно так, да.
источник

Kd

Konstantin dmz9 in Programming Offtop
tRuNKator
А что нужно именно момент анимации отлавливать? AdapterObserver ещё есть для notify методов
ну, прилипающий заголовок. эх, надо было отдельной вьюшкой перед ресайклером сверху делать да не ибаться
источник

Kd

Konstantin dmz9 in Programming Offtop
обычная техника какая - т.к. во время рендера, входа на экран, неважно чего, короче рв не рендерит заголовок сам, т.к. до него еще не доскролили.
с каким нибудь скролвью было бы проще - вычисляешь офсет и сдвигаешь, готово.
с рв приходится биндить заголовок отдельно, и живет он отдельно, тупо на канвасе грубо говоря
источник