quickpython 0.1.3

A lightweight Python bytecode VM written in Rust
Documentation
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.1.3] - 2026-02-16

### Added

#### Generators (Task 043)
- **Generator functions** with `yield` statement
- Generator execution engine with full instruction support
- Lazy evaluation and state preservation
- Support for `StoreLocal`, `LoadLocal`, `Return`, `Jump`, `JumpIfFalse` in generator context

#### Control Flow (Task 041)
- **`pass` statement** - explicit no-op placeholder

#### Operators (Task 044)
- **Identity operators** (`is`, `is not`) for object identity comparison

#### Comprehensions (Task 045)
- **Dictionary comprehensions** - `{k: v for k, v in items}`

### Changed
- Improved test coverage from 63.82% to 82.59% (Task 040)
- CI now skips documentation-only changes

### Documentation
- Added tasks 041-045 documentation
- Added generators specification
- Simplified task documents
- Updated implementation summaries

## [0.1.2] - 2026-02-15

### Added

#### Operators (Tasks 027-029)
- **Augmented assignment operators** (`+=`, `-=`, `*=`, `/=`, `%=`) - Task 027
- **Logical operators** with short-circuit evaluation (`and`, `or`, `not`) - Task 028
- **Membership operator** (`in`) for strings, lists, dicts, and tuples - Task 029

#### String Operations (Task 030)
- String methods: `split()`, `strip()`, `startswith()`, `endswith()`
- String methods: `lower()`, `upper()`, `replace()`, `join()`
- Method chaining support

#### Data Structures (Tasks 031-032, 035)
- **Dictionary `.get()` method** with optional default value - Task 031
- **Multiple assignment and tuple unpacking** - Task 032
  - Unpack tuples: `a, b, c = (1, 2, 3)`
  - Unpack lists: `x, y = [10, 20]`
  - Variable swapping: `a, b = b, a`
- **Slicing support** for lists, strings, and tuples - Task 035
  - Basic slicing: `items[1:3]`
  - Negative indices: `items[-2:]`
  - Step parameter: `items[::2]`
  - Slice objects: `s = slice(1, 5, 2)`

#### String Formatting (Tasks 033-034)
- **F-string formatting** - Task 033
  - Basic interpolation: `f"Hello {name}"`
  - Expression evaluation: `f"Result: {x + y}"`
  - Nested expressions
- **`str()` builtin function** - Task 034
  - Convert any value to string representation

#### Type System (Task 036)
- **`isinstance()` builtin function** - Task 036
- Type objects: `int`, `float`, `bool`, `str`, `list`, `dict`, `tuple`, `NoneType`
- Runtime type checking

#### List Comprehensions (Task 037)
- **List comprehensions** with full syntax support - Task 037
  - Basic: `[x*2 for x in range(5)]`
  - With filter: `[x for x in items if x > 5]`
  - Complex expressions: `[x*2 + 1 for x in range(10) if x % 2 == 0]`
- **String iteration** support for loops and comprehensions - Task 039

#### Async/Await Support (Task 038)
- **Complete async/await implementation** with Tokio integration
  - `async def` function definitions
  - `await` expressions for coroutines
  - Coroutine objects (lazy evaluation)
- **asyncio builtin module**
  - `asyncio.sleep(seconds)` - True asynchronous sleep using Tokio runtime
  - Proper argument validation (non-negative numbers only)
- **Tokio runtime integration**
  - Real async I/O operations
  - Maintains synchronous API for backward compatibility
- Examples: `examples/async_sleep.py`

### Fixed
- **Test failures** caused by type object keywords - Task 039
  - Fixed tests using `list` and `dict` as variable names
  - Renamed to `my_list` and `my_dict` to avoid conflicts

### Changed
- List and tuple equality now compares content instead of pointer equality
- Enhanced Value enum with new variants: `Tuple`, `Slice`, `Type`, `BoundMethod`, `Coroutine`, `AsyncSleep`

### Tests
- Added 109 tests for Tasks 027-037
- Added 15 async/await tests (8 basic + 7 asyncio.sleep)
- **Total: 254 tests passing** (up from 128)

