Mango

From Esolang
Jump to navigation Jump to search
This is still a work in progress. It may be changed in the future.
Mango
Paradigm(s) imperative, procedural
Designed by User:RaiseAfloppaFan3925
Appeared in 2025
Computational class Turing-complete
Reference implementation Unimplemented
Influenced by Bussin X, LOLCODE, Rust
File extension(s) .mango, .tuff

Mango is an unimplemented programming language by User:RaiseAfloppaFan3925 inspired by modern 2010-20s slang.

Keywords

Here is a list of all of the keywords so far and what they do.

Keyword Action Note
21 Not a keyword, however if a 2 and a 1 are adjacent then the compiler prints 9 + 10 == 21 Example:
vro x = 67;
vro y = "67";
vro z = 6741;
vro var67 = 21;

Compiler output:

1:9: SIX SEVEN
2:10: SIX SEVEN
3:9: SIX SEVEN
3:11: 41
4:8: SIX SEVEN
4:13: 9 + 10 == 21
41 Not a keyword, however if a 4 and a 1 are adjacent then the compiler prints 41
67 Not a keyword, however if a 6 and a 7 are adjacent then the compiler prints SIX SEVEN
aight bet try, must be paired with a bro tweaking fr Unstable, may change soon
be Equals sign in variable declaration and assignment

Examples:

vro x be 0;
vro y be x + 1;
x be y + 1;
y be x - 1;
bro Private class/structure member/property
bro tweaking fr catch, must be paired with a aight bet Unstable, may change soon
cap false
clapback Return statement
crash out Throws an error/exception Unstable, may change soon. Exceptions are not planned and may be scrapped in favor of things like Rust's Result<T, E> or something
diva Declares a class/structure
eeffoc continue statement in loops
It's giving Comment. Unstable, may change soon
mogged Checks if the expression to the left is greater than the expression to the right, literally >

Example:

7 mogged 3 sus {
    cap => yap("Skill issue"),
    no cap => yap("MOGGED"),
}
mogged by Opposite of mogged, so <

Example:

7 mogged by 3 sus {
    cap => yap("cap"),
    no cap => yap("MOGGED"),
}
moot Defines a public class/structure member/property
moots Checks if the two values are equal, like a moots b.
no cap true
nt tuff Same as so kevin Raises a compile error if it's not followed by as much wilted rose (🥀) emojis as the column number that the nt tuff keyword starts at

Example:

It's giving the "nt tuff" keyword is at column 3 (1:3), so it has to be followed by 3 wilted rose emojis
x nt tuff🥀🥀🥀 sus {
    no cap => yap("x is sus"),
    cap => yap("x is not sus"),
}
so kevin Append to the end of an expression to check if it's falsey

Example:

x so kevin sus {
    nocap => yap("x is false"),
    cap => yap("x is true"),
}
so owen Append to the end of an expression to check if it's truthy

Example:

x so owen sus {
    nocap => yap("x is true"),
    cap => yap("x is false"),
}
so tuff Append to an expression to check if it's truthy Raises a compile error if it's not followed by as much of these emojis (❤️‍🩹 or 🌹))

Example:

x so tuff❤️‍🩹❤️‍🩹❤️‍🩹 {
    nocap => yap("x is true"),
    cap => yap("x is false"),
}
sus Rust match expression
ts self or this in "normal" programming languages Unstable, may change soon
vro Declares a variable or function Unstable, may change soon

Example Programs

Hello World

vro main() {
    yap("Hello world");
}

Deadfish interpreter

vro main() {
    vro source be input("> ");

    vro acc be 0;

    for char in source {
        char sus {
            'i' => acc be acc + 1,
            'd' => acc be acc - 1,
            's' => acc be acc * acc,
            'o' => yap(acc),
            _ => eeffoc,
        }
    }
}

Stack

Note: Borrowed from the LOLCODE example

diva Stack {
    bro length be 0;
    bro capacity be 0;
    bro array be [];

    moot size {
        get => ts length,
    };

    moot top {
        get => clapback ts length moots 0 sus {
            no cap => crash out "Sussy baka", It's giving no stack top
            cap => ts array[ts length - 1],
        },
    };

    vro push(ts, value) {
        ts length + 1 mogged ts capacity sus {
            no cap => {
                It's giving idk if the language is low-level yet so we fake it
                vro old_capacity be ts capacity;
                vro new_capacity be ts capacity mogged 8 sus {
                    no cap => ts capacity * 2,
                    cap => 8,
                };
                array resize(new_capacity);
                ts capacity be new_capacity;
            }
        }

        ts array[ts length] be value;
        ts length be ts length + 1;
    }

    vro pop(ts) {
        ts length mogged 0 sus {
            cap {
                It's giving THE STACK IS EMPTY YOU CANNOT POP IT
                crash out "Sussy baka";
            }
        }

        ts length be ts length - 1;
        clapback ts array[ts length];
    }

    vro peek(ts) {
        ts length mogged 0 sus {
            cap => crash out "Sussy baka";
        }

        clapback ts array[ts length - 1];
    }
}

vro main() {
    vro pile giving Stack vibes;

    pile push("skibidi");
    pile push("toilet");

    yap(pile size); It's giving 2

    yap(pile peek());
    yap(pile top);

    yap(pile pop());
    yap(pile pop());

    yap(pile size); It's giving 0

    aight bet {
        yap(pile pop());
    } bro tweaking fr {
        yap("Nahh bro tweaking fr");
    }
}

Progress

So far, Mango is still unimplemented. However User:RaiseAfloppaFan3925 is making a reference implementation. Here is a list of the currently implemented features and those that are subject to change.

Implemented

Feature Status Notes
67, 41, and 21 printing messages during compilation

Example:

vro x = 6741;
vro var67 = 21;

Compiler output:

1:9: SIX SEVEN
1:11: 41
2:8: SIX SEVEN
2:13: 9 + 10 == 21
Fully implemented

Unstable

Feature Status Notes
vro keyword

Example:

vro main() {
    vro x = 1;
}
Unimplemented A new keyword might be used for function definitions instead of vro
Exceptions and try/catch

Example:

vro sussy_function() {
    crash out "IM CRASHING OUT";
}

aight bet {
    sussy_function();
} bro tweaking fr {
    yap("Nah bro");
}
Unimplemented Exceptions and try/catch might not be implemented in favor of a simpler runtime, or something like Rust's Result<T, E>