8000 GitHub - refaktor/rye: a language trying to be flexible about expression, but strict about state
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

refaktor/rye

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Rye language 🌾

Build and Test golangci-lint OpenSSF Scorecard Go Reference Go Report Card GitHub Release Homebrew

For comprehensive documentation, tutorials, and examples, visit ryelang.org

What is Rye?

Rye is a high-level, dynamic programming language inspired by Rebol, Factor, Linux shells, and Go. It features a Go-based interpreter and interactive console, making it an excellent scripting companion for Go programs. Rye can also be embedded into Go applications as a scripting or configuration language.

Key characteristics:

  • Homoiconic: Code is data, data is code
  • Function-oriented: No keywords, everything is a function call
  • Expression-based: Everything returns a value
  • First-class functions: Functions and code blocks are values
  • Multiple dialects: Specialized interpreters for different tasks
  • Safety-focused: Explicit state changes, pure/impure function separation, validation dialect

Status: Alpha - Core language design is stable, focus is on improving runtime, documentation, and usability.

Quick Examples

print "Hello World"

"Hello World" .replace "World" "Mars" |print
; prints: Hello Mars

"12 8 12 16 8 6" .load .unique .sum
; returns: 42

{ "Anne" "Joan" "Adam" } |filter { .first = "A" } |for { .print } 
; prints:
; Anne
; Adam

fac: fn { x } { either x = 1 { 1 } { x * fac x - 1 } }
; function that calculates factorial
range 1 10 |map { .fac } |print\csv
; prints: 1,2,6,24,120,720,5040,40320,362880,3628800

kind: "admin"
open sqlite://data.db |query { select * from user where kind = ?kind }
; returns: Table of admins

read %name.txt |fix { "Anonymous" } |post* https://example.com/postname 'text
; makes HTTP post of the name read from a file, or "Anonymous" if file failed to be read

For more examples and interactive demos, visit ryelang.org/meet_rye/

Building Rye from Source

Prerequisites

  1. Install Go 1.21.5 or later:
    # Example for Linux
    wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
    rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
    export PATH=$PATH:/usr/local/go/bin
    go version

Clone and Build

  1. Clone the repository:

    git clone https://github.com/refaktor/rye.git
    cd rye
  2. Build options:

    • Minimal build (fewer modules, smaller binary):

      go build -tags "b_tiny" -o bin/rye
    • Standard build (most modules included):

      go build -o bin/rye
      # or simply
      ./build
    • Custom build (select specific modules):

      go build -tags "b_tiny,b_sqlite,b_http,b_json" -o bin/rye
  3. Run Rye:

    # Run the REPL
    bin/rye
    
    # Run a script
    bin/rye script.rye

Building WASM Version

Rye can run in browsers and other WASM environments:

GOOS=js GOARCH=wasm go build -tags "b_tiny" -o wasm/rye.wasm main_wasm.go
# or use the helper script
./buildwasm
# Then visit http://localhost:8085/ryeshell/

Running Tests

cd info
../bin/rye . test

# Generate function reference
../bin/rye . doc

Getting Rye (Pre-built)

If you prefer not to build from source, you have several options:

Binaries

Pre-compiled binaries for Linux, macOS, Windows, and WASM are available under Releases.

Package Managers

  • Homebrew (macOS/Linux):
    brew install ryelang

Docker Images

  • Binary image (includes Rye and Emacs-nox):

    docker run -ti ghcr.io/refaktor/rye
  • Development image (build from repository):

    docker build -t refaktor/rye -f .docker/Dockerfile .
    docker run -ti refaktor/rye

Resources

Extensions and Related Projects

Editor Support

  • VS Code: Search for "ryelang" in the Extension marketplace
  • Emacs: Syntax highlighting available soon

Community and Contact

About

a language trying to be flexible about expression, but strict about state

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Sponsor this project

 

Packages

 
 
 
0