2010-01-21 12 views
2

Salut les gars, est-ce que quelqu'un sait pourquoi le langage de programmation C++ est utilisé plus largement dans les applications de sécurité biométrique par rapport au langage de programmation Java? Les réponses que j'ai recueillies jusqu'ici sont 1) Compilateurs virtuels 2) Bibliothèque OpenCV fournie par C++. Quelqu'un peut-il aider avec cette question ??Théorie de la programmation simple Question

+2

L'exécution dans une VM (comme, par exemple, la JVM) introduit un autre point d'attaque potentiel. –

+0

Les applications de sécurité biométrique ont-elles des exigences de programmation en temps réel? – mattjames

+8

@Anon: Comment ????? –

Répondre

2

Je ne connais pas spécifiquement les applications biométriques, mais en général, lorsque la sécurité est importante, Java peut être une pierre d'achoppement. Selon la façon dont les exigences de sécurité sont écrites, elles peuvent couvrir des choses que l'on doit faire manuellement en C++, mais qui sont faites automatiquement par Java. Cela pose un problème car il faudrait démontrer que Java correctement (et en temps opportun!) Satisfait à l'exigence. Il est beaucoup plus facile de montrer que ces exigences sont respectées dans le code C++, car le code correspondant à l'exigence fait partie du programme en question. Si la personne/les exigences/le client de sécurité indiquent clairement que l'utilisation de Java pour certaines fonctions de sécurité est acceptable, cela n'est pas grave. Nous pourrions faire un tour de table pour savoir s'il est raisonnable ou non de faire confiance à/Java pour satisfaire aux exigences de sécurité, cela dépend uniquement des besoins de sécurité spécifiques.

+0

Mais y a-t-il des fonctionnalités distinctes pour faire confiance à C++ au lieu de Java? – SnipeTechie

+1

Je ne peux pas penser à tout ce que C++ fait "automatiquement" que vous auriez à coder manuellement en Java. Je pense que si quelque chose comme ça existait, il serait inclus dans la prochaine version de Java. (Comme templates/generic/whatever-java-calls-them.) – SoapBox

+0

Je pense que @SoapTechie parle d'exigences de certification/audit de sécurité plutôt que de sécurité en soi. –

6

Peut-être que c'est le support matériel: j'ai écrit une application qui utilise un capteur d'empreintes digitales. Le support de la bibliothèque pour le périphérique est C++, j'ai donc écrit l'application en C++. Maintenant, ils ont une version .NET, donc ma prochaine application sera C#.

1

Je suis prêt à mettre de l'argent sur la raison étant simplement que les api d'accès pour le matériel sont écrits en C++. La plupart des langages modernes/de plus haut niveau ne vont pas communiquer facilement avec du matériel originalement exposé via une API C/C++. Sur une note quelque peu connexe, Vala possède toutes les fonctionnalités langagières attendues d'un langage moderne de haut niveau (et puis certains), mais compile en C binaire et source, et peut facilement utiliser n'importe quelle bibliothèque écrite en C (pas sûr de C++). Jetez un coup d'œil, je n'ai pas beaucoup utilisé, mais c'est plutôt cool.

1

L'implémentation d'une bibliothèque en C++ fournit beaucoup sur Java. Une fois écrite, la bibliothèque C++ peut fonctionner sur presque toutes les plates-formes (y compris celles intégrées), et peut être mise à disposition en tant qu'importation native vers une variété d'autres langues à l'aide d'outils tels que SWIG. Java ne peut s'exécuter que sur une machine disposant de suffisamment de vitesse et de mémoire pour exécuter une machine virtuelle Java, et les seuls autres programmes Java peuvent inclure le code en tant qu'importation native. Pour les applications biométriques en particulier, je pense que le fonctionnement sur des systèmes embarqués serait une grande préoccupation, car vous pourriez en faire un petit capteur. La réponse la plus glib serait que personne ne veut attendre que votre cycle de collecte des ordures lance les missiles friggen.

+0

L'idée originale de Java était de fonctionner sur des systèmes embarqués, donc les applications Java s'exécutent là avec KVM, c'est seulement la question que cet appareil supporte pour Java ou pas. Bien que le code java soit exécuté dans un environnement contrôlé, à la fin, même ce code est exécuté comme un code machine de bas niveau égal au code écrit en C (contrôlé juste avant l'exécution). JVM pour les petits appareils ne prend pas sur les ressources comme sa version PC .. –

0

Vous pouvez remplacer Java par n'importe quelle autre langue. Probablement, il a plus à voir avec les API et le matériel.

En outre, Java est plus adapté aux applications Web. Ce n'est pas le meilleur choix pour les applications de bureau.

+1

Java n'est pas vraiment adapté aux applications web. Le fait que le client mette la JVM en mémoire pour exécuter une application Web est lent car la JVM est assez lourde - c'est pourquoi si peu de gens le font maintenant. Java est OK pour les applications de bureau, surtout si vous êtes multi-plateforme. –

+0

Je parlais de Servlets! comment cela ne convient-il pas aux applications web? – medopal

+0

dans la banque où je développe des applications de bureau de Java, nous avons plus de 100 ordinateurs d'installation différente (CPU, mémoire, mbo, OS ..) sur lequel les gens travaillent sans problèmes. Certes, notre application java swing prend environ 100mb de RAM, donc les ordinateurs avec 256 Mo de RAM sont presque à pleine charge, mais tout fonctionne bien même sur eux ... –

0

Pour certaines applications biométriques, la vitesse d'exécution est cruciale. Par exemple, supposons que vous effectuez une reconnaissance faciale pour un point de contrôle, et Java prend deux fois le temps d'exécuter l'algorithme qu'un langage compilé comme le C++ fait.Cela signifie que si vous allez avec Java, soit:

  • Les lignes de point de contrôle seront deux fois plus longtemps,
  • Vous aurez à payer au personnel deux fois plus de points de contrôle, ou
  • Votre système fera la moitié comme un bon travail à reconnaître les visages

Aucune de ces options sont généralement acceptables, ce qui rend l'utilisation de Java un non-démarreur.

+0

Je pense que vous vous trompez ici avec votre attitude. Le code compilé juste à temps (comme Java) peut s'exécuter plus rapidement que le code compilé en un coup (C++), puisqu'il s'adapte au CPU et à la situation qui ne peut être prédite lors de la compilation du code C++. Je crois que l'application Java bien écrite pourrait faire face à la reconnaissance plus rapide que l'équivalent C++ car elle fait plus sur les optimisations. –

+0

L'instruction, bien qu'elle soit vraie en général, ne s'applique pas à de tels systèmes embarqués où la CPU est connue et fixée. Dans ces cas, C++ peut utiliser Profile Guided Optimization: compiler, profiler, recompiler. Cela signifie que les optimisations sont parfaitement adaptées à votre combinaison CPU/programme et effectuées avant que le programme programmé ne soit gravé sur ROM. – MSalters

+0

Mon exemple hypothétique est basé sur l'expérience dans l'analyse comparative de tâches à forte intensité de calcul telles que les algorithmes graphiques 2D et 3D, dont la reconnaissance faciale et d'empreintes digitales sont des cas particuliers. Le résultat a toujours été que, pour le même algorithme, C/C++ soigneusement écrit s'exécute plus vite que Java sur le même CPU. Peut-être que les temps d'exécution Java récents changent cela, et je serais très intéressé par les résultats empiriques le démontrant. Mais face à la preuve, l'attitude ou la croyance de quelqu'un n'est pas pertinente. –