11. Programming

11.1. Compilers

11.1.1. Code_Generator_Kits

11.1.1.1. CGSS -- the Code Generator Synthesis System

The CGSS was mentioned in Bob Knighten's article quoted above: see my section on Code_Generator_Kits.

It was developed by Goos's students Hans-Stephan Jansohn and Rudolf Landwehr.

In the context of Goos's german DoD funded Karlsruhe Ada Compiler project Michael Thätner [9] and I did a small thesis[10]. The job was to implement an Ada compiler backend targeted towards a Motorola 68000 under some UNIX SysV and also on the bare machine. Michael did most of the programming work, I wrote most of the article, that was accepted for the 1983 ACM SIGSMALL symposium on Personal and small computers in San Diego. The final goal attempted and described in the SIGSMALL article (bootstrapping the compiler on that CADMUS machine) was never actually reached, as Systeam (the nearby company, where quite a few of Goos's graduates finally worked at least for a period of time) did all their work on a Vax running under VMS and the 68000 port wasn't a strategic target for them. But apart from the bootstrap and also from the formal Ada compiler validation (which nobody seemed to have a commercial interest in), that compiler and the runtime system did very well.

So the referees accepted the article [11], and the mail back was caught by one of the graduate students (Rudolf Landwehr), Michael and I never saw that letter, and guess who went to San Diego and did the lecture? It was smartie Rudolf. And guess what he also did: he managed to get the order of the authors of the article changed, so these unworthy undergraduate students of us appeared only after him and his mate [12]. What a j...! The proceedings' TOC actually shows the original name order, as that entry was taken from the article submitted originally. If you download the PDF file, that ACM made from the original article meanwhile, it comes as p81-hayek.pdf -- hey, hey, hey!!! I also keep it here, in case you want to read it and don't get it through ACM's Digital Library. I hope, they (ACM) are not angry on me for that.

Hans-Stephan Jansohn.  Hans-Stephan completed his Ph.D. a little while later.

Rudolf Landwehr.  Smart Rudolf never ever managed to complete (or even start?!?) his Ph.D. thesis. He is a manager with a german DoD software house nowadays. Obviously the guy, that I am now, wouldn't let that cheaky post-graduate get away like that, but then back in 1983 times and also we were different.

11.1.2. Compiler_Construction_Kits

11.2. Internet

11.2.1. CGI

11.3. Languages

11.3.1. desired features

  • command descriptions for use by the interpreter, so the interpreter can prompt for / complete option (or call them parameters) names, so actual parameter values can be type validated, ...

  • ...

11.3.2. Computers.Programming.Languages.coding-standards.* -- coding standards

11.3.3. Ada

A very nice language, but it's not that widely known and used as it should be.

11.3.3.1. Ada83

Well, the class concept was missing, but the rest is ok.

11.3.3.2. Ada95

I can't tell you yet, whether the new `oo-'-features are ok.

11.3.3.3. Web Ada

...

11.3.4. Algol_60

11.3.5. Algol_68

A very nice language, but it was born too early.

11.3.6. Assembly

I used several of them: 80x86, 680x0, /370.

11.3.7. Awk

My second pattern matching language. Also quite nice, but I prefer perl nowadays, if the customer does not insist on qualified software ... [13]

11.3.8. C

Most of the software (up to one stage) I implemented I wrote in the C programming language. BTW A quite incomplete and unprecise language. The GNU C and C++ compiler is named gcc. BTW I'm using version 2.7.2. It's also the fundament for gnat, the GNU Ada95 compiler.

11.3.9. C++

I got a big greed for that language, when it got known by the public in the middle of the 1980-s, I devoured the Stroustrup, but I did not have a commercial project in C++. The language is still / was lacking a module concept for avoiding the clattering of the name space. Rumours say that's coming with C++/200x...

11.3.10. C#

11.3.11. Cobol

11.3.12. Fortran

