pluto-lang-0.4.2 is not a library.
Pluto Programming Language

🚀 Quick Start
cargo install pluto-lang
pluto-lang
pluto-lang script.po
Your first Pluto program:
/* Hello World in Pluto */
print("Hello, World!");
📖 Table of Contents
✨ Features
Core Features
- 🔄 Dynamic typing with type inference
- 🎯 First-class functions with anonymous function support
- 🎨 Named arguments and default parameters
- 🛡️ Immutable by default
- 📚 Rich standard library
- 🎲 Modern random number generation (Xoshiro256**)
- 💻 Interactive REPL environment
- 🔄 Iterative programming model
Key Highlights
/* Variables and functions */
let x = 42;
let greet = (name="World") -> {
print("Hello, " + name + "!");
};
/* Array operations (immutable) */
let numbers = [1, 2, 3];
let doubled = numbers.map((x) -> x * 2); /* [2, 4, 6] */
/* Random number generation */
let dice = Random.int(1, 6);
let probability = Random.float();
📥 Installation
Prerequisites
- Rust (edition 2021 or later)
- Cargo package manager
Option 1: Install via Cargo
cargo install pluto-lang
Option 2: Build from Source
git clone https://github.com/mi66mc/pluto
cd pluto
cargo install --path .
📚 Language Guide
Comments
Pluto uses block comments:
/* Single line comment */
/* Multi-line
block comment */
let x = 42; /* Inline comment */
Variables and Types
/* Basic types */
let number = 42; /* Integer */
let float = 3.14; /* Float */
let text = "Hello"; /* String */
let flag = true; /* Boolean */
let empty = null; /* Null */
/* Type conversion */
let str_num = "123".to_int();
let str_float = "3.14".to_float();
let num_str = 42.to_string();
Functions
/* Arrow function with default parameters */
let greet = (name="World", greeting="Hello") -> {
print(greeting + ", " + name + "!");
};
/* Usage */
greet(); /* "Hello, World!" */
greet("Alice"); /* "Hello, Alice!" */
greet(greeting="Hi", name="Bob"); /* "Hi, Bob!" */
Data Structures
Arrays (Immutable)
/* Creating arrays */
let numbers = [1, 2, 3, 4, 5];
/* Array operations (all return new arrays) */
let longer = numbers.push(6); /* [1, 2, 3, 4, 5, 6] */
let shorter = numbers.pop(); /* [1, 2, 3, 4] */
let filtered = numbers.remove(2); /* [1, 2, 4, 5] */
let doubled = numbers.map((x) -> x * 2); /* [2, 4, 6, 8, 10] */
/* Array properties */
print(numbers.len()); /* 5 */
print(numbers.sum()); /* 15 */
HashMaps
/* Creating hashmaps */
let user = {
"name": "John",
"age": 30
};
/* HashMap operations */
let updated = user.set("city", "New York");
print(user.get("name")); /* "John" */
print(user.len()); /* 2 */
Control Flow
Conditional Statements
if x > 0 {
print("Positive");
} else if x < 0 {
print("Negative");
} else {
print("Zero");
}
Loops
/* For loop */
for (let i = 0; i < 5; i++) {
print(i);
}
/* While loop */
let i = 0;
while (i < 5) {
print(i);
i++;
}
🛠️ Built-in Modules
Random Module
/* Random number generation */
let num = Random.int(1, 100); /* Integer in range [1, 100] */
let prob = Random.float(); /* Float in range [0, 1) */
let coin = Random.bool(0.5); /* Boolean with 50% probability */
let shuffled = Random.shuffle(arr); /* Shuffle array */
Math Module
/* Mathematical operations */
print(Math.pi); /* π constant */
print(Math.pow(2, 8)); /* Power function (256) */
Time Module
/* Time operations */
print(Time.now()); /* Unix timestamp (seconds) */
print(Time.now_ms()); /* Unix timestamp (milliseconds) */
Time.sleep(1000); /* Sleep for 1 second */
📝 Examples
Monte Carlo Pi Estimation
/* Estimate Pi using Monte Carlo method */
let points = 1000000;
let inside = 0;
for (let i = 0; i < points; i++) {
let x = Random.float();
let y = Random.float();
if (x * x + y * y <= 1.0) {
inside++;
}
}
let pi = 4.0 * inside / points;
print("Estimated Pi:", pi);
Card Deck Shuffling
/* Create a deck of cards */
let suits = ["Hearts", "Diamonds", "Clubs", "Spades"];
let ranks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
let deck = [];
/* Build the deck */
for (let s = 0; s < suits.len(); s++) {
for (let r = 0; r < ranks.len(); r++) {
deck = deck.push(ranks[r] + " of " + suits[s]);
}
}
/* Shuffle and display */
let shuffled_deck = Random.shuffle(deck);
print("First 5 cards:");
for (let i = 0; i < 5; i++) {
print(shuffled_deck[i]);
}
🤝 Contributing
We welcome contributions! Here's how you can help:
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature)
- Commit your changes (
git commit -m 'Add some AmazingFeature')
- Push to the branch (
git push origin feature/AmazingFeature)
- Open a Pull Request
For major changes, please open an issue first to discuss what you would like to change.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
📚 Language Reference
Built-in Types and Methods
String Methods
| Method |
Parameters |
Returns |
Description |
len() |
none |
Number |
Returns string length |
to_int() |
none |
Number |
Converts string to integer if possible |
to_float() |
none |
Float |
Converts string to float if possible |
to_upper() |
none |
String |
Converts string to uppercase |
to_lower() |
none |
String |
Converts string to lowercase |
char_at(index) |
Number |
String |
Returns character at index as string |
Number Methods
| Method |
Parameters |
Returns |
Description |
to_string() |
none |
String |
Converts number to string |
to_float() |
none |
Float |
Converts number to float |
Float Methods
| Method |
Parameters |
Returns |
Description |
to_string() |
none |
String |
Converts float to string |
to_int() |
none |
Number |
Converts float to integer |
Array Methods
| Method |
Parameters |
Returns |
Description |
len() |
none |
Number |
Returns array length |
push(element) |
Any |
Array |
Returns new array with element added |
pop() |
none |
Array |
Returns new array with last element removed |
remove(index) |
Number |
Array |
Returns new array with element at index removed |
sum() |
none |
Float |
Returns sum of numeric elements |
map(function) |
Function |
Array |
Returns new array with function applied to each element |
HashMap Methods
| Method |
Parameters |
Returns |
Description |
len() |
none |
Number |
Returns number of key-value pairs |
get(key) |
String |
Any |
Returns value associated with key |
set(key, value) |
String, Any |
HashMap |
Returns new hashmap with key-value pair added/updated |
Built-in Modules
Math Module
| Function/Constant |
Parameters |
Returns |
Description |
Math.pi |
none |
Float |
Mathematical constant π |
Math.pow(base, exp) |
Number/Float, Number/Float |
Float |
Returns base raised to exp power |
Time Module
| Function |
Parameters |
Returns |
Description |
Time.now() |
none |
Number |
Current Unix timestamp in seconds |
Time.now_ms() |
none |
Number |
Current Unix timestamp in milliseconds |
Time.sleep(ms) |
Number |
Number |
Pauses execution for specified milliseconds |
Random Module
| Function |
Parameters |
Returns |
Description |
Random.int(min, max) |
Number, Number |
Number |
Random integer in range [min, max], defaults to [0, 100] |
Random.float() |
none |
Float |
Random float in range [0, 1) |
Random.bool(probability) |
Float/Number |
Boolean |
Random boolean with given probability (default 0.5) |
Random.choice(array) |
Array |
Any |
Random element from array |
Random.shuffle(array) |
Array |
Array |
Returns new shuffled array |
Global Functions
| Function |
Parameters |
Returns |
Description |
print(...args, end="\n") |
Any..., String |
null |
Prints arguments with space separator. Optional 'end' parameter specifies ending (default "\n") |
type(value) |
Any |
String |
Returns type name of value |
input(prompt?) |
String? |
String |
Reads line from stdin with optional prompt |
exit(code?) |
Number? |
never |
Exits program with optional code (default 0) |
format(template, ...args) |
String, Any... |
String |
Formats string replacing {} with arguments |
Operators
| Operator |
Types |
Description |
+ |
Number/Float/String |
Addition or concatenation |
- |
Number/Float |
Subtraction |
* |
Number/Float |
Multiplication |
/ |
Number/Float |
Division |
% |
Number/Float |
Modulo |
== |
Any |
Equality comparison |
!= |
Any |
Inequality comparison |
< |
Number/Float |
Less than |
> |
Number/Float |
Greater than |
<= |
Number/Float |
Less than or equal |
>= |
Number/Float |
Greater than or equal |
++ |
Number/Float |
Postfix increment |
-- |
Number/Float |
Postfix decrement |
Control Flow
/* Variable declaration */
let name = value;
/* If statement */
if (condition) {
/* code */
} else if (another_condition) {
/* code */
} else {
/* code */
}
/* While loop */
while (condition) {
/* code */
}
/* For loop */
for (let i = 0; i < 10; i++) {
/* code */
}
/* Break and continue */
break;
continue;
Note: All data structures in Pluto are immutable by default. Operations that appear to modify data structures actually return new copies with the modifications applied.