Computer Terminology part 2: Topics
Tuesday, May 11th, 2010In choosing what the topics should be, my main priority has been to avoid creating large grey areas. This is partly to simplify the initial classification process, but mostly to make the resulting predicates easier to memorise: if the classifications are obvious given the topics, then all you have to remember are the topics.
Computer technology makes a good choice for a top-level namespace because it is a large subject that has much specialised vocabulary and reasonably well-defined boundaries. I’ve called this namespace ‘comp‘. The namespaces immediately below it wil include:
comp:alg (algorithms)
comp:arch (machine architecture)
comp:code (source and object code)
comp:data (data types and structures)
comp:dev (software development)
comp:exec (execution)
comp:io (input/output)
comp:net (networking)
comp:os (operating systems)
comp:ui (the user interface)
Some of the second-level namespaces have third-level namespaces within them. Examples include comp:alg:sort and comp:io:printer. The main reason for introducing them was the groups of predicate names that would otherwise share a common suffix, such as inkjet, laser and thermal printers, or bubble, insertion and selection sorts. The word ‘printer’ or ’sort’ was going to have to appear in the predicate name anyway, so why not make it a namespace and obtain the benefit of grouping like terms together?
Much computer-related terminology has been adapted from other fields. It will therefore be no surprise to find the same predicate names appearing in other namespaces with similar definitions, both inside and outside the comp hierarchy. An example would be comp:dev:fork and comp:os:fork. One could argue that these are essentially the same process applied respectively to source code and to a running process, but there are two good reasons for keeping them separate:
- Although they have much in common, there is enough contextual baggage associated with each that it would be difficult for a generic description to convey their full meanings
- The concept of forking is one that applies only to a very small number of isolated concepts. It is therefore quite practicable to enumerate the alternatives, and there is little to be gained by attempting to generalise.
A subtopic that I am unsure about adding is one for types of software. Originally I had put together quite a number of predicates that could be grouped together in this way, but it became increasing apparent that most of them could be expressed using the pattern ‘program to do X’. Thus, a compiler is a program for compilation, a text editor is a program for editing text, and so on. There may be a case for providing these anyway, as aliases, but I’m not yet convinced that is justified.
There may also be a need to add subtopics relating to specific technologies. For example, ‘method’ is a generic term for a subroutine that is a member of a class, but for methods written in C++ it is more common and more appropriate to use the term ‘member function’. This difference needs to be captured somehow, and one way to do that would be to treat a C++ member function as a type of method that is sufficiently distinctive to be given its own predicate. However I’m not necessarily convinced that this is the right answer, not least because it would violate orthogonality.
One final point: I think my work on this namespace is sufficiently mature to start committing parts of it to the repository, but this does not mean that the predicate names should be considered stable. On the contrary, I expect change as it beds in, and I won’t be making any particular effort to ensure backward compatibility. The only predicates that have been declared stable so far are those relating to numbers. At some point in the future it will be necessary to identify stable and non-stable predicates in the BabelScript documentation, but for now it is enough to say that everything apart from cardinal and ordinal numbers is non-stable.