Me he enamorado de la programación basada en componentes (ya sea con COM, otro sistema o simplemente usando el paradigma en C++). Requiere un poco de tiempo acostumbrarse, si uno se usa habitualmente para el modelo OOP "tradicional", pero definitivamente vale la pena. Ha hecho que mi código sea más fácil de mantener y más fácil de extender.Alternativa multiplataforma a COM
El proyecto en el que estoy trabajando actualmente usa el paradigma, pero no establece un sistema. Sin embargo, realmente me gustaría encontrar algún tipo de sistema que pueda usar con los siguientes requisitos. Cambiar de lo que tengo ahora a un nuevo sistema tomaría un poco de tiempo, pero ahorraría un múltiplo de ese tiempo más tarde.
Los requisitos:
- multiplataforma
- rápido
- funciona bien con C++
- Soporta entre procesos de clasificación
Permítanme desarrollar en esos requisitos:
multiplataforma
Básicamente, lo necesito para trabajar en Windows y Mac. Linux sería bueno, pero no es de ninguna manera esencial. Además, realmente necesita cumplir los otros requisitos para todas las plataformas. Hay un COM para Mac, que sería ideal pero no es compatible con el requisito 4. Además, debe ser compatible tanto con GCC como con MSVC.
rápido
Aquí es donde CORBA lamentablemente pierde, a pesar de que cumple con los otros tres requisitos. Las llamadas a métodos en proceso deben ser lo más rápidas posible (idealmente, como COM), ya que algunas de las rutinas también pueden ser llamadas desde una interrupción de audio.
funciona bien con C++
... Creo que éste es sobre todo evidente. No me importa no utilizar clases de C++ para implementar componentes, aunque eso definitivamente sería útil, y la alternativa debe ser fácil de usar, especialmente dado que con el tiempo tengo la intención de lanzar una API para extensiones de terceros.
Soporta cruzada proceso de cálculo de referencias
Con esto quiero decir, al menos, ser capaz de serializar las llamadas. Si esto se hace a través del código generado desde un IDL, eso está perfectamente bien conmigo, y tampoco me importa implementar la comunicación de proceso cruzado en sí.
COM sería genial, pero no cumple el requisito 1 por completo. CORBA también sería genial, pero no cumple con el requisito 2 (incluso con el ORB más rápido disponible). Es posible que XPCOM no cumpla con el requisito 2 y que no funcione con MSVC, por lo que no cumple con el requisito 1.
¿Alguna idea de qué más hay disponible? Mi próximo paso sería hacer mi propio uso de protobufs o algo similar, pero por supuesto me gustaría evitar eso.
actualización
Elaborar - una interrupción de audio en este contexto puede ser tan bajo como 2-3ms. Ese tiempo ni siquiera está disponible en mi totalidad, ya que otros componentes necesitan procesarse en ese momento, y mi propio software está envolviendo otra pieza de software que necesita procesar en ese momento. Esta es la razón por la cual tanto la clasificación en proceso como la del proceso cruzado deben ser extremadamente rápidas.
XPCOM debería funcionar con MSVC, AFAIK. Además, si no es así, ¿no podrías usar MinGW? – Zifre
Podría usar MinGW, pero por mi parte, toda mi cadena de herramientas está integrada con MSVC, y aunque puedo integrar MinGW en eso también, no puedo usar el maravilloso depurador en MSVC. – arke
Creo que si construyes esto ganarás mucho dinero. En proceso, fuera de proceso, pc, mac, linux, increíblemente rápido. Mucho dinero. :) –