We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.
Plutonium
Plutonium is a dynamically typed interpreted programming language which started creation in 2026. It is based on the dynamically typed interpreted programming language called Plutonium created by Shahryar Ahmad in around 2021, but is also based on Entropy and the concept of decay chains.
Datatypes
There are some data types:
Number
All numbers are underlyingly quadruple-precision floats. Only greater than and less than comparisons are available since the values are so unstable. They are written like 1 or 1.0.
Char
Characters correspond to numbers, with characters which are coerced from numbers corresponding to the number value modulo 1114112. They are written like 'A' or '1'.
List
Lists can consists of numbers, chars, strings, or lists in a specific order. They are written like ['1', 2, "3", 4.01] and can contain any type of thing.
String
Strings are similar to lists of solely chars, but they can't take all of the functions of lists and are immutable. They are written like "hello" and "1, 2, 3, 4".
Byte
Bytes are single-precision floating point values. For anything turned into a byte, the value is truncated to fit into a single-precision floating point. They are written like 1b and 1.0b.
Bool
Bools are values consisting of just the decimal part of a floating point number. Values are falsy if they are less than 0.5 and truthy otherwise. They are called ;true, which defaults to 0.25, and ;false, which defaults to 0.75.
Null
Null is a single value called ;null which isn't equal to anything else. Ideally, a good extension to any thing is a situation where null values create warnings.
Keywords
Keywords are represented by values which decay and change over time, and are rounded to the nearest integer to find the true value. The keywords go in front of variables. If the rounded value of an operation goes above the highest possible expected value, they roll over to the smallest value and vice versa.
Boolean
All of these have two arguments and return values. They do not need parentheses and are separated from their arguments by whitespace.
| Number | Keyword | Return |
|---|---|---|
| 1 | ;and | logical and bool |
| 2 | ;or | inclusive or bool |
| 3 | ;xor | exclusive or bool |
| 4 | ;lt | if 1 less than or equal to 2 |
| 5 | ;gt | if 1 greater than or equal to 2 |
| 6 | ;add | 1 plus 2 |
| 7 | ;sub | 1 minus 2 |
| 8 | ;mul | 1 times 2 |
| 9 | ;div | 1 divided by 2 |
| 10 | ;mod | 1 modulo 2 (including decimal place) |
For example, ;and ;gt 2 1 ;lt 1 2 would return ;true.
If any of the arguments are null, the return value is ;null regardless of anything else.
Assignment
There is only one assignment operator. It takes two operations and does not need parentheses.
| Keyword | Effect |
|---|---|
| ;name | 1 becomes the name of 2 |
Variable names can only consist of uppercase letters, lowercase letters, and underscores. Variables are initialized as having the value ;null.
Control Flow and Data
These things use parentheses around their first argument and parentheses around their second argument.
| Number | Keyword | Effect |
|---|---|---|
| 1 | ;if | if-statement |
| 2 | ;while | while statement |
| 3 | ;class | class definition (first part contains class attributes) |
| 4 | ;else | else-if statement (only works as an else statement if the first thing is ;true)
|
| 5 | ;func | function definition (first part contains function input variables) |
The function returns the last thing which exists in it. In order to get it to return nothing, you have to make it return ;null.
To define a class called Class which contains an attribute called att a function called Function which takes in two arguments called one and two and and defines a float named three as att from Class before outputting one if one is greater than two and ;null otherwise, you would write ;name Class ;class ( att ) ( ;name Function ;func ( one two ) ( ;name three Class.att ;if ( ;gt one two ) ( one ) ;else ( ;true ) ( ;null) ) ).
You can stylize it like:
;name Class ;class(att) ( ;name Function ;func(one two) ( ;name three Class.att ;if ( ;gt one two )( one ) ;else ( ;true ) ( ;null) ) )
I think it can even be like:
;nameClass;class(att)(;nameFunction;func(one two)(;namethree Class.att;if(;gtone two)(one);else(;true)(;null)))
This is because the keywords are distinct from one another, so the only spaces are needed around the variables.
You can access variables defined within all of these things using a dot notation, like Class.Function.three to get the value of three.