GNU Make Jobserver Implementation
make.mad-scientist.net
make.mad-scientist.net
Obviously one idea is to use threads. It’s common to have a separate thread
for dealing with signals and combining threads with semaphores, etc. would
allow GNU make to wait on two different types of asynchronous events
simultaneously. This was rejected because so far GNU make was single-threaded,
and requiring multi-threading was deemed too much of a price to pay.
I'm confused as to why adding multi-threading would be quite so onerous. As I understand it, one could restrict the use of threads to that specific feature and thus avoid large architectural changes.Do I not understand how Make is designed, or is "the price to pay" in reference to performance or some other metric?
The source of that bunkum, or at least the source that you've pointed to, is a canonical example of how rubbish turns into gospel via Wikipedia. It started out, in August 2005, as an intentionally opinionated rant written by someone who didn't supply xyr name, who clearly didn't know the subject, and who pointed to entities that didn't exist at the time in question as xyr authorities.
* https://en.wikipedia.org/w/index.php?title=DCEThreads&oldid=...
Other people came along and tried to take the opinions out and leave the facts. But the underlying problem was that the facts weren't factual at all, and were as warped as the rest of the rant was; and no-one with any actual knowledge of the topic, or research ability, has touched the article significantly in eleven years.
* https://en.wikipedia.org/w/index.php?title=DCEThreads&type=r...
And in the meantime, people come along, believe Wikipedia uncritically, and regurgitate a load of old tripe.
Here are some of the things that you have to learn in place of the un-learned junk:
* There were such things as threads in 1991. There were such things as threads in 1988 when Dave Cutler started on "NT OS/2" at Microsoft. There were such things as threads in 1987 when OS/2 version 1.0 was announced. And indeed in 1983 in VAXELN according to Dave Cutler.
* Threads are not RPC, DCE RPC or otherwise.
* The design of Windows NT threads pre-dated the existence of 1003.4a draft 4 (dated 1990-08-10). By years.
For far better things than Wikipedia to read on this subject, see:
* Inside Windows NT. Particularly page 92 of the 1st edition.
* Cutler's own Windows NT Mutant Specification, written in 1989.
* Mark Russinovich's writings on the subject of Windows NT and its VMS heritage.
* Any good book on OS/2 version 1.0 programming that details the threads API.
* Michael Yam's 1996 Dr Dobbs article on porting his wrapper class library from DCE to Win32 threads.
* Any number of books on the subject of DCE, explaining the two quite different things that are DCE RPC and DCE threads.
I've always thought one of the weak points of POSIX was that the event sources were not unified. Imho, is a pity the relevant committee didn't work towards a clean solution in the mean time.
Even more annoying is that Windows API allows to wait on any combination of file/socket descriptor and/or message[1].
[1] MsgWaitForMultipleObjects https://msdn.microsoft.com/en-us/library/windows/desktop/ms6...
But there are a few major problems with it:
Newies often complain a lot about the esoteric syntax.
It's written in C.
It doesn't gets updated as fast as it should.
These points make it not very suitable for our current time.
I belive we all just need to pick something like gulp and port the "good parts" into it.
There is no point in having 20 tools that do the same!