Привет, ребята, кто-нибудь знает, почему язык программирования C++ используется более широко в биометрических приложениях безопасности по сравнению с языком программирования Java? Ответы, которые я собрал до сих пор: 1) Виртуальные компиляторы 2) Библиотека OpenCV, предоставляемая C++. Может ли кто-нибудь помочь с этим вопросом?Простая теория программирования Вопрос
ответ
Я не знаю конкретно о биометрических приложениях, но в целом, когда важна безопасность, Java может стать камнем преткновения. В зависимости от того, как написаны требования безопасности, они могут охватывать те вещи, которые нужно делать вручную на C++, но которые автоматически выполняются Java. Это создает проблему, потому что нужно будет продемонстрировать, что Java должным образом (и своевременно!) Удовлетворяет этому требованию. Гораздо проще показать, что эти требования удовлетворяются в коде C++, потому что код, соответствующий требованиям, является частью рассматриваемой программы.
Если лицо безопасности/требования/клиент ясно заявляют, что использование некоторых функций безопасности приемлемо для Java, то это не имеет большого значения. Мы могли бы обойти вокруг того, разумно ли полагаться на/доверять Java для удовлетворения требований безопасности, это действительно зависит от конкретных потребностей безопасности.
Но существуют ли разные функции для использования на C++ вместо Java? – SnipeTechie
Я не могу придумать ничего, что C++ «автоматически», которое вам нужно было бы передать в Java. Я думаю, что если бы что-то подобное существовало, оно было бы включено в следующий выпуск Java. (Как и шаблоны/generics/whatever-java-calls-them.) – SoapBox
Я думаю, что @SoapTechie говорит о требованиях сертификации/аудита безопасности, а не о безопасности. –
Возможно, это аппаратная поддержка: я написал приложение, которое использует датчик отпечатков пальцев. Поддержка библиотеки для устройства - C++, поэтому я написал приложение на C++. Теперь у них есть версия .NET, поэтому моим следующим приложением будет C#.
Я готов положить деньги по причине просто потому, что доступ api для аппаратного обеспечения написан на C++. Большинство современных языков/языков более высокого уровня не будут легко связываться с аппаратными средствами, которые могут быть представлены через C/C++ api.
В некотором отношении примечание Vala имеет все языки, которые ожидаются от современного языка высокого уровня (а затем и некоторых), но компилируется в бинарный и исходный код C и может легко использовать любую библиотеку, написанную на C (не уверен о C++). Проверьте это, я не использовал его много, но его довольно круто.
Реализация библиотеки на C++ обеспечивает многое по java. После написания библиотека C++ может работать практически на любой платформе (включая встроенные) и может быть доступна как собственный импорт на различные языки с помощью таких инструментов, как SWIG. Java может работать только с чем-то с достаточной скоростью и памятью для запуска JVM, и только другие программы Java могут включать код как собственный импорт. Для биометрических приложений, особенно, я думаю, что работа на встроенных системах будет большой проблемой, поскольку вы можете построить это в небольшом датчике.
Чем больше glib ответ будет никто не хочет ждать, пока ваш цикл сбора мусора запустит фрегат.
Оригинальная идея Java должна была запускаться на встроенных системах, поэтому приложения Java работают с KVM, только вопрос о поддержке этого устройства для Java или нет. Хотя java-код выполняется в контролируемой среде, в конце концов даже этот код запускается как машинный код низкого уровня, равный коду, написанному на C (только что контролируемому до выполнения). JVM для небольших устройств не берет на себя такие ресурсы, как его версия для ПК. –
Вы можете заменить Java на любой другой язык там. Вероятно, это больше связано с API и аппаратным обеспечением.
Кроме того, Java больше подходит для веб-приложений. Это не лучший выбор для настольных приложений.
Java не подходит для веб-приложений. Когда клиент приносит JVM в память для запуска веб-приложения, это SLOW, потому что JVM довольно тяжеловес - вот почему так мало людей делают это больше. Java подходит для настольных приложений, особенно если вы многоплатформенны. –
Я говорил о сервлетах! как это не подходит для веб-приложений !? – medopal
В банке, где я разрабатываю приложения для Java-приложений, у нас есть более 100 компьютеров различной конфигурации (CPU, memory, mbo, OS ..), на которых люди работают без проблем. Правда, наше приложение для java swing занимает около 100 МБ оперативной памяти, поэтому компьютеры с 256 МБ оперативной памяти близки к полной нагрузке, но все работает нормально даже на них ... –
Для некоторых биометрических приложений скорость выполнения имеет решающее значение.
Например, предположим, что вы выполняете распознавание лица для контрольной точки, а Java занимает в два раза больше времени для запуска алгоритма, который делает скомпилированный язык, такой как C++.Это означает, что если вы идете с Java, либо:
- блокпосту линии будет в два раза длиннее,
- Вы должны будете заплатить сотрудникам вдвое больше контрольно-пропускных пунктов, или
- Ваша система будет делать половину как хорошая работа при распознавании лиц
Ни один из них обычно не является приемлемым вариантом, что делает использование Java не стартером.
Я думаю, что вы здесь не правы с вашим отношением. Как раз вовремя скомпилированный код (например, Java) может работать быстрее, чем скомпилированный код с одним выстрелом (C++), поскольку он корректирует процессор и ситуацию, которые невозможно предсказать при компиляции кода на C++. Я уверен, что написанное Java-приложение могло бы распознавать лица быстрее, чем эквивалент C++, поскольку он делает больше для оптимизации. –
Заявление, в то время как оно верно в целом, не относится к таким встроенным системам, где ЦП известен и исправлен. В таких случаях C++ может использовать профилированную оптимизацию: компиляцию, профиль, компиляцию снова. Это означает, что оптимизация точно подходит для вашей комбинации CPU/program и выполняется до того, как запрограммированное будет сжечь до ROM. – MSalters
Мой гипотетический пример основан на опыте бенчмаркинга сложных вычислительных задач, таких как двумерные и трехмерные графические алгоритмы, распознавание лиц и распознавание отпечатков - это особые случаи. Результат состоит в том, что для того же алгоритма тщательно написанный C/C++ выполняется быстрее, чем Java на одном CPU. Возможно, недавние изменения времени в Java меняют это, и мне очень хотелось бы получить эмпирические результаты, демонстрирующие это. Но перед лицом доказательств ничье отношение или убеждение не имеют отношения к делу. –
Запуск в виртуальной машине (например, JVM) вводит другую потенциальную точку атаки. –
Имеют ли приложения для биометрической защиты требования к программированию в реальном времени? – mattjames
@Anon: Как ????? –