- Add while, for, and do-while loops with break/continue - Implement assignment statements (prevents if(x=10) bugs) - Keep assignment expressions only for for-loop clauses - Fix critical memory management bug (dangling pointers in cleanup) - Add automatic memory cleanup with conservative reference counting - Consolidate documentation into single reference file - Add comprehensive test coverage for all loop types and edge cases - VSCode extension for bob highlighting and snippets
99 lines
2.5 KiB
Markdown
99 lines
2.5 KiB
Markdown
# Bob
|
|
|
|
A modern programming language focused on safety and clarity.
|
|
|
|
## Design Philosophy
|
|
|
|
Bob prioritizes safety and functional programming while keeping things practical.
|
|
|
|
## Assignment System
|
|
|
|
Bob uses two types of assignments to prevent bugs while keeping useful functionality:
|
|
|
|
### Assignment Statements
|
|
```go
|
|
var x = 5;
|
|
x = 10; // Regular assignment
|
|
y += 5; // Compound assignment
|
|
```
|
|
|
|
### Assignment Expressions (For Loops Only)
|
|
```go
|
|
for (var i = 0; i < 5; i = i + 1) { } // Assignment in for loop
|
|
for (j = 0; j < 5; j += 1) { } // Assignment in for loop
|
|
```
|
|
|
|
### Why This Design?
|
|
|
|
**Prevents Common Bugs:**
|
|
```go
|
|
// This would be a bug in many languages:
|
|
if (x = 10) { } // Parse error in Bob - prevents accidental assignment
|
|
|
|
// Bob forces you to write:
|
|
x = 10;
|
|
if (x == 10) { } // Clear comparison
|
|
```
|
|
|
|
**Keeps Expressions Pure:**
|
|
```go
|
|
// Prevents side effects in expressions:
|
|
var result = (x = 10) + (y = 20); // Parse error
|
|
|
|
// Forces clean code:
|
|
x = 10;
|
|
y = 20;
|
|
var result = x + y; // Pure expression
|
|
```
|
|
|
|
**Supports Functional Programming:**
|
|
```go
|
|
// Prevents confusing patterns:
|
|
var value = condition ? (x = 10) : (x = 20); // Parse error
|
|
|
|
// Encourages clean patterns:
|
|
x = condition ? 10 : 20; // Clear assignment
|
|
```
|
|
|
|
**Keeps For Loops Practical:**
|
|
```go
|
|
// For loops work naturally:
|
|
for (var i = 0; i < 10; i = i + 1) { } // Assignment expressions allowed
|
|
for (j = 0; j < 10; j += 1) { } // Assignment expressions allowed
|
|
```
|
|
|
|
### Benefits
|
|
|
|
1. **Prevents Common Bugs**: No accidental assignments in conditionals
|
|
2. **Expression Purity**: Expressions have no side effects
|
|
3. **Clear Semantics**: Assignments are clearly statements
|
|
4. **Functional Programming**: Encourages pure function patterns
|
|
5. **Practical For Loops**: Maintains useful for loop syntax
|
|
6. **Easier Debugging**: Clear separation of assignment and expression logic
|
|
|
|
## Features
|
|
|
|
- **Type Safety**: Dynamic typing with runtime type checking
|
|
- **Functional Programming**: First-class functions, closures, recursion
|
|
- **Memory Management**: Automatic memory management
|
|
- **Error Handling**: Comprehensive error reporting
|
|
- **Standard Library**: Built-in functions for common operations
|
|
- **Tail Call Optimization**: Efficient recursive function calls
|
|
|
|
## Documentation
|
|
|
|
See [BOB_LANGUAGE_REFERENCE.md](BOB_LANGUAGE_REFERENCE.md) for complete language documentation.
|
|
|
|
## Building
|
|
|
|
```bash
|
|
make clean && make
|
|
./build/bob your_file.bob
|
|
```
|
|
|
|
## Testing
|
|
|
|
```bash
|
|
./build/bob test_bob_language.bob
|
|
```
|