Компания Google выпустила (http://android-developers.blogspot.com/2009/09/now-available...) релиз Android 1.6 NDK (http://developer.android.com/sdk/ndk/1.6_r1/index.html) (Native Development Kit), системы дополняющей Android 1.6 SDK (https://www.opennet.ru/opennews/art.shtml?num=23435) средствами для организации выполнения нативного Си/Си++ кода в приложениях, функционирующих в Java окружении мобильной платформы Android. Android NDK включает в себя: набор утилит и сборочных файлов для генерации специальных бинарных библиотек на основе исходных текстов на языках Си и Си++; инструменты для встраивания сгенерированных бинарных библиотек в APK пакеты с приложениями; коллекцию системных заголовочные файлы и системные библиотеки (libc, libm, JNI (Java Native Interface), libz, liblog); документация и примеры кода.
В состав новой версии NDK включены библиотеки для манипуляции 3D объектами через OpenGL ES 1.1 совместимый программный интерфейс, что открывает двери созданию н...URL: http://android-developers.blogspot.com/2009/09/now-available...
Новость: https://www.opennet.ru/opennews/art.shtml?num=23648
Еще один велосипед. Этак лет через пять до них даже чего доброго дойдет прикрутить GTK, Qt и прочие нормальные либы.
Кстати, а зачем вся эта хрень с явой нужна если в итоге все-равно пришли к нативному коду?Чтобы было криво и ни с чем не совместимо?
На яве пишутся приложения, на NDK - библиотеки, требующие очень быстрой обработки вычислений - аудио-видео кодеки, библиотеки для работы с 3D-графикой. Эти библиотеки потом подцепляются к программе, написанной на Java.
Иными словами, ява - эпический тормоз.
Для каких-то определённых применений - да. Впрочем, помнится, было время, когда любые скомпилированные, в том числе и из C, программы считались тормозными, а быстрые вещи писали на ассемблере.
А это время до сих пор не прошло.Просто посмотрите как пишутся кодеки.Без вставок на аккуратно оптимизнутом асме - чисто сишная версия может запросто сливать чуть ли не в разы по скорости.А когда вам могут подсунуть HD которое надо декодить в реалтайме, даже могучие коры и фени не покажутся слишком уж быстрыми.
>Иными словами, ява - эпический тормоз.Это не совсем так. Сановская жаба вполне себе быстрая. Просто конкретно у далвика не реализован jit-компилятор. Он все время байт-код интерпретирует. Проблема не в яве, а в конкретной реализации.
> Просто конкретно у далвика не реализован jit-компилятор. Он все время байт-код интерпретирует. Проблема не в яве, а в конкретной реализации.Каждый раз когда слышу эту правду - становится страшно. Ну неужели они не сделали JIT??? А планируется хоть?..
Погугулите "dalvik benchmark". Я ничего не нашел, кроме комменртария что нормальный jit будет сделать офигенно сложно и долго :)
>Это не совсем так. Сановская жаба вполне себе быстрая.Быстрая по сравнению с чем? С унылым тормозом типа питона? А то почему-то сишные версии библ и т.п. на операциях где скорость не похрен делают яву раза так в три.А когда в железяке проц и так в полторы комариные силы, а ему еще и работенки подбрасывают на ровном месте и хз для чего, получается большая но бесполезная игрушка.
>>Это не совсем так. Сановская жаба вполне себе быстрая.
>
>Быстрая по сравнению с чем? С унылым тормозом типа питона? А то
>почему-то сишные версии библ и т.п. на операциях где скорость не
>похрен делают яву раза так в три.А когда в железяке проц
>и так в полторы комариные силы, а ему еще и работенки
>подбрасывают на ровном месте и хз для чего, получается большая но
>бесполезная игрушка."Машины должны работать, а люди — ДУМАТЬ." © кто-то из IBM
Сколько раз тебе можно повторять, что Java создавалась для БИНАРНОЙ переносимости кода приложений, C/C++ этого обеспечить не могут. Да, ещё прикладникам нужно решать ПРИКЛАДНЫЕ задачи, а не бороться с утечками памяти в системе.
Да не надо ему повторять. До таких редко доходит, что любая задача решается теми средствами, которые больше всего для этого подходят. Нужна переносимость без компиляции, пользуйте java. Нужно быстродействие, где можно пожертвовать независимостью от платформы, пилите на c++.
>платформы, пилите на c++.Только почему-то квейк или дум на его сях есть под все что шевелится. А вот хоть 1 ява программу которая бы работала чуть ли не на китайском тетрисе назвать слабо? Тот же андроид ни с чем не совместим как бы. А с нативными интерфейсами - еще и на уровне бинарей. Ы?
Причем здесь совместимость андроида, если речь идет переносимости ПО, которое можно потом хоть на андроиде запускать? А небольшие и критичные по скорости нативные вставки можно компилить сразу под несколько платформ. jni потом сам подцепляет нужную библиотеку под данную платформу. Хотя, что там учудил далвик со своей кастирированной java машиной - хз.
Ну и как мне запустить J2ME программу на андроиде? А андроидскую на j2me телефоне? А запустить это на десктопе не слишком изгаляясь? Никак? Фигассе у вас "переносимость". А вот в OpenTTD можно и на ARM'овской железке размером с телефон нынче поиграться. Тупо поставив его из манагера пакетов. А кто там его компилил - да господи, это не головняк юзера и не головняк оригинальных разрабов. Итого - сишно-сиплюсплюсный софт сделаный с оглядкой на портабельность как-то получше переносится. А то что у любителей проприетари проблемы поддерживать совместимость со всеми возможными системами - так это их половые трудности, только им вся эта траходромность с явой и нужна, чтобы они могли нас пичкать своими блобами везде не очень геморроясь :).Это так, к вопросу о переносимости...
>Ну и как мне запустить J2ME программу на андроиде?Android J2ME MIDP RUNNER: http://www.netmite.com/android/
>А андроидскую на j2me телефоне?
А в Android какие стандартные JSR реализовали?
>А запустить это на десктопе не слишком изгаляясь?
Sun J2ME SDK 3.0 или Microemulator для J2ME-аппликух; Android SDK — для приложений под Android. Нет?
>Никак?
Ты сел в лужу.
>Итого - сишно-сиплюсплюсный софт сделаный с оглядкой на портабельность как-то получше переносится.
Предлагаешь каждому пользователю держать GCC для компиляции исходников или делать десятки билдов одной аппликухи под кучку системок?
>только им вся эта траходромность с явой и нужна, чтобы они могли нас пичкать своими блобами везде не очень геморроясь :).
Только вот DRM и подписанные мидлеты придумали для того, чтобы управлять арендой приложений (защищать код от модификаций, учитывать сроки использования, определять домены безопасности) и не давать исходники. Ага. А для твоих бинарных блобов такое слишком уж геморройно будет выходить. Так что твоя затея с "переносимым" C/C++ кодом проваливается сразу после получения блобов на билд-сервере.
>"Машины должны работать, а люди — ДУМАТЬ." © кто-то из IBMУгу, вот только некоторые (особенно жабисты, дотнетчики и т.п. рапидный сброд) очень любят делать ровно наоборот. В итоге люди бездумно вкалывают на написании унылого говнокода а вот машины потом при его выполнении очень даже долго думают... имхо лучше б было наоборот, как IBM и предлагали.
>Сколько раз тебе можно повторять, что Java создавалась для БИНАРНОЙ переносимости кода
>приложений,И куда простите можно перенести программы с андроида? Оно ни с чем другим не совместимо... да и у других видов явы с этим не фонтан. Прогу для мобилы с j2me на десктопе просто так одним махом - не запустишь нихрена. Вот поплясав с каким-то там бубном... А еще всякие там JNI и прочая. Без которых со скоростью совсем жопно, а с которыми - простите, как минимум куски в нативных бинарях будут и бинарная совместимость мигом становится мифом.
>C/C++ этого обеспечить не могут.
Да и хрен с ним. Надо оно только проприетарным дубам с их тупыми проблемами. В случае опеносорса под целевую систему 1 хрен обычно компилячат не авторы проги а майнтайнеры и головняк - не у програмеров. Пусть проприетарщики с этим головняком и сношаются. Остается только вопрос: кому весь этот траходром с неплохой ценой нужен кроме них? Что-то проприетарь нынче не очень в почете. Скоро вообще ругательным словом станет, как символом вендор лок-инов и некачественного софта с которым вечно геморрой и выкрутка рук.
>Да, ещё прикладникам нужно решать ПРИКЛАДНЫЕ задачи, а не бороться
>с утечками памяти в системе.Да, а вот и живое подтверждение тому что некоторые дятлы всерьез полагают что думать за них будет машина в то время пока они (бездумно) работают, то бишь набивают как макаки унылый говнокод. Скажи, чувак, а откуда машина знает, когда тебе (как програмеру) перестанет требоваться в твоей проге некая сущность?Будь то аллокнутый буфер или новый объект?Правильно - ниоткуда. Поэтому сказки что в managed программах память не течет оставьте для детей. Она там очень даже течет, просто выглядит это по другому (ну не лобовая аллокация памяти так засирающие все тыщи объектов которые считаются используемыми, хотя на самом деле по логике вроде как нафиг не нужны, да только кто ж об этом знает кроме головы програмера, если он явно это не выразит в программе то?).Ну а гарбаж колектор еще и усложняет понимание этого факта простыми методами.
>А еще всякие там JNI и прочая. Без которых со скоростью совсем жопно, а с которыми - >
>простите, как минимум куски в нативных бинарях будут и бинарная совместимость мигом
>становится мифом.Переписать небольшой нативный кусок все же проще, чем переписывать всю программу.
Перекомпилировать правильно написанную нативную кроссплатформную программу всё же проще, чем переписывать куски нативных костылей для ненативного кода.
Если зажопивать сылцы не нужно, то и ява не нужна. Когда напишут компилятор байт-кода в нативный код и явамашина-прослойка станет не нужна, тогда ява (как ЯВУ) может и будет конкурентом сям.
> "Перекомпилировать правильно написанную нативную кроссплатформную программу всё же проще"В таком случае перекомпилировать правильно написанные нативные кроссплатформенные вставки еще проще. =)
>Переписать небольшой нативный кусок все же проще, чем переписывать всю программу.А нахрена что-то переписывать, пардон?Нормально написанную прогу достаточно просто перекомпилить под целевую платформу и ... все. Ах ну да, это ж жабисты, которые сперва придумывают вагон тупых проблем высосанных из пальца а потом лихо борятся с этими ветряными мельницами.
Ага, конечно. Просто перекомпилировать. Особенно те, что обращаются напрямую к железу. Флаг в руки просто перекомпилировать.
>Ага, конечно. Просто перекомпилировать. Особенно те, что обращаются напрямую к железу.Чувак, эпоха MS-DOS уже давно прошла! И бОльшая часть программ не суется напрямую к железу. Да, какие-то сильно некоторые платформо-специфичные программы работать не будут. А простите, зачем вам прошивалка bios для x86 или утиль для кручения параметров HDD с IDE интерфейсом на допустим платформе с ARM где нет ни IDE, ни BIOS в том виде как на х86?На сях не портабельно только то что никак не будет портабельно - специфика конкретной платформы (которая нафиг не сдалась на иных платформах по определению!:D).А сам по себе грамотный код - легко компилится и когда таргет это таракан с считанными кило памяти на борту и когда таргет - могучий шкаф набитый процами под завязку ;).Да, эффективный юзеж *всех* возможностей платформы может требовать каких-то добавочных знаний о ней и не быть портабельным. А как вы себе представляете допустим эмуляцию SPE у Cell на иной платформе? Программно можно, но смысла ноль - их числокрушильную мощу то не сэмулируешь...
>>"Машины должны работать, а люди — ДУМАТЬ." © кто-то из IBM
>
>Угу, вот только некоторые (особенно жабисты, дотнетчики и т.п. рапидный сброд) очень
>любят делать ровно наоборот. В итоге люди бездумно вкалывают на написании
>унылого говнокода а вот машины потом при его выполнении очень даже
>долго думают... имхо лучше б было наоборот, как IBM и предлагали.Есть обратный пример.
Та же Nokia реализовала интерпретатор Python для Symbian. А Python, как известно, тормознее Явы раз в пицот. :)))
Полагаю, товарисч имел в виду, что если далвик тупит, то интерфейсные приложений можно было хоть на бейсике делать. Он тоже кроссплатформенный.Жаба хороша при условии, что на ней пишется все. Ради этого можно стерпеть некоторые неудобства. А если все равно библиотеки на других языках линковать - скрипач не нужен.
Ну, тоже верно. Лучше бы JIT сделали или утилизовали хардварный ускоритель у процессора. Хотя, решение не делать JIT тоже понятно, ибо увеличивается потребление памяти. В общем, посмотрим, что у них получится. А так, чисто с потребительской точки зрения (правда, человека, не играющего в игры) производительность Андроида вполне достаточна для повседневных задач. Тот же Айфон, несмотря на нативные приложения, иногда бесит временем запуска приложений, особенно когда переключаешься между броузером и, например, IM.
Если еще годик-другой сопли пожуют, окажется проще ставить в телефоны 1-2 гигабайта памяти и "полноценную" жабу с джитом.
>Если еще годик-другой сопли пожуют, окажется проще ставить в телефоны 1-2 гигабайта
>памяти и "полноценную" жабу с джитом.Если через годик-другой чипсеты для мобильных телефонов будут это позволять делать за разумные деньги, то почему бы и нет? А пока приходится мириться с тем, что есть.
Кстати, у Гугля есть презентация, в которой они рассказывают, почему выбрали то или иное решение при разработке своей VM: http://sites.google.com/site/io/dalvik-vm-internals
Думаю, чтобы можно было создать сервис распространения ПО и не сильно заботиться об обратной совместимости... В идеале. А на практике, все как всегда.
ЛОЛ, может быть так переведено, но я тоже прочитал как "в Андроиде Java, на Java эмулятор C/C++", а значит велосипед
Блин, но почему нельзя было сразу это сделать, с первого релиза?
Неужели было не понятно, что open source сообщество - это не быдлокодеры а-ля яблочники, которые будут жрать все, что им дадут не поперхнувшись?
На самом деле, вот _это_ вместо жабы (не к, а вместо) и надо было сразу сделать.Виртуальные машины убили старые телефоны так, что на телефоне с процессором, примерно способным плохонько, но тянуть первый Quake еле шли простые аркады с элементарной логикой и графикой. А тут повторение истории...
> Неужели было не понятно, что open source сообщество - это не быдлокодеры а-ля яблочникиOpen Source под iPhone пишут - мама не горюй. Плюс ко всему, там с первого релиза внутри C, C++ и Objective-C. А вот Java - нету, слава Джобсу.
>Блин, но почему нельзя было сразу это сделать, с первого релиза?нафиг-нафиг, пусть лучше SDK пилят - плюсы под андроид нужны гораздо меньшему кол-ву людей.
С чего это? Для 95%, которые не знают чем C отличается от Java достаточно показать два приложения с высокими требованиями, написанными на обоих языках, рядом, после чего о java никто даже и не вспомнит. Обычные программисты будут писать нативные приложения, потому что ежу понятно, что они эффективнее. Остаются только упоротые фанатики - их можно не рассматривать, потому что такие никогда ничего не напишут. Попыток написать что-то стоящее на яве только ради того, чтобы показать, что это можно написать на яве, накопилось уже прилично. Разумеется до сих пор ничего юзабельного, зато лютого п--ца навалом.
Взять хотя бы 3D игрушки - вот пожалуй лучшее, что я видел http://tuer.sourceforge.net/screenshots/snapshot_3.png.
> Разумеется до сих пор ничего юзабельногоEclipse не юзабельный по вашему? Eclipse IDE для C/C++, PHP, Java.
Субъективно неюзабельный. Объективно вполне, но я нигде не говорил что на Java не написано ничего полезного. А вот дерьма навалом.
Quake 2 на java движке. =)
бенчмарк http://www.bytonic.de/html/benchmarks.html
скриншоты http://www.bytonic.de/html/screenshots.html
Бенчмарки и скриншоты это круто, но вот в дум и квак я могу поиграть на n8х0 с сносным FPS уже сегодня. А где оно для андроида вообще?Тем более что оно нуждается в нативных костыликах как я понимаю и к тому же рядом попадаются веселые коменты вида:
----------
JNI calls produce a considerable overhead and were the main bottleneck in our application.
----------Вывод? Да, черт возьми, удалять гланды через ж... автогеном - не самое простое занятие.
Поскольку лень ваять JIT, вот и решили, что проще выпустить среду для разработки костылей.
>С чего это? Для 95%, которые не знают чем C отличается от
>Java достаточно показать два приложения с высокими требованиями, написанными на обоих
>языках, рядом, после чего о java никто даже и не вспомнит.Что и наблюдается на десктопах например. Да и на таскабельных будет наблюдаться, с процом там все еще паршивее, ибо ограничения батарейки не дают молотить гигагерцами со всей дури.
> Что и наблюдается на десктопах например.На десктопах полноценная java бегает достаточно шустро. Но а с "таскабельными" девайсами согласен, дело обстоит неважно.
Так вот SDK толжен был быть изначально на C/C++, а к нему уже java биндинги для ублюдков. Хотя по хорошему их нужно в лицензионном порядке запретить, дабы не засирать платформу недокодом, но все равно ведь напишут... Короче новостям о айдроиде не место на опеннете.
>Так вот SDK толжен был быть изначально на C/C++, а к нему
>уже java биндинги для ублюдков.Это гугл :).Не телефонная компания, сами они ничего не производят - ну и терять им нечего.Вот и могут позволить себе страдать фигней.Ничего, нокия им ща быстро объяснит кто лидер рынка а кто страдает ерундой.Платформа для новых флагманов у них куда более вменяемая.И сделать вид что ее нет - не выйдет.Кстати wth?Вменяемую платформу на сях и плюсах сделали быстрее байды на яве?!Какой удар по самолюбию рапидных халтурщиков.Пока у них там что-то где-то может быть будет в черезпопном виде, нокия уже на грани начала продаж... ;)
Гугл вообще-то Firefox продвинул с нулевых позиций. Так что ему не привыкать тягаться с гигантами.
где док-во? сам эту ерись придумал?
>Гугл вообще-то Firefox продвинул с нулевых позиций. Так что ему не привыкать
>тягаться с гигантами.Хорошая у вас трава, забористая. И, кстати, скажите тогда - почему же гугл никак не может продвинуть свой хром? Может, дело в том что мозилла и гугл запартнерили когда оно уже было популярно? В общем перевирать историю и молиться на мегакорпорации (даже если они not evil) и приписывать им все заслуги - нехорошо.
>Так вот SDK толжен был быть изначально на C/C++, а к нему
>уже java биндинги для ублюдков. Хотя по хорошему их нужно в
>лицензионном порядке запретить, дабы не засирать платформу недокодом, но все равно
>ведь напишут... Короче новостям о айдроиде не место на опеннете.С++, вообще-то, странный язык. Его ниша слишком узка для системного программирования, а преимущества для написания приложений по сравнению с Java ну очень малы, а в некоторых приложениях даже ОПАСНЫ (я имею в виду всевозможные хаки и нарушение "песочницы").
Для системного есть си. В этом деле оно unbeatable. Ну а си++ неплох для геймдевов и навернутых больших приложений. При том на яве первое вообще выглядит как насмешка (только убогое и тормозное) а второе - тяжеловесно и имеет ряд пробле. В итоге тоже как-то не снискало особой популярности (если сравнить с общей массой софта, а не выдирать примеры "о, кто-то это оказывается юзает" под лупой).
>Для системного есть си. В этом деле оно unbeatable. Ну а си++
>неплох для геймдевов и навернутых больших приложений. При том на яве
>первое вообще выглядит как насмешка (только убогое и тормозное) а второе
>- тяжеловесно и имеет ряд пробле. В итоге тоже как-то не
>снискало особой популярности (если сравнить с общей массой софта, а не
>выдирать примеры "о, кто-то это оказывается юзает" под лупой).не знаете о чем говорите... я вот знаю примеры игр на j2me в которой вовсю используется СВОЙ объектно ориентированный язык и виртуальная машина (реализованные на том же j2me)... и работает все достаточно шустро... ТОРМОЗИТ ОТРИСОВКА, а не логика :)
т.е. все чушь... А делать на чистом С++ игры - головная боль...
> А делать на чистом С++ игры - головная боль...Делать игры само по себе головная боль. Геймеры вечно чем-то недовольны.
Вы не поверите, но игры и на чистом C пишут, если умеют ...
Как ни странно, факт. Пример - Quake :)
>не знаете о чем говорите... я вот знаю примеры игр на j2meЯ не знаю примеров j2me игр скорость работы которых и графика которых бы мне нравилась. 3D игры - вообще жуть, мазня из нескольких полигонов при считаных FPSах несмотря на экран размером с кошкину опу. Хотя на борту любого современного телефона железо мягко говоря не хуже того на чем то на котором бегал дум.Вот только игр уровня этого самого дума что-то на j2me не видно.
>в которой вовсю используется СВОЙ объектно ориентированный язык и виртуальная машина
>(реализованные на том же j2me)... и работает все достаточно шустро...У жабистов свои понятия о шустрости, судя по FPS в играх на яве.
> ТОРМОЗИТ ОТРИСОВКА, а не логика :)
Тогда какого ... она на той же железке при запуске программы на симбиане - не тормозит? И гамес в нативном коде - графика намного резвее и качесвеннее. И почему б это? Можете потому что имеючи больше horsepower'а можно позволить себе эффекты лучше? :)
А если вы такой крутой и считаете что логика не может тормозить - давайте вы логику транспорт тикуна например напишете под андроид (или там что еще, у мну есть большие сомнения что железки с j2me в принципе такое по ресурсам схарчат). А мы посмотрим как она у вас не будет тормозить на разлапистой карте с парой сотен vehicles у каждого игрока при куче игроков которые надо в реалтайме обсчитывать, AI и прочая? Все-таки какая-никакая физика (оно как бы при разгоне, повороте, подъеме и т.п. массу учитывает и прочее, невзирая на древность) и вообще куча параметров для каждого vehicle, AI не должен быть совсем дегенератом, ну и прочая. А теперь представьте что на все это дохлый ARM с парой сотен МГц. Если его еще в несколько раз тормознуть виртуалкой... ващет оно и на n8x0 с их 400 МГц весьма ощутимо нагружает проц, при том явно не отрисовкой а в основном AI логикой, обсчетом движения vehicle-ов и прочая :).
>т.е. все чушь... А делать на чистом С++ игры - головная боль...
Я уж не знаю у кого там что болит, но все серьезные конторы именно так их и делают, собссно.А старина Кармак вообще на сях вон какие движки забабахал.Ну и где на яве хоть 1 игра с графикой уровня Nexuiz например? :)
По поводу мобильных устройств и через какое жо у них реализуется j2me ничего не могу сказать. Но на sun-овской jdk для десктопов писать те же игры вполне можно. И квейки и думы будут не сильно уступать си. Другое дело проприетарщина, т.к. декомпилируются java так же замечательно, как и компилируется. А всякие обфускаторы только нагромождают код после чего тормознутость будет обеспечена.
А автору советую скачать http://www.bytonic.de/html/download.html и проверить на сколько тормозит java, нежели языком трепать.ps: а вы уверены, что сейчас в большинстве своем AI это чистый си, а не скриптовые языки?
>>не знаете о чем говорите... я вот знаю примеры игр на j2me
>
>Я не знаю примеров j2me игр скорость работы которых и графика которых
>бы мне нравилась. 3D игры - вообще жуть, мазня из нескольких
>полигонов при считаных FPSах несмотря на экран размером с кошкину опу.
>Хотя на борту любого современного телефона железо мягко говоря не хуже
>того на чем то на котором бегал дум.Вот только игр уровня
>этого самого дума что-то на j2me не видно.А ты JBenchmark3D запусти на своей овномобиле и удивись тому, что ты увидел.
http://www.jbenchmark.com/jb3dpr.jsp
Просто у тебя овномобила, скорее всего, не поддерживает JSR 184, поэтому все J2ME-игры тебе кажутся "жуть и мазня".
Дополнение к дополнению: T-Mobile USA начали процесс апдейта обычных телефонов 30 сентября: http://forums.t-mobile.com/tmbl/board/message?board.id=Andro....