There's a lot here.  I'll try to hit a couple of key points.

First off, while it would be awesome (in my opinion) to have active C++
developers on the project to maintain activemq-cpp (or a replacement),
there is a process to becoming a committer that is important to follow.  I
wanted to mention this so there are no broken expectations.

Looking at AMQCPP-628 <https://issues.apache.org/jira/browse/AMQCPP-628>,
yeah - I get it.  After offering some effort and the ticket gets closed
with "won't fix" and no comments - that's discouraging.  I can't speak for
Tim Bish and why he handled the ticket that way.  I will point out he was
the key maintainer of activemq-cpp and we don't have another maintainer
taking up the slack now that he is off to greener pastures.

On the technical front, there are things to consider/digest here:

   - The activemq-cpp library contains a full implementation of the JMS
   client for C++, including the OpenWire implementation and JMS constructs
   (connection factory, etc).
   - There may be additional features there - I would need to go refresh my
   memory (e.g. thinking of failover transport, protocols besides openwire,
   and activemq-specific controls/features like individual message ack).
   - It's unclear to me, and I suspect most of the PMC, just how much
   activemq-cpp is used across the community.
   - Technically, any library that implements one of the several protocols
   supported by ActiveMQ classic and/or Artemis could be used by C++
   applications to work with those brokers.
   - A replacement for the existing library could be a viable alternative
   to fixing the existing one.
      - Of course, anyone is free to develop one.
      - If one were implemented and offered as a contribution to the Apache
      ActiveMQ project (with the appropriate licensing and copyrights), we can
      consider to accept it.
      - The same concerns with maintenance would be an important
      consideration.
      - Are there other languages to consider here? (rust?)
   - Since C++ compilers are quite varied, and at Apache, the source code
   is the deliverable, this also raises the question of which target
   environment(s) (O/S, compiler, ...) we use internally, and which we ensure
   are able to build the project (one of many things I don't miss after moving
   over to the Java world).

That takes me to the question, "how do we move forward from here?"  Here
are some of my thoughts:

   - I am willing to put some effort on building and testing activemq-cpp.
   Note though that my time is limited and it's been a long time since I was a
   full-time C++ developer (hence the original topic of this thread - have
   even considered using ctags).
   - I can also dig around to see what features/functions are included in
   that project.
   - It would be extremely helpful (if feasible) to hear from members of
   the community on their uses of the project, and what they need and care
   about.
   - We can revisit the Jira tickets - I believe they are AMQCPP-664/628,
   AMQCPP-718

That's the dissertation.  I hope we can perhaps tackle this in more
bite-size pieces.

Art



On Thu, Feb 13, 2025 at 12:46 PM Arjun Ray <ara...@gmail.com> wrote:

> On Thu, 13 Feb 2025 11:20:22 -0600, Justin Bertram
> <jbert...@apache.org> wrote:
>
> | Rather than forking I think it would potentially make more sense for
> | you to become a committer here at Apache.
>
> I have no idea what I would be signing up for!  Are there links
> explaining the role (capabilities, responsibilities, etc)?  Thanks!
>
> | Then updates could take place in stages. I think the first step
> | would just involve getting things working on C++17.
>
> Getting it to compile on C++17 is basically a solved problem: needing
> only two JIRAs to be acted upon. (AMQCPP-664/628, AMQCPP-718).
>
> However, that leaves 196 warnings. The vast majority of these are easy
> to fix (arising from lack of attention to the Rule of Three - now the
> Rule of Five.)  Some warnings are potentially serious (such as some
> apparently 32-bit specific hacks that could become bugs in a 64-bit
> build.)
>
> | Larger changes would come later. Changes to the public API would
> | require a new major version.
>
> I would focus on internal changes - where there's _plenty_ to be done.
>
> The public API is a separate issue, but probably worthy of discussion.
> The basic point here is why a C++ API at all?  Heavyweights in the MOM
> space (I have Tibco EMS and Solace in mind) offer C APIs to equivalent
> functionality.  There is a very important reason for this which, I'm
> sorry to say, would likely be lost on the average Java or
> Java-influenced person: C++ _strongly_ prefers stack based allocation.
> Even in the C++ world, libraries that have objects maintaining
> internal state often expose them via opaque pointers and external
> functions (with _both_ createXXX(...) and destroyXXX(...) calls.)
> Tibco EMS and Solace do precisely that.  Writing wrapper classes in
> C++ to control lifetimes is then trivial.  There is _no particular
> benefit_ to exposing ActiveMQ objects as C++ pointers.  Tibco EMS is a
> fairly faithful translation of the JMS API; there's no reason this
> can't be done here as well - with an optional compatibility layer
> added on top for those already relying on the C++ API.
>
> | Given this, it's not clear to me that continued investment in CMS
> | (and the C++ implementation) makes sense. Clearly the folks that
> | originally championed this stuff have moved on to other things.
>
> Microsoft still maintains a modicum of MS-DOS comaptibility!   Keeping
> tried and true software up to snuff - basically ensuring that source
> code can still be compiled safely - is never a truly wasted effort as
> long as there are users of it.  But I'm well aware that most
> programmers would much rather be working on Brand New Stuff (TM) :-)
>
> | I'm curious if you've tried (or considered trying) the Qpid Proton
> | C++ client [1].
>
> I looked into it briefly some years ago.  What I saw then was hair
> raising.  I'll have to look into it again, though my initial
> impression (from the Tutorial link) wasn't inspiring: it looks
> over-engineered.
>
> Simplicity is the watchword in a number of MOM-based applications. I
> chose ActiveMQ for a project because of some desirable features in the
> server.  The C++ client was an albatross, to put it unkindly.  It
> worked robustly, but I had to treat it like a black box - 15+ minutes
> to compile once and use the binary in the project source. The memory
> footprint was kind of large as well.  As an experiment, I got the same
> bangs for a much smaller buck AFAICT with a bare-bones implementation
> of STOMP[*].  Beware over-engineering!
>
> Arjun
>
> [*] https://github.com/arayq2/utility/tree/master/Stomp
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@activemq.apache.org
> For additional commands, e-mail: dev-h...@activemq.apache.org
> For further information, visit: https://activemq.apache.org/contact
>
>
>

Reply via email to