Pull to refresh
2
0.7

User

Send message
Иконка «Message» (где три человечка) очень похожа на иконку MSN Messanger (позже Windows Live Messenger) — был такой раньше. Неудивительно, что американцы хорошо распознавали ее, в отличие от китайцев, ведь они поголовно пользовались этим мессенджером.
«Call log» (две стрелочки) — это из телефонов Nokia c Symbian.
Вероятно, для остальных иконок тоже есть специфичные ассоциации.
Ну тут сложный вопрос. Если включить и реализацию, то туда полезут все переклейщики наклеек, а отделить их от настоящих производителей нет возможности.
А что в этом хорошего

Дисциплинирует и вносит ясность для разработчика и компилятора.
А чем это отличается от ситуации «передали большой ненужный объект как параметр»?

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

Предлагаю на том и порешить.
Кнопок на сайте может быть и 100, и у всех обработчики, а нажать юзер может только одну.
Неопытный или недобросовестный разработчик очень легко может захватить и удерживать в памяти ненужные данные, в этом главная беда замыканий. Вообще это проблема всех языков с GC, но в JS стоит особенно остро.
С управляемой памятью разработчики перестали стрелять себе в ногу — они стали стрелять в голову юзеру.
Как лучше — не берусь судить. Но, например, в PHP для анонимной функции нужно явно указывать, какие локальные переменные в нее передавать — это мне больше нравится.
на этапе компиляции создается анонимный класс, в поля которого записываются все захваченные переменные

В JS скорее всего что-то подобное, но в этих захваченных переменных могут быть ссылки на большие ненужные объекты, которые так и останутся висеть в памяти, даже если из них нужно лишь одно свойство.
А сколько по-вашему, если я в замыкании вешаю обработчик на кнопку, которая никогда не нажмется?
Насчет «удобно» я и не спорил. Сам иногда пользуюсь.
«Читаемо» — ну это уже на вкус и цвет, как говорится. На мой взгляд, например, не очень.
Меня больше беспокоит, не как это написать, а как это исполнять. Но это совсем другая тема, тут моя ошибка.

1. конфликты имён — мимо, переменных в родительском скоупе в нормальной программе не настолько много

2. непонятно где используются — мимо, если не писать километровые функции

4. время жизни как у глобальных — т.е. вечное, пока исполняется программа. А если это браузер с двумя десятками открытых вкладок, то сами понимаете…
Это всё и приводит к тому, о чем я написал в первом комментарии.
Родительский скоуп — он такой же, как и глобальный скоуп, только не глобальный.

А я что выше написал? Что они «недоглобальные». Неужели Вы ни разу не слышали, что глобальные переменные — это плохо? Потому что они провоцируют писать неоптимальный запутанный говнокод. С замыканиями примерно та же история, хоть и назвали их по-другому.
С того, что она видит локальные переменные вызывающей функции.
Суть функции не только в том, что она возвращает какое-то значение, но и в том, что на входе она получает ограниченный набор данных — только аргументы. Это обуславливает эффективность ее выполнения.
Здесь же она вдобавок получает scope родительской функции — это действительно «просто блок вложенного кода», а не функция.
Ну значит костыль тут в другом — «блок кода» реализован через функцию, которая «не функция».
Если посмотреть с этой стороны, то получим просто большие и очень большие функции первого уровня с вложенными «блоками кода» и долгоживущими локальными переменными.
Что не отменяет вышесказанного мной про браузеры и неоптимальность.
В том, что функции видны переменные, созданные за её пределами. Таким образом они превращаются из локальных в «недоглобальные», их нельзя разместить на стеке, они висят в памяти неизвестно сколько, ведь их всегда могут использовать (а могут и нет) где-то там внутри вложенной функции, которую могут вызвать неизвестно когда, и задача по управлению всем этим мусором ложится на компилятор.
Кому-то было лениво таскать контекст сквозь лапшу коллбэков, и он надругался над концепцией области видимости, придумав замыкания.
Не спорю, что это удобно, но не связано ли это косвенно с тем, что браузеры тормозят и жрут гигабайты памяти, как не в себя?
Лишнее подтверждение, что добровольной оптимизации мы не дождемся, нужно заставлять.
У питона разные бинари в разных пакетах хотя бы. А тут запихали либу под все архитектуры в одну apk, которая скачивается миллионы (сотни миллионов) раз, и занимает место на сотнях миллионов устройств.
Таргетинг платформы для apk кажется есть, но часто им пренебрегают.
Ага, еще и не одна so либа, а несколько, под разные архитектуры. Нормальная такая кроссплатформенность.
Интересная идея, я бы посещал такой сайт. Но без обзоров устройств от независимых реальных пользователей есть шанс превратиться в агрегатор маркетингового вранья.
Скоро они юзера будут помечать, как зловредного
Я имел в виду веб-сайты в первую очередь, потом мобильные приложения, ну и десктопные тоже.
С оптимизацией серверного ПО все значительно лучше, там потребитель гораздо ближе и неиллюзорно голосует рублем.

Information

Rating
1,721-st
Registered
Activity