Message from JavaScript discussions
November 2017
— You wouldn't run Ruby or Java on an Arduino... but what if it had 8GB of RAM and a 3GHz processor
But that's a problem too... abstraction fits into 2 categories (well, two main ones at least). Abstraction via convolution and abstraction via mux/demux
— A lot of the time, people mistake convolution for abstracton, and you can run into badly designed libs/frameworks this way where it's easier to poke the innards of the thing than it is to use the provided interfaces
— Like those asserts I wrote, that is abstraction via thunk mux/demux
— User experience
— Either they can get a cryptic error which may not explain the type is wrong althrough it is the cause of the error, or they get a nice message clearly explaining it
— C++ is really crappy when it comes to that lol
— In C++ it will pick a "function candidate" for the argument types, so you can write 5 functions all named the same, but accepting different types, and C++ will try to use the most fitting one... If you give types which there were no functions for, you will get: [Error] no matching function for call
which really uh... does not tell you what happened
— Or you even can get [Note] no known conversion for argument 1 from
...
— It is trying to do some things under the hood for you, and complains when it fails, but you still don't know that's because you passed the wrong type
— C++
— For comparison