Hi Anatoly,
Thanks for this very welcome post to the list, which is intended for open discussion of modular project assembly - it is certainly not a 'component-only' list!
Overall I think mount looks very promising, and I really like the name. (I like the analogy of the Unix filesystem for composing applications)
Personally, I'm not 100% sold on component, but I did think it had significant advantages over Jig (my previous effort at tools.namespace integration) so I moved various projects over to it. I've been broadly content with component since then, but there's always scope for continued innovation. It's weird what the simple passage of time does to a library!
For me, the value of component is all of the following :-
1. tools.namespace integration
2. start/stop (especially useful for network services that don't behave well without orderly shutdown)
3. the whole system available from the repl - you can create convenience functions that encode system structure to provide powerful repl queries on system state
4. configuration - binding implementation-specific parameters to lexical scope - I've seen many 'leaky' abstractions where implementation configuration is passed via additional function arguments to otherwise more abstract functions - I also value having a single unified approach to this, rather than domain-specific hacks - e.g. hijacking Ring request maps for value conveyance.
I see that mount does 1 and 2, and 3 is 'in the hammock', but not sure what mount's answer to 4 is.
The downsides to component, in my view, is the 'whole app buy-in'. But then again, some things have become very useful because they've demanded (and achieved) de-facto ubiquity (e.g. the maven central repository).
I also don't like that component doesn't support bi-directionality (or graph cycles, co-dependencies...). Things that offer bidirectionality (e.g. bidi route structures), are quite painful to integrate into component-based apps.
Also, I love the idea of starting/stopping parts of an application that mount supports - this is definitely something I have needed but haven't figured out how to do with component.
I'd be interested in Martin's fuller review (I know he's got a lot of experience with component-based apps and has some stronger reservations that I), but of course everyone else's feedback on mount would be interesting too.
Regards,
Malcolm