Cleaned up the binary project and cmake files, added gmock and have it all running with unit tests on both windows and Linux. But I don’t have a Mac to test on.
Using pipes to communicate with the execution process should be good enough and it does not have to go through any security device such as a firewall. So users will not have to see any popups asking them to allow some processes to talk through a specific port. It is a wonderful world where you can use utilities such as ZMQ to communicate between threads without any problems.
For every executor process there is a separate input handle, so that the messages will only be forwarded to those processes that are supposed to get them. But, the output handles are inherited by all child processes and go into the same string pool. The difference between pipes on Windows and Posix systems is quite large, so that logic needs to be implemented for each system, but it is all quite simple.
Another thing about programming, is that I have not touched Python since I started working on my own and I don’t miss it one iota. Dynamic languages are fine and good where performance is not a priority and the stability does not largely depend on it. But, when your implementation becomes large and your design depends on some of these dynamic features, you start running into problems with maintainability and testing. You need to maintain a much larger test base for these languages because you need to write tests around features a compiler gives you for free with static languages.
As my choices for languages go, its C/C++, ASM, C# and LUA. There is nothing I can’t do with the features that come with those languages and their utilities. You can make them as fast as you need them to be, and you can make the output as small as you need it to be.
Portability is not just PC’s anymore. It is about the very large to the very small computing devices, and dynamic languages have become one of the least portable because of their performance and memory hit.