fast_json/README.md
2026-02-17 12:06:32 -03:00

63 lines
2.4 KiB
Markdown

# fast_json - High-Performance MQL5 JSON Library
> "If your JSON parser needs recursion, you're doing it wrong."
## Overview
**fast_json** is a production-grade, high-performance JSON library for MQL5, engineered for scenarios where **I/O throughput** and **memory efficiency** are paramount.
Unlike standard libraries that fragment the heap with thousands of small object allocations, **fast_json** employs a **tape-based zero-allocation memory model**. It parses JSON directly into a contiguous integer array (the "tape"), enabling it to process gigabytes of data with minimal overhead and zero garbage collection pressure.
## Key Features
- **🚀 Zero-Alloc Tape Architecture**: Parses the entire JSON into a single contiguous integer array. No objects are created during parsing.
- **⚡ SWAR Acceleration**: Uses Simulated 64-bit SWAR (SIMD within a Register) to scan 8 bytes at a time for structural characters, significantly reducing branch misprediction.
- **🛡️ Stack-Safe Iterative Parser**: Implemented as a finite state machine. Zero recursion. Immune to stack overflow from deeply nested JSONs.
- **🔧 Handle-Based Navigation**: Data access via lightweight `CJsonNode` structs that point to the tape. Copying nodes is free.
- **💾 High-Throughput I/O**: Optimized for rapid Read/Write operations, making it ideal for LLM integration, REST API consumption, and large dataset processing.
## Performance
| Metric | fast_json | Standard Libs |
|--------|-----------|---------------|
| **Allocation Strategy** | 1 contiguous block (Tape) | N objects per node |
| **Recursion Depth** | Unlimited (Heap stack) | Limited (Call stack) |
| **Read/Write Speed** | **EXTREME** (300MB/s+ Est.) | LOW |
| **Memory Fragmentation**| Near Zero | High |
## Usage
### Parsing
```cpp
#include <fast_json.mqh>
CJson toolkit;
string json = "{\"price\": 1.2345, \"currency\": \"EURUSD\"}";
if (toolkit.Parse(json)) {
// Zero-copy access
double price = toolkit["price"].ToDouble();
string curr = toolkit["currency"].ToString();
Print(curr, ": ", price);
}
```
### Building & Serializing
```cpp
CJsonBuilder builder;
builder.Obj()
.Key("signal").Val("buy")
.Key("volume").Val(0.1)
.EndObj();
string payload = builder.Build();
// Result: {"signal":"buy","volume":0.1}
```
## Why fast_json?
Because typical MQL5 libraries were designed for configuration files, not high-throughput data streams. **fast_json** bridges that gap.
## License
MIT.