The Ultimate Computer Program By the Silver Ghost "Hello there...you wanted to see me, sir?" "Yes. Have a seat." "Thank you. Is this about some computer program you wanted?" "Yes. As you know, I'm a programmer, like yourself. But I can't find exactly what I want in a language. Do you understand?" "I think so...you're looking for something powerful but easy to learn. Wouldn't mind that myself." "No, not just powerful and easy to learn. I want more than that." "Mm-hm. What exactly did you have in mind, sir?" "I was thinking of a kind of meta-language. Something like FORTH, only better. Where you could actually design your own language." "Isn't that a little redundant?" "No. What I want is a program that--" "--that writes programs. Those have been tried, but--" "Don't interrupt me! Where was I...oh yes, not a program that writes other programs. That's useless. You can't ever get what you want." "If I may comment...the idea of such a program is to eliminate the menial programming problems, the drudgery that isn't worth typing in." "Exactly. But that drudgery is actually a by-product of the language, isn't it?" "I don't understand." "Let's take BASIC as an example. You want to transcribe a string backwards. Don't ask why. You just do. Anyway, you say Y$="":FOR X=LEN(X$) TO 1 STEP -1: Y$=Y$+MID$(X$,X,1):NEXT. Right? "Well, normally I like to have it written out, but--" "Right. The point is, that is worthless typing that in. What I want is a language that I can say 'BACKWARDS X$' and have it done." "That's more than easy, in a lot of languages. FORTH, f'r instance." "But you don't understand. This language that I will program in will be the output of another, higher program. I want to be able to form-fit the language to my needs." "Don't tell me. You want me to write this program that will write this language." "Exactly." "Why can't I just write the language?" "Because I may want something different something else! I'll be doing something totally different next year. I want a totally different language to do it with." "This program that I'll be writing...what questions should it ask?" "Beg your pardon?" "Well, you say it should allow you to get a different language each time it's run. It has to get input from you. It has to ask you questions, sir. What questions should it ask?" "Good question. That's a problem, isn't it? Hm." "May I suggest something? Another program, to write the first one. A 'language-writing program'-writing program, if you will. It takes inputs from you, and from those inputs constructs a program whose only task is to ask you the proper questions, and then write the language." "Good idea! I guess the hard part is figuring out the proper questions, isn't it?" "Let me describe to you the sort of software you want, then. You want something flexible--very flexible. It has to be able to create not just a program, but a language in which a program is written. Not only that, but it must exceed those boundaries--it must be able to write a program that will do anything, including the task 'be able to write a program that will do anything.' Correct?" "Yes! That is EXACTLY what I had in mind!" "I can do it." "You can?" "It's right in front of your nose. It's called a 'computer,' and the program that you're looking for is called 'assembly language.' I think that you'll find that you can write just about any program in assembly language... even the meta-language you're looking for. And it isn't even that hard to learn. Good day, sir."