"Evidence-based debates around the origins of thrusting and throwing spear use in human evolution have typically focused on hominin skeletal evidence. Proposals that features of the upper limbs of different species of Homo indicate that throwing only comes into play with H. sapiens23,35 are hampered by multiple issues. These include small sample sizes, human variation in populations36, evidence that humeral robusticity and shape may not correlate with strains in weapon use37, and a lack of clarity whether any single activity contributes to or offsets bone remodeling or robusticity36,38,39. Others argue for an earlier emergence of throwing, showing that features necessary for accurate and powerful throwing are evidenced in H. erectus fossils40–42. A recent find of an early Neanderthal dating to MIS 7 from Tourville-la-Rivière shows skeletal trauma consistent with repeated throwing, supporting the hypothesis that they were capable and frequent throwers43."
Interesting, I don't have a specific source as I have read about it for years and it was definitely discussed in my wife's physical anthro courses in her recently completely anthro degree.
And I seem to remember this in a display the Museum of Natural History in NY. Neanderthal using speers at close range, but not able to throw an atlatl or speer.
Library author here: As I have added more features to the library, compile times have definitely suffered. Fortunately, the latest version of the clang compiler added `-ftime-trace`, which reports where the compiler spends its time. I am currently going through and optimizing the compile-time performance of my library. However, I expect the largest gain to come in the next year or so once compilers + build systems implement C++20 modules so that you don't have to compile everything every time you use it.
For run-time performance, yes, you definitely get a hit in your run time if you have all optimizations off. However, I have found that the practical benefits of things like this library, combined with run-time sanitizers, is worth much more at finding bugs than a debugger, so I typically debug and develop with `-O3 -fsanitize=undefined -fsanitize=address` and release mode is `-O3 -flto=thin -DNDEBUG`. This is an area where it's not possible (yet) to satisfy all use cases. I am hopeful that in the future, it will be much easier to tell your compiler "this is the code I care about debugging, optimize the rest".
Only very old versions of the library are supported by those older compilers. My library is targeting the C++20 standard, so currently the only compile version that can compile it is clang with the concepts branch.
The bounded::integer types accept three template parameters: `integer<min, max, overflow_policy>`. That final parameter can be bounded::throw_policy, which is itself templated on the exception type thrown. The default exception policy is "overflow is undefined behavior". The other two policies supported out of the box are wrapping / modulo and saturation / clamping.
Library author here. I'm sorry you found the wording confusing. I was trying to talk generally about the non-library types: things like int and long. The C++ standard guarantees that there exists an integer type that is at least 64-bits large (`long long` and `unsigned long long`), and many platforms support a type like __int128 that is 128 bits large. Unfortunately, the documentation is slightly out of date. clang has some bugs that cause the compiler to crash if you use __int128 or __uint128 in certain situations (which my library uses), so I had 128-bit support on only in gcc. However, my library is currently making use of C++20 concepts, and only a branch on clang supports that enough, so the master version of my library can be compiled only by clang, so the largest size currently allowed is a 64-bit integer (either signed or unsigned, the library handles that for you).
"Evidence-based debates around the origins of thrusting and throwing spear use in human evolution have typically focused on hominin skeletal evidence. Proposals that features of the upper limbs of different species of Homo indicate that throwing only comes into play with H. sapiens23,35 are hampered by multiple issues. These include small sample sizes, human variation in populations36, evidence that humeral robusticity and shape may not correlate with strains in weapon use37, and a lack of clarity whether any single activity contributes to or offsets bone remodeling or robusticity36,38,39. Others argue for an earlier emergence of throwing, showing that features necessary for accurate and powerful throwing are evidenced in H. erectus fossils40–42. A recent find of an early Neanderthal dating to MIS 7 from Tourville-la-Rivière shows skeletal trauma consistent with repeated throwing, supporting the hypothesis that they were capable and frequent throwers43."