Ixux is an object-oriented esolang by User:BoundedBeans inspired by Unix/Linux commands.

Basic concepts[edit]

Syntax[edit]

Ixux has significant whitespace, where each level should be exactly four spaces indented from the last.

A class is written like:

?CLASS? @ClassName@
    ?METHOD? @MethodName@
        *code*
    ?METHOD? @AnotherMethod@
        *code*

A class must have a method named @Init@ that creates the object based on the parameters.

A special syntax exists for a line that activates on any line containing exactly three exclamation points.

Ignored!number of preceding spaces!line contents!ignored

For example:

A comment!8!{ECHO} [486921] => [2F7573722F2E2E2F610A]!Another comment

Equality semantics[edit]

Special variables[edit]

Special classes and methods[edit]

Special classes and methods have names starting with Ixux_ or IxuxE_, which are reserved. Ixux_ is for official functionality while IxuxE_ is for extensions.

List of special classes[edit]


Commands[edit]

The only statement is the assignment statement, written as:

(Command) => (file path as hex string)
: @[MethodName]@ [ObjectPath] [ParameterPath]* Calls a method on the object with parameters.
. @[ClassName]@ [ParameterPath]* Constructs an object with the @Init@ method.
{ECHO} [Argument]* Returns the arguments, separated by byte 32, followed by byte 10. If one of the arguments is "-n", it is ignored and byte 10 is not added to the end.
{CAT} [Argument]* Linux cat with support for -AbeEnstTuv. Does not support long options. Returns the output.
{CUT} [Argument]* Linux cut with support for -bcfds and --output-delimiter=string. Returns the output.
{PASTE} [Argument]* Linux paste with support for -d. Returns the output.
{XXD} [Argument]* Linux xxd with support for -abcEglprsu. Long options not supported. Returns output.
{HEAD} [Argument]* Linux head with support for -cn and negative numbers for the values of those options.
{RM} [Argument]* Linux rm with support for -rf. Long options and -R not supported. Returns output.
^[FilePathHex] Evaluates the contents of the file or variable as a line of code.
| [CommandInNestableAngleBrackets]+ Makes a chain of piping outputs to inputs. Returns output of the final command.
% [FilePath1] [FilePath2] ~[LabelName]~ If the two variables are equal, goto the command after the ~~ command with the same label name and return the empty string. Otherwise, just return the empty string.
~[LabelName]~ Label placeholder, when encountered (such as by advancing from the previous command), return the empty string.

Examples[edit]

Hello, world![edit]

?CLASS? @StartClass@
    ?METHOD? @Init@
        {ECHO} [48656C6C6F2C20776F726C6421] => [2F6465762F7374646F7574]

Truth-machine[edit]

?CLASS? @StartClass@
    ?METHOD? @Init@
        {HEAD} [2D63] [31] [2F6465762F737464696E] => [2F7573722F2E2E2F7472757468]
        {ECHO} [2D6E] [30] => [2F7573722F2E2E2F31]
        % [2F7573722F2E2E2F7472757468] [2F7573722F2E2E2F31] ~Zero~ => [2F7573722F2E2E2F6A756E6B]
        ~Loop~ => [2F7573722F2E2E2F6A756E6B]
        {ECHO} [2D6E] [31] => [2F6465762F7374646F7574]
        % [2F7573722F2E2E2F31] [2F7573722F2E2E2F31] ~Loop~ => [2F7573722F2E2E2F6A756E6B]
        ~Zero~ => [2F7573722F2E2E2F6A756E6B]
        {ECHO} [2D6E] [30] => [2F6465762F7374646F7574]