Into Systems

I’m into reading Linux kernel code and discussions (such as IBM Developer Works postings).

Assembly language code often does not document what it calculates with mathematical expressions. The similarity of higher level language code to mathematical expressions is of course designed to be much stronger. I find the need to consciously translate what is calculated to a mathematical expression before I understand it. This step is probably bypassed by more practiced programmers.

Systems have features required so different applications with conflicting properties can be supported by the same system. Example: GNU ld has the PROVIDE(SYMBOL = DEFINITION); operation. The documentation gives an example for its need:

For example, traditional linkers defined the symbol `etext’.
However, ANSI C requires that the user be able to use `etext’ as a function name without encountering an error. The `PROVIDE’ keyword may be used to define a symbol, such as `etext’, only if it is referenced but not defined.

Some interpretive languages have a conditional assignment operator that assigns a given value to a target variable when the the target variable is undefined. This is the same idea as “weakly defined” symbols supplied by input files in a linking.

Seeking generalizations: (a) Defaults in systems. (b) Perhaps closed world assumptions  (what is not specified is assumed to be false) in logic.

Education:

How many people who use advanced features of linkers have written an elementary linker for educational purposes?  Our curriculum currently required of BS majors includes that (in a systems programming course.) How can we effectively balance education by using complex systems to practice building systems and the building of simpler systems?

Post a comment or leave a trackback: Trackback URL.

Leave a comment