31 Oct
2016
31 Oct
'16
10:01 p.m.
Hi All, "Whether you believe the library should be accepted into Boost" It could be, but as some very important features are missinge, the implementation should be prepared from now on. "Your knowledge of the problem domain" About 20 yrs C++ development Linux and Windows. This library has a strong focus on the streaming which is quite rare and interesting. However, other very important features of multi-processing are missing should be planned: At least to ensure that, in the future, they can be added without breaking existing code. Example of these desired fatures are (Taken from my own needs) * List of subprocesses of a given process. * Get its parent pid (Already discussed). * Get the entire process tree of a machine. * It is very useful to be notified when a given process dies (unotify on Linux). * On windows, we have the feature e.startup_info.dwFlags = STARTF_RUNFULLSCREEN, which gives some control on the console, which Is very good. Could we have more documentation about it, and plans to have the same feature on Linux ? Generally speaking have some control on the process terminal if there is one. * Have some knowledge about users and user groups, as strings and integer identifiers: the concept is similar on Windows and Unix. * Have some control on process priority( Unix's nice command ) Indeed, many of these features are not portable, but most of time, developers use only a common core of features, which is quite enough. Maybe take inspiration from portable libraries such as Python psutil, which exposes a common interface for all operating systems. Interoperability: * It might be worth checking portability with other operating systems. BSD ? VMS ??? * Must ensure that this lib is interoperable with boost::interprocess (Concept of permissions might be worth using ?) * Does it build on pre-C++11 compilers ? Many projects are not able to upgrade to C++11 immediately and have to stick to previous C++ standard. Some critics (Nothing is perfect): * The merit of the ">" operator for optional arguments is to be visually similar to an indirection, but in the context of C++ programming, although elegant, it is I think confusing and could be mismatched with <> templates or comparisons. Creating a process is a not-so-frequent operation and we should not be afraid to be verbose and very clear, I believe. * Syntax ‘(bp::std_out & bp::std_err) > "output.txt"’ . Can we explain the exact difference with the syntax: ‘bp::std_out > "output.txt", bp::std_err > "output.txt"’’ * More comments in the code and examples please. * Examples async_io.cpp or arg.cpp do not build with boost 1.62: include\boost\process\detail\windows\compare_handles.hpp(24): error C2039: 'BY_HANDLE_FILE_INFORMATION_': is not a member of 'boost::detail::winapi' * ‘typedef basic_environmentwenvironment;’ : Is It really useful ?? POSIX getenv() only uses char. * Why is the class basic_environment so big, as it is basically a simple std::map< std::string, std::string > ? (Naïve question). Anyway, many congratulations for this very interesting work, which is definitely on the right direction. Regards