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!