How processors should be architected

in #hardware7 years ago

To me it is absurd that higher level languages lack the machine instructions and move much to far away into lala land far far away from the way things actually work.

Its sad the "winning" set of machine instructions is such a pile of crap but that excuse doesn't really work for me.

Take this example:

On a Commodore 64 you can do a bitwise operation and "jump" to some address if it overflows.

In [say] javascript you don't even know if an overflow happened. You can demand having a for() loop with all its sexy and attractive features.(in stead of the conditional jump) It just isn't how things work under the hood. After the resulting rube goldberg for() is compiled you end up with a completely insane number of instructions that like maggots wurm around down right magical chip constructions.... all to remedy the willful ignorance of the programmer.

And we just can't get enough of this ignorance. We desire to build ever more mystical castles in the sky to replace the much simpler previous iteration with something proclaimed to be easier.

I feel there is something to be said for a simplistic set of opcodes that might be overly minimalistic but can be learned and understood fully in just a few days by a 12 year old. Then we could build our magic castles of abstraction on top of that with a strong collective urge to stay in touch with reality.

Make it so that you can still have the for() loop module but that its thousands of instructions have you think it might be better to use a loop baked on the chip.

Replace virtual memory and memory allocation with real line numbers, put each process on its own processor with its own memory and put millions of them on a chip. After getting rid of all but few machine instructions the thing should be so tiny that IO will be glorious. Polling will work just fine! No need for callback or promise -hell.

The default in electronics is to have everything run in parallel. If you want those weird trains of instructions one after the other you should be made to work for it. Doing it wrong should not be as easy and convenient as possible.

The vision doesn't end here!

If the instruction set is stupid enough and your program simplistic enough you get to compile her to hardware.

We should also get rid of type safety and scopes. If you need such things you shouldn't be allowed near a computer, you might hurt yourself.

As a barely related note: Storage devices should allow you to save new files and allow you to read them. Overwriting anything should require the user to hold down 2 mechanical buttons and the overwrite protect should not be a software implementation. Write only and Read only should also be available as mechanical switches exposed on the front side of the computer - by law.

It should work similarly to this: You open the door and take the package from the delivery guy. Random strangers do not get to walk inside to change the content later on. You can have as many packages delivered as you like without anyone ever touching any of it. You can however put them in a window display for people to look at.

IRL we have the concept of "asking for it"

I'm naming the new architecture after this song.