Мобильный - Кодовое имя - Как это может быть быстрее, чем родной язык?

1

Контекст:

Начиная писать мобильное приложение для Android и ios.

Глядя на множество альтернатив. Не выдерживает html5/webview. В большинстве случаев это вяло. Я пробовал много демонстрационных приложений (phonegap/steroid..) и не чувствовал себя как дома. Не достаточно гладко.

Больше, некоторые игры идут: так никак. Я хочу развитие NATIVE.

Сам по себе объективный-c не является проблемой. Но если я могу создать приложение только с одной разработкой, с языком, который легко кодировать в (java), это звучит неплохо.

Вопрос:

CodenameOne заявляет о большей производительности, чем объектив-c, через java vm.

Возможно, они используют C api, но этот api в основном obj-c теперь.

Могут ли некоторые разработчики или даже разработчики сказать мне, действительно ли мне не нужно вводить код на родном языке iOS (obj-c) и получать лучшие результаты через java vm? мне кажется странным.

  • 0
    Кодовое имя одной виртуальной машины iOS переводится как C, а не Objective-C. Уровень портирования состоит из Objective-C и C, но мы стараемся уменьшить количество Objective-C для производительности. Фактически, одна из самых больших проблем с производительностью, которую мы имеем в нашей новой виртуальной машине, - это фрагмент кода Objective-C в разделе кодирования символов ... (к вашему сведению, я написал большую часть кода в нашей новой виртуальной машине)
  • 0
    @ShaiAlmog: хорошо, вы делаете то, что я имел в виду, чтобы избежать obj-c. Это отличный Шай :)
Теги:
mobile
native

2 ответа

1
Лучший ответ

Цитата прямо со страницы, с которой вы связались:

Небольшой отказ от ответственности заключается в том, что тест Objective-C немного тяжел в вызовах метода/сообщения, которые уклоняются от эталона в нашу пользу. Вызов метода в Codename Один, естественно, намного быстрее, чем эквивалентный код Objective-C из-за семантики этого языка.

Разве это не объясняет, что именно вы спросили? Objective-C имеет архитектуру, из-за которой динамическая диспетчеризация не может быть оптимизирована, тогда как архитектура Java допускает такие вещи, как мономорфный сайт вызова и даже полный метод вложения. Тест, который в значительной степени фокусируется именно на этом аспекте, будет искажать результаты в пользу JVM, но на производительность реальных приложений почти никогда не доминируют затраты на отправку методов.

  • 0
    Благодарю. Я прочитал (и понял) это предложение :) Но как мог цель-c в дизайне Apple не быть настолько оптимизированной? в этом случае зачем вообще беспокоиться о кодировании в нативной цели c, если некоторые другие языки могут превзойти исходный язык, который должен быть оптимизирован на платформе?
  • 0
    Вы решили сосредоточиться на неправильных аспектах: Apple не видела необходимости оптимизировать Objective-C способами, которые не имеют отношения к производительности приложений. Вы хотите потрудиться над кодированием на родном языке, чтобы получить хорошую производительность от своего приложения , а не отобранных отдельно тестов, потому что он использует один узкий механизм, именно тот, который альтернативная платформа оптимизирует лучше.
Показать ещё 7 комментариев
1

Я ничего не знаю о CodenameOne, но об общем поведении Java-VM.
Обычно Java-программам требуется больше времени для запуска, из-за того, что промежуточный код байта Java должен быть скомпилирован перед выполнением. Однако во время исполнения виртуальная машина, однако, может выполнять оптимизацию времени выполнения, например, переупорядочивать кодовые блоки, чтобы лучше использовать кэширование CPU и т.д....
Поскольку виртуальная машина может выполнить этот шаг во время выполнения и, таким образом, обладает знаниями, статический компилятор не имеет возможности реально опережать даже оптимизированный код C в разы.
Более старый пример тестов реального мира, сравнивающих C и Java, можно найти для Jake2 (Quake2 портирован на Java).

  • 0
    Syren, этот тест ничего не показывает. У нас даже нет компилятора, версии и используемых флагов. "march = native" и профиль очень полезны, но не являются автоматическими, хотя здесь нет никакой языковой борьбы, но если java неизменно лучше, чем c, то запустите кодер c, он недостаточно знает язык / оптимизации.
  • 0
    Я не ищу языковой бой. Я имел в виду часть о «У некоторых УБС или даже создатели могут сказать мне , если я действительно не должны кода в родной IOS языка (Obj-C) и получить лучшие результаты с помощью виртуальной машины Java? Кажется странным я . " Это не всегда странно. У виртуальной машины есть информация, которой нет у статического компилятора, и она может работать быстрее.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню