Application need a Review Manager. Anyone is interested?
So do a ton of other libraries waiting in the review queue.
One trend I've noticed in recent reviews is that the libraries which find review managers are small, sometimes very small. It might be worth breaking up Application into smaller libraries if you want a faster review.
I think that I can split it.
Equally, AFIO has 1000 active lines of code, and I very much doubt it'll see a review manager any time soon. I'm thinking maybe next year it might
(I will speak at C++ Now introducing the session on the Future of Boost, which will mention AFIO :) ).
Nice! I will check!
FYI, I'd just love if Application's design rationale told me why and how it's similar or different to Boost.Process. Process is one of the most popular non-official Boost libraries out there.
Well, I think that are totally different. Quick, Boost.Process is used to start a new process, Boost.Application is the process in fact. Boost.Application provides a model/environment to build any application, not start an application. Some features are: With it you can deploy your application as server (service on windows, and daemon on unix). It provides a plug-in system tool and other facilities (like aspects) that will help developer on application development. It provides a way to create other applications modes, e.g. Apache http server module. Some references: http://www.codeproject.com/Articles/756866/Build-a-Server-Application-using-... http://www.codeproject.com/Articles/695937/Creating-a-New-Application-Mode Thanks alot for your comments.
On 20 Apr 2014 at 12:10, Renato Forti wrote:
Quick, Boost.Process is used to start a new process, Boost.Application is the process in fact. Boost.Application provides a model/environment to build any application, not start an application.
Sure, I got that, but from the 90 seconds I looked at your docs it wasn't clear to me why you appeared to be replacing instead of extending Boost.Process. Of course you may not be replacing, but that wasnt't obvious in 90 seconds of looking.
http://www.codeproject.com/Articles/756866/Build-a-Server-Application-using-... http://www.codeproject.com/Articles/695937/Creating-a-New-Application-Mode
Those articles give the impression that you're reinventing a lot of Boost, yet from the docs I suspect you're actually providing wrappers/plugins for various bits of Boost. Yeah, I'd definitely redouble my advice to break up Application into smaller, standalone, reusable bits. The problem with any overarching framework is that it's a vision (i.e. your vision), and other people's visions never peer review well, whether in academia, here in Boost, or anywhere. Also, unless you're a member of Boost's steering committee and/or on the C++ standards committee, any vision you propose probably won't be given any benefit of the doubt unfortunately. Niall -- Currently unemployed and looking for work in Ireland. Work Portfolio: http://careers.stackoverflow.com/nialldouglas/
On Sun, Apr 20, 2014 at 6:29 PM, Niall Douglas
Sure, I got that, but from the 90 seconds I looked at your docs it wasn't clear to me why you appeared to be replacing instead of extending Boost.Process. Of course you may not be replacing, but that wasnt't obvious in 90 seconds of looking.
Just to be clear Niall, the part that you think is common to Process is basically the server/daemon setup feature, am I right? Because, my understanding of Application is that it's closer to a customizable ready-to-use scafholding or "template", to quickly setup a correct daemon(or not) with dynamic plugins. Assuming that Boost.Process does provide in the future a way to setup the daemon side of the application, then Application would indeed use Boost.Process inside, like it already does with Boost.ProgramOptions. I think your advice of submitting several small libraries was already given when Boost.Application was first introduced to the list. Basically, process configuration (boost.process), dynamic plugins (boost.extension) and command line interpretation (boost.program_option) are clearly libraries I would like to see in boost and have been using in non-released forms before (except the last one). Boost.Application is interesting because it looks like a useful abstraction around these and that make me think that it might be useful to make the user ignore what is used inside Boost.Application so that the implementation can use the mentionned boost libraries inside when they are stable enough. What I mean is: wouldn't it be possible to review the Boost.Application interface and current implementation but assume that the parts that should be part of Boost.Process/Extension will use these libraries once ready? I think this happened several time before (maybe in Boost.Log) where the implementation did something already available in other libs but not good enough yet, and the implementation was rewritten when the official library was ready to replace it (boost.atomic was discussed this way for several libraries if I remember correctly).
Hi All,
There is no intersection in functionality between proposed boost::process and boost::application. Boost::process defines portable interface to process abstraction, for example:
start, wait, set environment variables, communicate via pipe...
It simplifies use case when parent process controls child process. "Process abstraction" in this context means "operating system process".
Boost::application is not about relationships between OS processes. It defines abstraction of an application. Renato has posted an article ( http://www.codeproject.com/Articles/756866/Build-a-Server-Application-using-... ) which is good example of what can be done using boost::application but it shifts the focus to server side development. I even saw one confused comment asking why this library is called "application" but not "service" or "daemon".
In fact the name of the library is chosen very well. There are different kinds of applications: services/daemons, console applications, GUI applications. There are also pluggable modules of different kinds. And there are not that many things that all these applications can share to be called a library. However they have some similarities:
1. Any application needs to be started;
2. An application works in its own environment;
3. An application should be initialised using configuration taken from the environment;
Basic facilities provided by C++ implement these 3 points in the following way:
1. Starting point: function main();
2. Environment: arguments of function main(argc, argv) and ::getenv from <cstdlib>
3. Initialisation: constructors of global objects and the beginning of function main();
These are facilities that came to C++ from C language and any mature C++ project implements its own abstractions on top of these basic interfaces.
Boost::application plays a role of framework that helps developers to define these 3 points in the way required by their particular application. It also provides two cross-platform templates for console application and server side application (the author uses term "application mode").
For those who don't like frameworks (e.g. me) - the good news is that boost::application is extendable framework. In the core of the library there is Aspect Map which holds application environment in general way. Possible competitors of boost::application are classes like QApplication but boost::application doesn't impose predefined set of application properties (and application types).
There is one obvious conclusion - if you are working on legacy or stable project you might not need boost::application. Possible audience that can benefit from boost::application is development team who have just started a C++ project and they don't have their own application framework. They can chose one of the "application modes" provided by boost::application and quickly pass the initial phase of the project. Later when they find that their application requires some special configuration and/or initialisation they can add it by modifying their "application mode".
Questions that can add more justification to boost::application:
1. How long does it take for you to implement function that returns full path to application executable (using std:: or boost:: facilities)?
2. Can you properly daemonize a process?
3. Those who answered "yes" on second question - can you register a Windows service?
Thanks and regards,
Alexey Tkachenko.
On 21 Apr, 2014, at 1:25 am, Klaim - Joël Lamotte
On Sun, Apr 20, 2014 at 6:29 PM, Niall Douglas
wrote: Sure, I got that, but from the 90 seconds I looked at your docs it wasn't clear to me why you appeared to be replacing instead of extending Boost.Process. Of course you may not be replacing, but that wasnt't obvious in 90 seconds of looking.
Just to be clear Niall, the part that you think is common to Process is basically the server/daemon setup feature, am I right?
Because, my understanding of Application is that it's closer to a customizable ready-to-use scafholding or "template", to quickly setup a correct daemon(or not) with dynamic plugins. Assuming that Boost.Process does provide in the future a way to setup the daemon side of the application, then Application would indeed use Boost.Process inside, like it already does with Boost.ProgramOptions.
I think your advice of submitting several small libraries was already given when Boost.Application was first introduced to the list. Basically, process configuration (boost.process), dynamic plugins (boost.extension) and command line interpretation (boost.program_option) are clearly libraries I would like to see in boost and have been using in non-released forms before (except the last one). Boost.Application is interesting because it looks like a useful abstraction around these and that make me think that it might be useful to make the user ignore what is used inside Boost.Application so that the implementation can use the mentionned boost libraries inside when they are stable enough. What I mean is: wouldn't it be possible to review the Boost.Application interface and current implementation but assume that the parts that should be part of Boost.Process/Extension will use these libraries once ready? I think this happened several time before (maybe in Boost.Log) where the implementation did something already available in other libs but not good enough yet, and the implementation was rewritten when the official library was ready to replace it (boost.atomic was discussed this way for several libraries if I remember correctly).
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
On 20 Apr 2014 at 19:25, Klaim - Joël Lamotte wrote:
Sure, I got that, but from the 90 seconds I looked at your docs it wasn't clear to me why you appeared to be replacing instead of extending Boost.Process. Of course you may not be replacing, but that wasnt't obvious in 90 seconds of looking.
Just to be clear Niall, the part that you think is common to Process is basically the server/daemon setup feature, am I right?
Eh, maybe. I was more thinking there might be some process control in there somewhere, and that might overlap with Boost.Process. I really didn't look for more than 90 seconds.
What I mean is: wouldn't it be possible to review the Boost.Application interface and current implementation but assume that the parts that should be part of Boost.Process/Extension will use these libraries once ready?
If a review manager can be found, anything can be reviewed. It doesn't mean the review will work though. I think the worst outcome in a community review though is when almost nobody contributes a review because it's too hard and/or no one cares enough, with the second worst outcome being when each reviewer has a totally different understanding to any other as to what they are reviewing, which makes the job of a review manager almost impossible. In that sense, small, single purpose libraries have a lot going for them under how Boost currently has configured peer review. Niall -- Currently unemployed and looking for work in Ireland. Work Portfolio: http://careers.stackoverflow.com/nialldouglas/
participants (4)
-
Alexey Tkachenko
-
Klaim - Joël Lamotte
-
Niall Douglas
-
Renato Forti