Skip to content
/ ray Public

A programming language, version control system, database, theorem prover, and rendering engine. And its respective IDE: The Ether.

License

Notifications You must be signed in to change notification settings

orbitmines/ray

Repository files navigation

Note

This is still a work in progress. Relevant progress is documented in this repo and here


header

OrbitMines Discord

What is this?

This thing is, in essence, a programming language (Ray), an IDE (Ether) and a conceptual framework to think about programs. Though to me, most importantly, it is here as infrastructure. Infrastructure for the design and implementation of a different category of (programming) interfaces.

It handles surrounding context, structure and pattern-matching, defines control-flow and dynamics and acts as a programming language, theorem prover, version control system, database and rendering engine.



Local setup

There are several ways of using this programming language.

  • Download our IDE: Ether (TODO)

  • Go to the online playground (TODO)

  • Or download manually

    git clone git@github.com:orbitmines/ray.git
    cd ray && ./install.sh
    ether
  • Using other IDEs


The Ray Programming Language

snippets from 2025 Progress Update: Towards a Universal Language

I'll start this excursion from the perspective of a new text-based programming language. Though this project intends to step away from the limitations of the text file, all programming infrastructure relies on it. A move away from it, will require additional infrastructure. Even if this is achieved, being able to express as much as possible in a traditional text-based format will be beneficial. Though there will be design features which are simply not translatable to a purely text-based programming language.

...

Since they are castable to boolean, you can call functions accepting a boolean with them:

s (x: boolean) => x ? "Y" : "N"
s(false & true) // "Y" & "N"
s(boolean) // "Y" | "N"

...

We might have a type requirement of one of the methods on the number, take the length of the number for instance, which in this case would be two. We'd check for that simply with:

Binary{length == 2}

...

An example of this sort of type, pattern can be seen in how IPv6 is implemented. Where there are two complications to a valid address: (1) a sequence of zero segments can be compressed with '::' and (2) an IPv4 address might be embedded in them. Making a valid address something like ::ffff:0.0.0.0 or 64:ff9b::.

class IPv6 <
  (left: Segment[]).join(":")?,
  zero_compression: "::" (? if !defined_segments.empty),
  (right: Segment[]).join(":")?,
  (":", embedded_ipv4: IPv4)?

  defined_segments: Segment[] =>
    left, right, embedded_ipv4 as Binary

  dynamically assert defined_segments.length (zero_compression
    ? < NUMBER_OF_SEGMENTS - 1 // '-1' Because: The symbol "::" MUST NOT be used to shorten just one 16-bit 0 field. (https://datatracker.ietf.org/doc/html/rfc5952#section-4.2.2)
    : == NUMBER_OF_SEGMENTS
  )
  // When there is an alternative choice in the placement of a "::", the longest run of consecutive 16-bit 0 fields MUST be shortened (https://datatracker.ietf.org/doc/html/rfc5952#section-4.2.3)
  dynamically assert left & right ~= 0[] -- .length <= number_of_compressed_segments if zero_compression
  // When the length of the consecutive 16-bit 0 fields are equal, the first sequence of zero bits MUST be shortened. (https://datatracker.ietf.org/doc/html/rfc5952#section-4.2.3)
  dynamically assert left ~= 0[] -- .length != number_of_compressed_segments if zero_compression

  static NUMBER_OF_SEGMENTS = 8
  static SEGMENT_LENGTH = 16

  static Segment = Hexadecimal{length <= 4}

... continue reading

About

A programming language, version control system, database, theorem prover, and rendering engine. And its respective IDE: The Ether.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Sponsor this project

  •  
  •