Esta es una pregunta general "novato" sobre el diseño de software, por lo que me disculpo si parece vago, pero realmente agradecería el consejo. Tenga en cuenta que el sistema descrito a continuación es solo un ejemplo, no un producto específico que tengo en mente.Uso de IPC para combinar varios idiomas
A menudo tengo la necesidad de combinar la funcionalidad de varias bibliotecas o utilidades, escritas en diferentes idiomas. Por ejemplo, si deseo codificar una aplicación de procesamiento de audio de alto rendimiento para el escritorio, la escribiré en C/C++. Entonces, quiero agregar una buena GUI. Pero no quiero aprender Qt. Me gusta la apariencia de Adobe Air y me gustaría usar eso. Más tarde, tengo la necesidad de acceder a un dispositivo USB. Pero la biblioteca USB solo tengo una API en Java. ¿Cómo puedo combinar todos estos elementos para aprovechar sus puntos fuertes relativos?
Claramente, no puedo compilar estos diversos elementos en un único ejecutable. Entonces necesito crearlos y ejecutarlos por separado, y darles un medio para comunicarse. La forma más común de hacer esto parece ser el uso de IPC (Inter Process Communication), por ejemplo, memoria compartida o zócalos. Prefiero la idea de los sockets, ya que los programas podrían ejecutarse en máquinas separadas en una red.
Así que decido crear un sistema cliente/servidor local, con una API personalizada, para permitir que estos elementos se comuniquen. Por ejemplo, la aplicación Air recibirá un mensaje de la aplicación C, diciéndole que actualice su interfaz de usuario. La aplicación USB que se ejecuta en Java usará los sockets para transmitir audio desde el hardware USB a la aplicación C.
Mi pregunta: ¿está utilizando enchufes locales de esta manera una manera típica de diseñar un sistema así? ¿El rendimiento será mucho peor que el de una aplicación verdaderamente nativa (por ejemplo, todo en Java o C, en un único ejecutable)? También parece probable que ese enfoque sea propenso a errores y difícil de mantener.
Con frecuencia me encuentro frente a los límites de las bibliotecas de software existentes (por ejemplo, una biblioteca de gráficos con una interfaz de usuario bonita y flexible pero sin acceso a hardware de bajo nivel o una biblioteca multimedia que puede mezclar muchas transmisiones de audio, no tiene soporte para la reproducción de videos), y lo encuentro muy frustrante. Si alguien pudiera aconsejar la mejor manera de combinar bibliotecas de software arbitrarias como esta, realmente lo agradecería.
¡Gracias de antemano!
Ambas buenas respuestas, pero esta es eas más para entender Como gran parte de mi trabajo requiere C/C++, creo que puede ser seguro apostar por Qt como mi "plataforma". – darasan