70 lines
3.6 KiB
Plaintext
70 lines
3.6 KiB
Plaintext
|
|
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."
|
|
|