Tuesday, August 18, 2015
We can link modules into a program with a linker, so where's the tool to link programs into a system?
I'm at work, and I'm looking at all the components that comprise “Project: Wolowizard” and how tedious it is to configure everything properly to work. Then I look at “Project: Sippy-Cup” and all the compoents and how tedious it is to configure everything properly to work. And then I had an odd thought.
Back when I was coding on an 8-bit computer with 16K of memory,
if my program got too big
(and I'm talking assembly language here)
I could break it up into individual files,
but I had to manage,
by hand,
all the memory addresses of each file and function.
For example,
one file might start assembling at address 4,096,
function FOO
might start at address 5,133,
and the end of that file might be at address 6,218.
That meant the next file had to start at address 6,219
(which meant making sure to tell the assembler that) and that I had to define the address of FOO
in the second file as being 5,133.
Later on,
when I had a computer running a real operating system
(well, it was MS-DOS,
which some claim isn't an operating system,
but a non-reentrant interrupt handler with delusions of being a real operating system but I digress)
I could take individual files,
compile (or assemble) them separately and not care what addresses were what,
leaving that up to another program to link everything together into a single program
(it's called a “linker”).
No longer did I have to worry about what address function FOO
would start—that was taken care of by other bits of software.
I could even include bits of output produced by other programmers
(called libraries—bits of precompiled code ready to be linked into a program)
automatically.
What I'm missing now is the linker for “Project: Wolowizard” or “Project: Sippy-Cup” as a whole. The piece of software that will take the various programs (each of which are comprised of multiple files compiled and then linked together into an executable) and “link” them up (in this case, configure all the components) for me automatically.
I'm wondering if it's even possible for such a tool in the general sense to exist.