Wow those are some really insightful points. I especially like the comment on turning off features easily.
Can I ask, do you have any examples of dependencies that were hard to wrangle? I'm really curious what specifically were the problems you hit with dependencies when trying to integrate another library with dependencies.
As for your question on who the developer is -- you! You are the developer using this library, and it can be as high or low level as you want
I described a fairly low level-ish library suitable for C/C++, but you might have wildly different preferences, and I'm interested in hearing about them
Thanks
Here's some experiences and elaborations on dependency stuff.
This stuff tends to hurt the hardest when working on a large engine. You can have a large number of target/platform combinations (say 10 targets and 2-7 platforms which might use 1-4 different compilers). Inevitably the build script gets a little fatter with some declarative conditional logic for which libraries to link against which platform combination group. An engine of that size takes a while to build so it's also not feasible to test every combination unless you have considerable resources. Even then you have to sit and wait.
Maybe adding one library is manageable but when you have many third party libraries, all which may or may not have their own way to build, you get a fairly complicated build script that looks daunting to someone looking at it for the first time.
One particularly rough example I can think of is having to have multiple high level build systems for a single project. For example you have an engine that has its own build system but has a plugin model. You then have a plugin that has a dependency on a library that uses something like cmake. Then your build system is calling another build system! All of this ends up working fine but I can't help but think of how many hours I spent maintaining a project rather than working on the project.
I think at this point I have to apologize because it came off as a bit of a rant
. I think I can sum this up into a higher level concept : When I write c++, it most often tends to be the language that loses me the most pure programming time. By that I mean things like auditing includes, build script management, figuring out weird linker errors etc etc. Anything to spend more time programming and less time doing stuff around the project has my gratitude.
-------------------------------------------------------------------------------------------------
As for the developer type question the reason I have to qualify it is because my choice varies greatly depending on my project and state of mind :
Game Jam : I go straight to HaxeFlixel 90% of the time. It's batteries included and I can have something up on the screen in a few mins. It has a crazy OOP inheritance hierarchy. I think the main sprite class is about 6 levels deep. So it makes a long term project a case of fighting the library because everything is bolted on to an uber class directly but those same flaws make getting something functional a really quick endeavor. It's a little out of scope because it includes input/collision.
Learning and full control : I tend to go to C or Orthodox c++. This is usually when I want to do a lot of direct manipulation of stuff higher level libraries make difficult to get at like various buffers. Another reason is I tend to enjoy working with it despite it's flaws. C/C++ in their ideal state can be super fun to use, it's fun being able to have more direct access to memory (until it isn't of course :D).
It's funny, today I was working on some problems that required me to do some 2D math. It was in an environment that wasn't wonderful for prototyping algorithms so I looked around for a 2D repl I could use to test stuff out. I couldn't find anything that fit my personal needs. I ended up using a javascript 2d repl which worked but I just don't know javascript so I was spending more time learning how to javascript then writing the algorithm. I have some thoughts on this which I think involve wrapping a low level c drawing library to .net then using f#'s repl. That's a very specific preference though haha.