Quote:Original post by JamesKilton
The point of a shared/dynamic library is that you don't have to ever touch other code using that library UNLESS you're either a crappy programmer or the design was so bad that you had to change your API.
In a game development cycle, this is likely to only become true either late in the cycle, or after a library has been used through several cycles and has a standard use by the developers. Even this is likely to change from project to project. It sucks, but it really is the nature of things.
This doesn't forgive not writing solid interfaces and maintaining separation, but the reality is that even interfaces will likely have to change occassionally due to requirements changes, etc. The separation means that because the code base isn't rigid, and you should be able to fairly readily change the locations where the public API's are used and get through the interface with a minimum of pain.
Quote:
That's the point of a library, a public API which doesn't change while the internals are hidden and not connected to anything outside. While this works with a static library as well, again, such interconnectedness is a Bad Thing(tm). Do you understand that?
I guess I'm missing why linking a static library into the executable is an "innately" bad thing? As you've agreed, the benefits of a fixed public API are still there in a static library.
Now if you are talking about the desire to ship a binary only library with a public API for use by external developers (you are selling a library) that is going to be used by many executables, then a shared library might be better due to executable size reduction.
This is also particularly true for developers who will be distributing an executable over the wire that uses your DLL, thus saving costs on bandwidth (assuming the DLL is already installed on host computers).
Quote:
What's wrong with a single system version number? This feels like getting too bogged down in the details. Keeping of versions of everything, I feel, isn't necessary.
The problem with a single version number is that you have no way of knowing if the customer has grabbed a copy of one of the DLL's that is an older version and is using it with a newer version executable. If you have no way to know what each components version is, customer support won't know exactly what the customer is running.
Quote:
I think I had my mind wrapped around something else. You're right, it's just that I'm against the need to relink any executable.
No worries, my mind gets wrapped around all kinds of nasty stuff. :)
If you don't like re-linking, then I agree that shared libraries are the way to go.
Cheers!
Jeff