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.

Starry

From Esolang
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