Starry
Jump to navigation
Jump to search
Starry, designed by Yutaka Hara in 2008 for his book, Rubyで作る奇妙なプログラミング言語, is a stack-based esoteric programming language. The book discusses the implementation of esolangs in Ruby; Starry is used as an example language.
Syntax
The only meaningful characters are space and +*.,`' -- all other characters are ignored. Each sequence of spaces followed by non-space character represents a single instruction.
Instructions
| Spaces | Final | Description |
|---|---|---|
| 0 | + |
Invalid opcode. |
| 1 | + |
Duplicate top of stack. |
| 2 | + |
Swap top 2 stack elements. |
| 3 | + |
Rotate top 3 stack elements. |
| 4 | + |
Pop top of stack. |
| n ≥ 5 | + |
Push n − 5 to stack. |
| 0 mod 5 | * |
Pop y, pop x, push x + y. |
| 1 mod 5 | * |
Pop y, pop x, push x − y. |
| 2 mod 5 | * |
Pop y, pop x, push x * y. |
| 3 mod 5 | * |
Pop y, pop x, push x / y. |
| 4 mod 5 | * |
Pop y, pop x, push x mod y. |
| 0 mod 2 | . |
Pop a value and print it as a number. |
| 1 mod 2 | . |
Pop a value and print it as an ASCII character. |
| 0 mod 2 | , |
Read a number from input. |
| 1 mod 2 | , |
Read an ASCII value from input. |
| n | ` |
Mark label n. |
| n | ' |
Pop a value; if non-zero, jump to label n. |
Computational class
Stack values are unbounded; using the swap, add, subtract, label, and "branch if non-zero" instructions, conversion from a 2-register Minsky machine is trivial. Therefore, Starry is Turing complete.
Examples
Hello, world!
+ + * +
* + . + + * +
* * + . + * + . + .
+ * + . + +
* + * * + . + *
+ . + + * + *
* + . + * + . + *
+ . + * + . + * + .
+ + * + *
* + .
Fibonacci numbers
+ + ` + + * + . + . + '
Disassembled:
[[:push, 0], [:push, 1], [:label, 1], [:dup], [:rotate], [:+], [:dup], [:num_out], [:push, 10], [:char_out], [:dup], [:jump, 1]]
99 bottles of beer
+ + *` +. + + * . + + *
+ * + . +* + . +* + . + . + * + . + * + .
+* + . + + * .
+ * + . + * + . +
+ * . + * + . +* + . + . +* + . + + * . + * + .
+ * + . + + * . +* + . + * + . + * + .
+ + * . +* + . + * + . +* + . . + . +. + + * . +
+ * + * + . +* + . +* + . + . + * + .
+ * + . +* + . +
+ * . + * + .
+ * + . + + * . + * + . +* + . + . +* + .
+ . +* + . + * + . +* + . + * + .
+ + * . +* + . + * + . + * + . + + * . + * + . +* + . +* + . + * + . + . +* + . + * + .
+* + . + . + + * .
+ * + . +* + . +
+ * . + * + .
+* + . + * + . +* + .
+ * + . + * .
+ . + * +. + + * . + + * + * + . +* + . +* + . + . + * + .
+ * + . +* + . + + * . + * + . + * + . + + * . + * + .
+* + . + . +* + . +
+ * . + * + . + * + .
+ + * . +* + . + * + . + * + . + + * .
+* + .
+ * + . +* + . . + + . . +'
See also
External resources
- Ruby implementation from the book on GitHub