### Performance
- Short-circuit evaluation for logical operators (avoids unnecessary computation)

### Documentation
- Complete task documentation for Tasks 027-039
- Examples for all new features
- Async/await usage guide with timing demonstrations

## [0.1.1] - 2026-02-15

### Added

#### Operators (Tasks 027-029)
- **Augmented assignment operators** (`+=`, `-=`, `*=`, `/=`, `%=`) - Task 027
- **Logical operators** with short-circuit evaluation (`and`, `or`, `not`) - Task 028
- **Membership operator** (`in`) for strings, lists, dicts, and tuples - Task 029

#### String Operations (Task 030)
- String methods: `split()`, `strip()`, `startswith()`, `endswith()`
- String methods: `lower()`, `upper()`, `replace()`, `join()`
- Method chaining support

#### Data Structures (Tasks 031-032, 035)
- **Dictionary `.get()` method** with optional default value - Task 031
- **Multiple assignment and tuple unpacking** - Task 032
  - Unpack tuples: `a, b, c = (1, 2, 3)`
  - Unpack lists: `x, y = [10, 20]`
  - Variable swapping: `a, b = b, a`
- **Slicing support** for lists, strings, and tuples - Task 035
  - Basic slicing: `items[1:3]`
  - Negative indices: `items[-2:]`
  - Step parameter: `items[::2]`
  - Slice objects: `s = slice(1, 5, 2)`

#### String Formatting (Tasks 033-034)
- **F-string formatting** - Task 033
  - Basic interpolation: `f"Hello {name}"`
  - Expression evaluation: `f"Result: {x + y}"`
  - Nested expressions
- **`str()` builtin function** - Task 034
  - Convert any value to string representation

#### Type System (Task 036)
- **`isinstance()` builtin function** - Task 036
- Type objects: `int`, `float`, `bool`, `str`, `list`, `dict`, `tuple`, `NoneType`
- Runtime type checking

#### List Comprehensions (Task 037)
- **List comprehensions** with full syntax support - Task 037
  - Basic: `[x*2 for x in range(5)]`
  - With filter: `[x for x in items if x > 5]`
  - Complex expressions: `[x*2 + 1 for x in range(10) if x % 2 == 0]`
- **String iteration** support for loops and comprehensions - Task 039

#### Async/Await Support (Task 038)
- **Complete async/await implementation** with Tokio integration
  - `async def` function definitions
  - `await` expressions for coroutines
  - Coroutine objects (lazy evaluation)
- **asyncio builtin module**
  - `asyncio.sleep(seconds)` - True asynchronous sleep using Tokio runtime
  - Proper argument validation (non-negative numbers only)
- **Tokio runtime integration**
  - Real async I/O operations
  - Maintains synchronous API for backward compatibility
- Examples: `examples/async_sleep.py`

### Fixed
- **Test failures** caused by type object keywords - Task 039
  - Fixed tests using `list` and `dict` as variable names
  - Renamed to `my_list` and `my_dict` to avoid conflicts

### Changed
- List and tuple equality now compares content instead of pointer equality
- Enhanced Value enum with new variants: `Tuple`, `Slice`, `Type`, `BoundMethod`, `Coroutine`, `AsyncSleep`

### Tests
- Added 109 tests for Tasks 027-037
- Added 15 async/await tests (8 basic + 7 asyncio.sleep)
- **Total: 254 tests passing** (up from 128)

### Performance
- Short-circuit evaluation for logical operators (avoids unnecessary computation)

### Documentation
- Complete task documentation for Tasks 027-039
- Examples for all new features
- Async/await usage guide with timing demonstrations

## [0.1.0] - 2025-01-XX

Initial release with core Python features:
- Basic expressions and variables
- Functions and control flow
- Strings and print function
- Float support
- Lists and dictionaries
- For loops with break/continue
- Exception system (types, raise, try/except/finally)
- Import system (json, os, re modules)
- Comparison operators
- CLI tool (pyq)

[0.1.1]: https://github.com/VikingMew/quickpython/compare/v0.1.0...v0.1.1
[0.1.0]: https://github.com/VikingMew/quickpython/releases/tag/v0.1.0