Using IPC to Combine Multiple Languages

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!

+5
2

, . , . :

  • (, JNI/JNA) - , , , . .
  • IPC (XML, JSON ..) - , , , , . ..
  • IPC (, Google) - , , , .
  • 3- (, , , ) - , , .

, /, . - , Adobe Air, , C/++.

, . . / "". . . . - , . / ..

:

  • , , - . (?) - - , , , - , .
  • , /

JVM-, Java, Scala Clojure, JVM , , / ( ). , JVM, , " ", , JVM, :

  • / / , , , , C/++
  • -, , , JavaScript ( , / JavaScript, JVM, , Vaadin ClojureScript)
+4

, , .

, :

  • , /

  • / ( :))

:  // , .  CORBA - .  Google protobuf - /

/, . java:

  • JNI - Java - (dlls/so) JVM.
  • JCA - - .

, , - , Pascal, DLL C.

, Java, , , Java, jvm. , , . , Scala, Groovy, Closure, Jython .., .

, ​​ - Web Services. , . , XML/JSON /. XML, JSON , XML , ++, JAVA.

,

+2
source

All Articles