I got Fortan experience, but do you really want to know that? ...

11.3.13. GEMINI command language (can't actually be an entry in the Open Directory Project)

The GEMINI command language had command descriptions.

11.3.14. Icon

The next pattern matching and ... language by Ralph Griswold like SNOBOL4, but really readable and `free format' - unlike csh. I think it is much nicer than awk and others, but awk and others got ported on UNIX platforms, but Icon has a machine dependant core written in assembler, what a pity. It had even concurrent expressions. Even nowadays you do not have languages features, for saying: these blocks can be executed in any order, their order is not relevant. It was a language of the 80-s already influenced by the syntax of C.

11.3.15. Java

The C++ based Internet programming language. After some initial pessisims meanwhile I learned it's a quite useful language, its platform independance is awfully valuable. And it is platform independant in several aspects:

  • operating system (UNIX, Win95/NT, Mac, ...),

  • CPU (Java translate to a virtual machine interpreter),

  • GUI API (its own GUI API is implemented using OSF/Motif, Win95/NT, Mac, ...),

  • ...

Well it is not independant from the network it uses, it seems AFAIK to rely on the Internet (which I consider to be a good decision). But imagine the kind of advantages you get, using software coded in the same programming language with a well-integrated and easy to understand networking facility on both sides - the client and the server. You can transmit `objects' through the network without caring for en- and decoding them. Great! And it's also got a very nice and sophisticated builtin locking mechanism for data, `methods', objects, ... for use with local thread programming in your task. Althought it's called `the Internet (programming) langugage', it is also a good idea to use it for applications (initially) not planned to do networking because of all it's nice features. The NC (`network computer') architecture and also some special dedicated Sun hardware already do or will support the Java Virtual Machine, and in the future more and more hand-held and others computers will do, so in a few years you might extend your coffee machine with your own Java applet - time for a cup of Java, enjoy it!

11.3.16. Lisp

I used @cite{[Abelson_Sussman_1987]} for learning scheme and lisp.

11.3.16.1. Common Lisp

Very nice, but very fat - at least it's rather complete. I love it. I once used a certain derivate of it called xlisp for some utilities.

11.3.16.2. Emacs_Lisp

Another nice and quite complete language.

11.3.16.3. Scheme
  • dmoz

  • wikipedia

  • DSSSL -- a Scheme implementation used for generating `any' kind of text from SGML

  • STk -- a Scheme implementation integrating Tk

  • GUILE -- the GNU extension language, also integrating Tk

11.3.17. Lua

I came across it in the context of imapfilter.

11.3.18. Modula-2

Just another language by the famous Prof. Nicklaus Wirth.

11.3.19. Pascal

The most import language by the famous Prof. Nicklaus Wirth.

11.3.20. Perl

My last (not least!!) favourite programming language. Actually the one programming language that I'm earning money with to feed my family ... (I'm not really suffering from programming in perl -- only sometimes.)

A very, very useful language with a standard C-ish syntax and some `OO' add on-s. The Bourne shell is already quite nice, but perl is nicer for many purposes. It's my favourite language for everyday purposes. I dare to say, it's the Common Lisp of the 90-s, but because people don't like Common Lisp nice parentheses perl in contrary to Common Lisp got quite popular. `Syntax by parentheses' was quite to obvious, so it was regarded as difficult. Clearcase got an API implemented in perl. My first two larger perl projects:

  • reading Btx page descriptions and generating input for my Btx input feeder

  • reading voucher descriptions and extracting the index data relevant for retrieving a voucher document using a data base and an archiving system

I'm doing my daily scripting stuff using perl,

  • starting with all those worktime computing and table generating utilities

  • and not ending with a utility extracting my accounting records from my diary and generating data proper for my accounting software.

11.3.20.1. Modules
  • dmoz

  • CGI.pm -- my favourite perl module for CGI-ing

  • perl/Tk is Tcl/Tk (w/o that much Tcl) made available to perl programmers

11.3.21. Python

Currently my favourite programming language.

11.3.22. Ruby

11.3.22.1. Rails

11.3.23. Snobol

My first real pattern matching language. (Jürgen Gulbins had brought with him a snobol interpreter from Siemens R&D., spitbol or so was its name.) Quite different and hard to learn, but awfully useful. I used it in my early UNIX period, before I discovered that `awkward' awk.

11.3.25. Tcl-Tk

Richard Stallman's comments on Tcl (@pxref{rms on tcl}) deeply impressed me. [14] I wrote software in Tcl/Tk in several contexts:

  • @ref{cept} (personal extensions to a CEPT terminal)

  • Peek Traffic

  • GLI mbH

  • Agfa EPS

11.3.25.1. expect

It's a most necessary, wonderful and powerful chat language[15] for a lots of things to be done by script, that couldn't be done that way yet;

author (also of the excellent book): Don Libes I adapted wonderful power-dialin-scripts for use with my IP providers, and I implemented an NNTP server wrapper using this nice language. It's one of my favourites, as you see. You can get this software on Don Libes' server.

11.3.26. AEG TR440 command language (can't actually be an entry in the Open Directory Project)

It sounded very german, but it was pathbreaking.

11.3.27. Digital VMS command language (can't actually be an entry in the Open Directory Project)

The command language of Digital VMS has command descriptions and parameter comletion

11.4. Methodologies

11.4.1. Refactoring

11.4.2. Object-Oriented

11.4.2.1. On oo-ism, 00-ism, ...

oo is nowadays being used for selling products and for selecting candidates for jobs. `oo' is said to be revolutionary - well, it's useful to tell others: `we are oo', `I am oo', because it means: `probably you are not oo', so you are out. `oo' is not a very difficult thing, I will try to list here those principles, around which others write thick books, surely necessary for beginners, but not for experts trying to learn the special vocabulary. Some phrases in the following subsections are taken from [Booch_1995].

11.4.2.1.1. Elements of the object model
11.4.2.1.1.1. Abstraction

An abstraction denotes the essential characteristics of an object that distinguish it from all other kinds of objects and thus provide criply defined conceptual boundaries, relative to the perspective of the viewer.

11.4.2.1.1.2. Encapsulation

Whereas abstraction `helps people to think about what they are doing', encapsulation `allows program changes to be reliably made with limited effors' [Gannon_et_al_1987].

This is what the C++ features private vs. public is good for.

11.4.2.1.1.3. Modularity

Modularity is the property of a system that has been decomposed into a set of cohesive and loosely couple modules.

11.4.2.1.1.4. Hierarchy

These inheritance hierarchies are is a hierarchies and denote generalization / specialization relationships.

single inheritance

for trading off the `contradictionary' requests of encapsulation and inheritance C++ provides you with this span of features: private - protected - public.

multiple inheritance

aggregation

part of hierarchies describe aggregation relationships.

11.4.2.1.1.5. Typing

Typing is the enforcement of the class of an object, such that objects of different types may not be interchanged, or at the most, they may be interchanged only in very restricted way. `Strong' and `weak' typing.

11.4.2.1.1.6. Concurrency

...

11.4.2.1.1.7. Persistence

...

11.4.2.1.1.8. Classes and Objects

An object has state, behaviour, and itentity; the structure and behaviour of similar objects are defined in their common class; the terms instance and object are interchangeable.



[9] a co-student and very good friend of mine

[10] in german: Studienarbeit

[11] alright apparently they critized my german-english funny writing style, apparently not serious enough for the academic world -- I got that part of the story told only like at least 10 years later ...

[12] I don't blame Hans-Stephan for that -- he is a rather nice and modest fellow

[13] you remember that, Rainer?!?

[14] isn't there a more long-living URL for that article? Pls, tell me!

[15] although it's build on top of Tcl