Welcome to ShitRust! This guide will help you get started with the ShitRust programming language.
Currently, ShitRust is in development, but you can build it from source:
# Clone the repository
git clone https://github.com/Waowzar/shitrust.git
cd shitrust
# Build the compiler
cargo build --release
# Add ShitRust to your PATH
# For Linux/Mac
export PATH="$PATH:$(pwd)/target/release"
# For Windows
# Add the path to your PATH environment variable
Let's start with a simple "Hello, World!" program. Create a file named hello.sr with the following content:
fn main() -> void {
println("Hello, World!");
}
To run this program:
shitrust run hello.sr
Congratulations! You've just written and run your first ShitRust program.
ShitRust supports variable declarations with type inference:
// Variable declaration with type inference
let name = "World";
// Explicit type annotation
let age: int = 30;
// Mutable variables
let mut counter = 0;
counter += 1; // This is allowed because counter is mutable
ShitRust has several built-in types:
int: Integer numbersfloat: Floating point numbersbool: Boolean valuesstring: Text stringschar: Single characterslet x = 42;
if x > 100 {
println("x is greater than 100");
} else if x > 50 {
println("x is greater than 50 but not greater than 100");
} else {
println("x is 50 or less");
}
// While loop
let mut i = 0;
while i < 5 {
println("i is " + i.to_string());
i += 1;
}
// For loop
for j in range(0, 5) {
println("j is " + j.to_string());
}
// Iterating over collections
let fruits = ["apple", "banana", "cherry"];
for fruit in fruits {
println("I like " + fruit);
}
// Simple function
fn greet(name: string) -> void {
println("Hello, " + name + "!");
}
// Function with return value
fn add(a: int, b: int) -> int {
return a + b;
}
// Function with default parameter
fn greet_with_default(name: string = "World") -> void {
println("Hello, " + name + "!");
}
// Using the functions
greet("Alice");
let sum = add(5, 7);
println("Sum: " + sum.to_string());
greet_with_default(); // Uses default parameter
// Creating a list
let numbers = [1, 2, 3, 4, 5];
// Accessing elements
let first = numbers[0];
// Adding elements
numbers.push(6);
// List methods
let length = numbers.len();
let contains_three = numbers.contains(3);
// List comprehension
let squares = [x * x for x in numbers];
// Creating a dictionary
let user = {
"name": "Alice",
"age": 30,
"is_admin": true
};
// Accessing elements
let name = user["name"];
// Adding elements
user["email"] = "alice@example.com";
// Dictionary methods
let keys = user.keys();
let has_email = user.contains_key("email");
// Defining a struct
struct Rectangle {
width: float,
height: float,
// Method
fn area() -> float {
return self.width * self.height;
}
// Static method (constructor)
fn new(w: float, h: float) -> Rectangle {
return Rectangle { width: w, height: h };
}
}
// Creating an instance
let rect1 = Rectangle { width: 10.0, height: 5.0 };
let rect2 = Rectangle::new(20.0, 15.0);
// Calling methods
let area1 = rect1.area();
let area2 = rect2.area();
println("Area 1: " + area1.to_string());
println("Area 2: " + area2.to_string());