Ada / C / ++ Distributed Applications

I am trying to evaluate some technologies for implementing the communication process between some Ada modules with some C ++ / OpenGL modules. There is an Ada application (Windows XP) that interacts with a C ++ application using COM, but I intend to switch COM to a new technology. Some suggestions have appeared, such as direct sockets, DSA, Polyorb, Corba and DSS / Opensplice.

  • DSA seems to be just Ada-implemented (not sure)
  • Polyorb has its latest implementation in 2006, according to http://polyorb.ow2.org/
  • Korba has argued that this may not be simple enough to justify its complexity for implementing simple applications.
  • DSS / Opensplice is just a C / C ++ implementation, so you need to bind Ada. It also does not look very simple to be implemented either.

Personally, I like COM, but because of the migration, I would prefer to use the socket option because of its simplicity, and the interface architecture could be implemented very easily.

So what do you think? Could you comment on these technologies or even offer more?

Many thanks.

+6
source share
4 answers

A big factor in your choice is the size and complexity of the system you are reengineering. Is it a widespread system with many complex messages? Is it a relatively small system with a handful of worldly messaging?

For small systems, I used only socket-based summary modules. Now, however, I am more inclined towards ZeroMQ (without intermediaries) or STOMP (based on text). And there is Ada support for them, zeromq-Ada and TOMI_4_Ada (supports both).

As long as they process the distribution mechanism, you still have to process the serialization of messages in portable form.

CORBA / PolyORB and DDS solutions are quite heavy, but they are complete solutions. If you are not afraid of IDLs and broker managers, they can do well for large-scale distributed systems. Yes, some Ada bindings might need to be created, but if you can get the C headers or C APIs for the binding, this is usually not so bad if you focus only on the binding of the functions and data structures that you need. Instead of creating a comprehensive binding, use visually and opaque pointers ( void_ptr , opaque_structure_def_ptr ) for structures and parameters whose contents you are not interested in.

+4
source

we intend to switch COM to a new (supported) technology because COM is no longer supported by Microsoft

Anyone who told you that COM is no longer supported completely disagrees.

While COM has undergone many name changes (OLE, COM, OLE Automation, DCOM, COM +, ActiveX, WinRT) and extensions over the past decades, this is the most important technology for MS platforms: past, present and future. The .NET runtime makes extensive use of COM . Most of the Win32 API is written in COM, and parts that were not will be in Win8, since WinRT components are COM objects .

+3
source

Also check out AMQP ( RabbitMQ for the server), it seems the Ada library is available for it http://www.gti-ia.upv.es/sma/tools/AdaBinding/index.php .

If you can find a binding for Ada, Apache Thrift can also be an easy option. Maybe you can even write your own binding, it shouldn't be harder to copy something on sockets.

If you are making a socket route, I suggest ZeroMQ as "supersockets".

+2
source

Another option for your list should be to use Ada distributed programming support and write C / C ++ wrappers to interact with your C ++ program.

I do not know what is the best option for your needs, but if your Ada compiler supports application E, it should be on the list.

+1
source

Source: https://habr.com/ru/post/899717/


All Articles