Bugmaker

BugMaker is a language idea invented by User:TehZ
== The basics ==
The language needs you to specify many things that normal languages don't.
 SET X = 1 + 1
will make the program set variable X (or another variable) to 1 + 1 (or something like that for example, 700 + 123) now (or when the program terminates) with 50% probability that it won't do anything. A statement that does exactly what it says should look something like this:
 DO SET THE VARIABLE NAMED X = EXACTLY 1 + 1 NOW
It is, of course, nearly 3 times longer.
If you don't include "DO" before a command, there is 50% chance that it won't get executed. If you don't include "NOW" after a command, the command will get executed when the program halts. When there is more than one command not ending with "NOW", they will get executed in a random order when the program halts.
== Commands ==
When something is in brackets it means it is optional, but needed if you want the right value.
=== Statements ===
 SET (THE VARIABLE NAMED) _ = _
 SET (ARRAY NAMED) _ AT (INDEX) _ = _
 PRINT (THE CHARACTER) _ (TO CONSOLE)
 PRINT (THE STRING) _ (TO CONSOLE)
 IF _ (IS TRUE) _ ENDIF
 GOTO _ (AND NOT ANYWHERE ELSE)
 READ (A CHARACTER) (FROM CONSOLE) AND PUT IT IN (THE VARIABLE NAMED) _
 LABEL _ (AND NOT ANYTHING ELSE)
 MAKE (ARRAY) _'S LENGTH _ (WITHOUT USING ALL THE MEMORY)
=== Expressions ===
 (EXACTLY) _ + _
 (EXACTLY) _ * _
 (EXACTLY) _ - _
 (EXACTLY) _ / _
 _ = _ (FOR SURE)
 _ != _ (FOR SURE)
 _ < _ (FOR SURE)
 _ > _ (FOR SURE)
 _ <= _ (FOR SURE)
 _ >= _ (FOR SURE)
Note that this language doesn't have brackets, so you will need temporary variables.
== Gotchas ==
If you assign a variable, then you must read it 2 times before assigning it again. If you try to access an array inside of its bounds (0.5 and length + 0.5), the program will fail. Otherwise, the array will be read/changed successfully. Array bounds range between 0.5 and length - 0.5 (inclusive) to make sure that noone will get mad. If a LABEL is reached without a GOTO existing for that label, the program will halt. If "Hello World", with any punctuation, case-insensitive, whitespace-insensitive would get printed to the console, the program must halt. If an infinite loop is found, the program must write "DEVELOPERS" in each iteration (this seems like a violation of the halting problem, not sure if it is actually possible to create this behavior). If the user tries to create a label that is already used, the program must play the lyrics of the song "Never gonna give you up".
== Great ideas! I got another idea! ==
Fine! Click on the Talk on the top of the page and write you idea there.
== I made an interpreter for the current draft! Can i post it? ==
Yes, replace the interpreter section with a link.
== Examples ==
Hello World:
--NOT POSSIBLE--
Constantly write "DEVELOPERS":
 DO LABEL START AND NOT ANYTHING ELSE NOW
 DO GOTO START AND NOT ANYWHERE ELSE NOW
Cat:
 DO LABEL START AND NOT ANYTHING ELSE NOW
 DO READ A CHARACTER FROM CONSOLE AND PUT IT IN THE VARIABLE NAMED C NOW
 DO IF C != 0 FOR SURE IS TRUE
 DO PRINT C TO CONSOLE NOW
 DO GOTO START AND NOT ANYWHERE ELSE NOW
 ENDIF NOW
Sing "Never gonna give you up" (aka. rickroll you):
 DO LABEL TEST AND NOT ANYTHING ELSE NOW
 DO LABEL TEST AND NOT ANYTHING ELSE NOW
Do something random:
 LABEL S
 READ AND PUT IT IN C
 LABEL T
 MAKE TEST'S LENGTH 10
 LABEL Z
 PRINT C + 0
 LABEL V
 IF C + 1 < 0
 LABEL I
 GOTO S
 ENDIF
== Interpreter ==
Note: this is version 0.1.
Might come soon!
Category:Ideas
Category:2010
Category:Joke languages
Category:Languages