The IDE isolated the programmers from full control of the compiler and its code generation options.
Once upon a time, programmers were REQUIRED to understand and sometimes manually configure the link-editor. That allowed for things like load-no-call: load debugging modules/subroutines that were not called anywhere, but were available when debugging. Before virtual memory, there were overlays. The IBM 1130 made that simple with LOCAL (load on call) and SOCAL (system call load on call) directives. But only one was loaded at a time: one load-on-call could not call another. I think the IBM 360 allowed for specifying a tree of nested overlays. When using the PIC18, I had to configure the linker to load my "C" code around the boot loader. 'tis the joy of not using absolute addresses for everything. .csect is the IBM pseudo-op for such things: http://www.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.alangref/i... Everyone had their own names for such stuff :-( Anyone who hand-coded assembler did absolute addressing. I worked on a project where the assembler did not generate relocatable code. Everything was absolute addressing, requiring the build-meister to manually map out memory for all modules, storage sections, temporary scratch-pad areas, etc. It was easy to trash memory when anything changed size. -- jeffj