posted by J. Scott Edwards on Fri 17th Dec 2004 18:51 UTC

"Page 2"

Versions

I have also been considering keeping versions of each object when that object is modified. So instead of actually changing that object, it clones it and then modifies the clone. That way if you have made a mistake and need to go back, or if you want to see what changes have been made you can view the differences. I.E. you have built-in CVS.

To go along with this there should be some mechanisms for cleaning up old objects that are no longer required. For instance if you have been modifying some source code and you had version 7 that worked and then you made several changes in versions 8, 9, 10, 11, and 12. And 9, 10 and 11 had bugs that you don't want to keep. When you are finished you should be able to remove those unneeded versions.

Disk space is extremely cheap now. I just checked and you can buy a 200 Gigabyte hard drive for just over $100. And Sony's Blu-ray discs will be able to hold 23 Gigabytes of data per layer. Given that kind of storage space I think saving multiple copies of your work just makes sense.

Security

Security is one aspect that I haven't gotten completely figured out. The things I have thought about are as follows:

  • Different parts of an object can have different levels of security. For example if you had a Person object, some of the info might be public, for example the person's name and e-mail address. Then other parts might be accessible by a smaller group such as your co-workers, for example your cell phone number. Then other information may only be accessible by a select few, like your Social Security Number.
  • All non-public data, when not in RAM, will be encrypted. When that data is stored on any media or transferred over the network it will be encrypted.
  • There needs to be some sort of group mechanism that allows people to be grouped, similar to the Unix/Linux group mechanism.
  • There should be different levels of security as well. For example, if you are connected as yourself, you can access some data just based upon your login authentication. Then a higher level of security that even though you are logged in as you, you have to put in another pass phrase to access that specific data. Possibly an even higher level of security that uses one of those dongles or something. Mac OS X does this to a certain extent with regular access and "administrator" access to install software and make major configuration changes. I would like to have these multiple levels within a single person's account. For example, you may have a normal level of security where you are writing a report on global warming. But you would want to have a higher security level for a object that contains your Social Security number. I want to incorporate something like SE Linux which defines "policies" of who can do what. For example there should not be one all powerful user who can read any object on the system, even the ones containing your SSN.

RAM Caching

I also want to change the way RAM is used. I want to use the main RAM simply as a fast cache for the objects that are stored on the Hard Disk. (Or really if there was no hard disk, objects loaded from the network.) So that the whole image of a running application is kept up to date as possible on the disk. As an object is executing in RAM, it should be copied back to disk as soon as possible.

There are several benefits to this scheme. One is that if the power is lost, the loss is less significant. Which brings me to one of the other ideas...

More Continuity

Another thing I want to try is to make applications have more continuity. It seems like applications now still work in the same way that they did on batch processing systems years ago. They start up completely new each time read their configuration files, inputs, do their processing and write their outputs and stop.

Instead of starting up from nothing each time and then being terminated as if it never existed. I think it would be better if (at least some) applications kept their state intact. It would be more like you turned them on and off.

For example, I wonder if a word processing program couldn't be made more like a typewriter? Say you have a piece of paper in the typewriter and you are in the middle of typing something. You get a phone call and get interrupted and have to fly to Istanbul, you shut it off (assuming it's an electric typewriter) and leave it. Six months later you come back, turn it back on and it's right where you left it.

While it's true that most word processors have a "recent documents" feature that you can re-open the document it is usually not exactly the same thing. What if the power fails, can you easily get back to where it was?

I think it should be possible to have applications that you can just turn on and off and they are just like you left them.

Deeper Down

Most of what I have discussed so far is at a higher level, really on top of the operating system. In fact my initial plan for doing a proof of concept is to build the above Object store on top of Linux and/or one of the BSD's.

But then I want to take the Object paradigm further down. I would like to have all of the operating system be object oriented, except the very core. I envision having something like a Java Virtual Machine at the core. When the machine powers up it loads the virtual machine, most likely with something like a Just In Time compiler for speed. Everything after that is object oriented.

What's in a Language

I know that some people disagree that Object Oriented programming has delivered what it was supposed to. But I have found that if you use the right OO language it has significant benefits to productivity.

Ok, I'm going to break one of my tenets and get down on C++ a bit here. I know it's possible to write good code in C++. It's possible to write good code in Assembly Language. The thing is the amount of difficulty involved. I have worked on many C++ projects, but I have never worked on one where I felt that it was productive. Even the projects I have done all by myself in C++ have been disasters. I have found that usually one of two things happens, the developers stick to a small subset of the language so it's really just C with a few objects thrown in here and there. Or it becomes so complex most people have difficulty understanding it and a nightmare to add features or maintain. I remember on one project a developer complaining that to add one simple feature he had to modify 42 different files. When code becomes that complex is a bad thing. In his book Thinking in C++, Bruce Eckel even says that C++ is more complicated than Ada. There are many sites on the internet about the problems with C++, for example: Why C and C++ Are Bad. In my opinion a programming language should make it as simple as possible to write code that is well designed and easy to maintain. I feel C++ falls short in this area.

I know 99% of the programmers in the world are going to tune out right now. But in my experience I have found that Eiffel and the Design by Contract an absolute boon to programming.

Let me give an example of where I think Design by Contract would be a major improvement. One of the biggest causes of security holes in software is the buffer overrun. And I think the fault lies in the C language, it does not check anything. And programmers are not perfect, they make mistakes and C allows them to make mistakes. I believe if you use a language like Eiffel, that checks for error conditions, software would be more secure. (One caveat here is that you could not turn off these checks off, they must always be in place. I would gladly trade a slight performance hit for security.)

Now that I've said all of that, I want to say that Eiffel is not exactly what I want to program this in. It is the best language that I have used. It embodies simplicity, correctness, and ease of programming. Programs are easier to debug and need less debugging. But I would like to change the programming paradigm as well.

One think I would like to do is have the documentation embedded in the programming language. (Now I'm sure that any remaining programmers are tuning out) I think there needs to be some way that the documentation and help are programmed right in the programming language. It should not be a separate thing. I hate documentation as much as the next programmer, here you've gone to this incredible amount of work writing this great program, and now you have to go back and document it. Which may be as much or more work than writing the program. It sucks! So I think it would be better if creating the documentation and help were built right into the program, in the same place. Then it would be done at the same time as the program.

And along those lines, I think it should be such that you can embed other types of things besides text in the program itself. I think you should be able to just put a drawing, a chart, or even a picture right in the source code. I think the source code should just be another object which can contain any other types of objects.

One thing that occurred to me about storing the code as objects instead of text is that you could display/edit the code in your preferred format. If you like the curly brace scene as seen in the C family of languages, you could view the program like that:

 if (a == b) { c++; } 
It could even prevent all those arguments over where the curly braces go:
 if (a == b) { c++; } 
And if you prefer an easier to read syntax:
 if a = b then c := c + 1; end 

Table of contents
  1. "Page 1"
  2. "Page 2"
  3. "Page 3"
  4. "Page 4"
e p (0)    94 Comment(s)

Technology White Papers

See More