1
0
Fork 0
forked from fun/fun
fun/spec/v0.1.md
2025-09-11 23:24:17 +02:00

272 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Fun Language Specification v0.1
**Fun (Fun Uses Nothing)** is a lightweight, multi-purpose programming language designed for clarity, safety, and—above all—fun.
This document defines the language syntax and semantics as of version 0.1.
## 1. Introduction
Fun is a scripting and systems programming language inspired by the best ideas from C, Lua, and Python—yet deliberately strict in its rules to ensure readability and consistency.
- **Readable**: fixed indentation rules, no ambiguous syntax.
- **Strict**: type safety, no implicit coercion, no silent shadowing.
- **Hackable**: strong system integration with safe defaults.
- **Fun**: simple enough to learn in a day, expressive enough for real work.
## 2. Lexical Structure
### Case Sensitivity
Fun is **case-sensitive**. `Fun` and `fun` are different identifiers.
### Identifiers
- May contain `az`, `AZ`, `09`, and `_`.
- Must not start with a number.
### Keywords
Reserved words cannot be redefined:
`if`, `else`, `for`, `while`, `fi`, `f`, `global`, `private`, `return`, `true`, `false`.
### Comments
- Single-line:
// This is a comment
- Multi-line:
/*
This is
a multi-line comment
*/
### Whitespace
- Indentation is exactly two spaces.
- Tabs are forbidden.
- Line breaks terminate statements (no semicolons).
## 3. Data Types
### Number
- 64-bit signed integer.
```
number n = 42
```
### Float
- 64-bit IEEE floating point.
```
float pi = 3.14159
```
### String
- Double or single quotes may be used.
- ' has higher priority, so " can appear unescaped inside '...'.
- To include ' inside '...', escape with \'.
```
string s1 = "Hello"
string s2 = 'World'
string s3 = "He said: 'Fun!'"
```
### Boolean
- Canonical values: true, false.
- 1 and 0 are accepted in conditionals.
```
boolean flag = true
```
### Byte
- Raw byte value.
```
byte b1 = 0x23
byte b2 = "A"
```
### Array
- Declared using [ ... ].
```
array nums = [1, 2, 3]
```
## 4. Variables and Scope
- Global variables: accessible everywhere.
- Private variables: file-local, cannot be used outside the file.
- Redefining globals or shadowing names is forbidden.
```
global string message = "Hello"
private number count = 42
```
## 5. Operators
- Arithmetic: + - * / %
- Comparison: == != > < >= <=
- Boolean: && || !
- Assignment: =
## 6. Control Flow
### If/Else
```
if(x != y)
print x
else if(a == b || h != i)
print a + b
else
if(k < 1 && l > 1)
print "Buh!"
fi
fi
```
### For Loops
```
for i in range(1, 10)
print i
```
### While Loops
```
while x < 10
print x
x = x + 1
```
## 7. Functions
### Internal Functions
Provided by the runtime (cannot be redefined). Examples:
print, range, system, exec.
```
print "Hello, Fun!"
```
### User-Defined Functions
Must be declared with the f prefix.
```
f add(a, b)
return a + b
```
### Return Values
- Scalars: return a + b
- Arrays: return [a, b, c]
## 8. Modules & Includes
### System Includes
Looked up in /var/lib/fun/, supporting .so (native) and .fun (Fun code).
```
&#35;include crypt/md5
&#35;include date
&#35;include math
```
### Local Includes
From the current working directory:
```
&#35;include utils/file.fun
```
### Absolute Includes
Full path:
```
&#35;include /home/user/project/lib.fun
```
## 9. System Integration
### system
Executes a command, returns exit code.
```
system("ls -l")
```
### exec
Executes a command, returns stdout.
```
string result = exec("date")
```
### spawn
Executes a command asynchronously, returns process ID.
```
number pid = spawn("sleep 10")
```
## 10. Error Handling
- No implicit type coercion.
- Redefinition of globals is a compile-time error.
- Using undefined variables or functions is an error.
- Internal/runtime functions cannot be shadowed.
## 11. Examples
### Hello World
```
print "Hello, World!"
```
### Loop with Range
```
for i in range(1, 5)
print i
```
### User Function
```
f greet(name)
return "Hello " + name
print greet("Fun")
```
### System Call
```
string now = exec("date")
print "Current time: " + now
```
## 12. License
This document and the Fun language reference are licensed under the Apache License 2.0