This is a general “noob” software development issue, so I apologize if this seems vague, but I would really appreciate some advice. Please note that the system described below is just an example, not a specific product, which I mean.
I often have to combine the functionality of several libraries or utilities written in different languages. For example, if I want to encode a high-performance sound processing application for the desktop, I will write it in C / C ++. Then I want to add a beautiful graphical interface. But I do not want to learn Qt. I like the look of Adobe Air and I would like to use this. Later I need to access a USB device. But in the USB library, I only have a Java API. How can I combine all these elements together to take advantage of their relative strengths?
It is clear that I cannot compile these various elements into a single executable file. Therefore, I need to create and run them separately and give them a means of communication. The most common way to do this seems to use IPC (Inter Process Communication), such as shared memory or sockets. I prefer the idea of sockets, as programs can potentially run on separate machines on the network.
Therefore, I decided to create a local client-server system with a user API so that these elements can communicate. For example, an Air application will receive a message from Application C, informing it of an update to its user interface. A Java-powered USB application will use sockets to stream audio from a USB device to C.
My question is: does local sockets use the typical way to create such a system in this way? Will the performance be much worse than a truly native application (for example, everything in Java or C, in one executable file)? It also seems likely that this approach will be error prone and difficult to maintain?
I often encounter the limitations of existing software libraries (for example, a graphics library with a nice flexible interface, but do not have access to low-level equipment or a media library that can mix many audio streams, but does not have video playback support), and finding it is very disappointing. If anyone could advise a better way to combine software libraries like this, I would really appreciate it.
Thanks in advance!