Programming Langages …

Programming languages teach you not to want what they cannot provide. You have to think in a language to write programs in it, and it’s hard to want something you can’t describe.

                      From the Introduction to ANSI Common Lisp by Paul Graham

The Truth…

The Truth is in many cases about 30% more complicated and 30% less fantastic and interesting than what we perceive of it. When this happens repeatedly, we see a multiplier effect which is probably irreconcilable. We measure the world poorly with inadequate tools.

AIX compile, assemble, and link with gcc

If you just run gcc on some source code, it should simply create an executable for you. However, you can also break the process apart and see the compile and assemble commands.

gcc -S showsum.c
as -u -mcom -o showsum.o showsum.s
ld showsum.o /lib/crt0.o -lc -o showsum

This also leaves your showsum.o object code around, which might be all you really want of you are trying to compile a library. The most interesting part of this, however, is the showsum.s which is actually your program converted into assembler by gcc. You can look at it and even change little pieces of it if you know what you are doing:

more showsum.s
        .file   "showsum.c"
        .toc
        .csect .text[PR]
        .align 2
        .lglobl .strtoimax
        .csect strtoimax[DS]
strtoimax:
        .long .strtoimax, TOC[tc0], 0
        .csect .text[PR]
.strtoimax:
        .extern __mulh
        .extern __mull
        .extern __divss
        .extern __divus
        .extern __quoss
        .extern __quous
        mflr 0
        stw 31,-4(1)
        stw 0,8(1)
        stwu 1,-72(1)
        mr 31,1
        stw 3,96(31)
        stw 4,100(31)
        stw 5,104(31)
        lwz 3,96(31)
        lwz 4,100(31)
        lwz 5,104(31)

Of course this will also be very different on an x86 platform because the instruction set is different. It would interesting to compare what decisions gcc makes on either a Windows or Linux system. I have recently been reading about cross-compiling , and I think this gets into that territory.

Marshall McLuhan and the Tetrad of Free Software Licenses

In the 1960s Marshall McLuhan was the creator of the terms ‘the medium is the message’, ‘global village’. He was later named ‘Patron Saint’ of Wired magazine. One of his most interesting ideas is the Tetrad . To make a tetrad, you start with some ‘medium’ or innovation. In this case, I pick the Free Software Licenses, such as GPL and try to place them into a context of what came before it and what is to come because of it. The medium enhances something, obsoletes something, retrieves something, and finally reverses into something, somewhat like a star collapsing in on itself.

I can textually show a tetrad like this:


                      	        [ reverses ]	  	    
[ enhances ]  
                       [ medium ]
		                    [ obsoletes ]
     [ retrieves ]

Here is my tetrad for free software licenses:


                             [ 3rd party distributions ]	  	    
[ free software options ]  
                [  free software license  ]
	                                [ private software dev. ]
     [ scientific collaboration ]

This is to good exercise in trying to put words to ideas about a medium and I believe often leads to a desire to better name elements of the tetrad, especially the ‘reserve’ field since such thing may not have yet happened and thus may not have a great term coined yet. In the above model, the free license disappears and eventually an outsider would only see the 3rd party software distribution. So something spectacular appears less so; all of the collaboration of linux is reduces to, for example, a statement like: “Oracle is supported only under Red Hat Linux and we must buy a license from Red Hat in order to use it professionally.”

Here is a tetrad for a software package that we use called Appworx Job Scheduler. In this case, it is actually in the reverses field because it has passed its prime and been bought by another company called UC4:


                      [ appworx/uc4 ( half refactored quagmire) ]	  	    
[ oracle database ]  
                       [ sqloper ]
		              [ Windows Job Sched. and cron ]
     [ JES job scheduler ]