Благими намерениями что-то оптимизировать устлана дорога в Ад для программистов
Забудьте все, чему вас учили (c) армейское
Родились в голове кое-какие интересные мысли насчет того, какое полезное приложение для Android можно было бы написать. Не знаю, доведу ли я это дело до победного конца, но одна полезная история в связи с этим уже случилась -- я сунул свой нос в документацию для разработчиков и, честно говоря, сильно опечалился.
Все плохо.
Жаба давит
Язык программирования Java. Наверное, какие-то теплые чувства эта штуковина еще могла вызывать в далеких 90-х. Сегодня одна радует только толстожопых enterprise программистов, которым платят за их работу на этом бейсике XXI века неприлично большие деньги. Люди же порядочные, а также те, у кого кругозор чуть пошире, понимают какое это безнадежно устаревшее и окаменевшее гавно мамонта, на котором даже очень простую идею меньше чем в три экрана и не выразишь.
Сразу скажу, я не яростный противник виртуальных машин, managed кода и сборки мусора. Я говорю лишь о том, что с момента появления Java мы видели и стремительно развивающийся .NET, который очень быстро перегнал своего идейного вдохновителя, и множество языков под JVM, типа той же Scala. И в конечном счете, вся эта история, по-моему, доказала нехитрый тезис о том, что совершенно невозможно сделать удобный в использовании язык программирования со статической типизацией в рамках полной аскетичности и тотального минимализма. Чем больше фич -- тем лучше. Прости, дедушка Вирт.
"Оптимизаторы"
С Java разобрались, едем дальше.
Целый ряд проблем связан с попытками типа оптимизировать некоторые вещи.
Целый ряд проблем связан с попытками типа оптимизировать некоторые вещи.
Вообще большинство вещей в Android реализованы на C++ из вполне понятных соображений производительности. При этом API пользователя к этой функциональности сделан через Java классы, т.е. это некий промежуточный слой перехода из объектно-ориентированной среды и виртуальной машины в нативный код. Сам интерфейс взаимодействия виртуальной машины и нативного кода довольно ограниченный и, откровенно говоря, неудобный, ибо предоставление ABI для C++ это та еще история, и чтобы ее успешно разрешить, нужно серьезно над этой задачей работать (см. что сделала Microsoft в WinRT). В итоге получается, что со стороны пользователя вроде как есть современный интерфейс, основанный на языке высокого уровня и классах, но ниже, под капотом, вся эта красота вынуждена использовать крайне невыразительные средства для взаимодействия с нативным кодом, который, собственно говоря, всю функциональность и реализует. Возникает, так сказать, когнитивный диссонанс. Так вот, одна из проблем Android заключается в том, что множество ограничений взаимодействия VM и native серьезно сказались на дизайне высокоуровнего API, который, в итоге, предоставили бедному пользователю.