Can you elaborate? What languages would fall in either category (I’m assuming python would be hacking and haskell would be protective)? Does static vs dynamic typing play a role?
Not the original poster. But I would call C and C++ hacking languages. They were designed to make really low level work possible. You haven't written low level code until you had to access hardware registers by memory address :). This is such a completely different experience from really high level languages that I feel that the distinction should effectively be closer to the compiled/interpreted (JITed) divide.
Low-level languages are almost always "hacking" languages, since direct hardware access inevitably brings with it a degree of unsafety. But the reverse is not true: "hacking" does not imply "low-level," as exemplified by Python, Lisp, etc.
I'd be really interested to a low-level "protective" language, if such a thing is even possible. Something like Hoon, maybe?
Any language that has a C FFI (and that his a whole lot of them) provides easy access to low-level features. The managed languages (Java especially) make this harder than it should be.
At any rate Rust and Swift are both good examples of efficient languages that can easily make use of low-level system and processor features and which offer a good C FFI.
I would argue that C++ (or at least, modern C++) aims to /enable/ one to treat it as either. It gives the programmer the power to write very low level code if they wish, but also to define type safe interfaces and high level abstractions which allow the programmer to trust the glue that binds together their blocks of code.