Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
6fe6a32
Organized some files
Kinflou Jan 21, 2024
a2fdf80
WIP
Kinflou Jan 8, 2026
ae3a820
refactor: trying out rust sitter instead of any other parsing strategy
Kinflou Jan 9, 2026
3b20379
refactor: introducing rust sitter more
Kinflou Jan 9, 2026
cd41a45
refactor: refactored tests to rust sitter
Kinflou Jan 9, 2026
e857509
refactor: more tests and grammar tweak
Kinflou Jan 9, 2026
18ff604
wip: some changes and tests
Kinflou Jan 9, 2026
4530bf4
refactor: moved tests, incremental compilation tweaking and some docs
Kinflou Jan 9, 2026
62c9d16
benchmarks: added first benches
Kinflou Jan 9, 2026
d788c1d
benchmarks: added riterion
Kinflou Jan 9, 2026
c879719
refactor: attempting to entirely migrate
Kinflou Jan 9, 2026
55d85a3
refactor: schema parsing stuff
Kinflou Jan 9, 2026
0ac0261
refactor: made incremental actuall return something and better tests
Kinflou Jan 9, 2026
50a11ea
feature: symbols validation of schema
Kinflou Jan 9, 2026
45c34ac
refactor: replaced package config old parsing with rust sitter
Kinflou Jan 9, 2026
8886e0a
refactor: tests for package config and some changes
Kinflou Jan 9, 2026
c7c202b
refactor: finishing up config parser migration
Kinflou Jan 9, 2026
c4d87a7
refactor: attempting to remove old ast infraestructure
Kinflou Jan 9, 2026
7cc5c0d
refactor: some warnings cleanup
Kinflou Jan 9, 2026
1476a91
refactor: improved schema versioning
Kinflou Jan 9, 2026
f9c50db
refactor: some schema loading adjustments and test package
Kinflou Jan 10, 2026
cbd57c0
refactor: continuation of moving test package to fixtures
Kinflou Jan 10, 2026
90aa451
Finalize Core Refactor: Fix tests and update dependencies
Kinflou Jan 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,6 @@ Cargo.lock

# Development temporary directory
__TEMP__/

# Generated frozen packages (build artifacts)
.frozen/
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Core Library, Compiler and Standard Library


18 changes: 12 additions & 6 deletions core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,25 @@ serde = "1.0.164"
serde_derive = "1.0.164"

# Lexing, Parsing
pest = "2.6.0"
pest_derive = "2.6.0"
chumsky = "0.9.2"
ariadne = { version = "0.3.0", features = ["auto-color"] }
rust-sitter = "0.4.5" # Pure Rust incremental parser with tree-sitter
chumsky = "0.9.2" # Kept for potential error recovery helpers
ariadne = { version = "0.3.0", features = ["auto-color"] } # Error reporting

toml_edit = "0.21.0"
handlebars = "4.3.7"
#lex = "0.6.0"


# Hashing
blake3 = "1.4.1"
lz4_flex = "0.11.1"


[build-dependencies]
rust-sitter-tool = "0.4.5" # Build-time grammar compilation

[dev-dependencies]
pretty_assertions = "1.4.0"
criterion = { version = "0.5", features = ["html_reports"] }

[[bench]]
name = "parser_benchmark"
harness = false
3 changes: 3 additions & 0 deletions core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@ Made in Rust

## Resource Links
https://createlang.rs/

https://michael-f-bryan.github.io/static-analyser-in-rust/book/parse/parser.html

https://michael-f-bryan.github.io/static-analyser-in-rust/book/codemap.html

https://docs.rs/codemap/latest/codemap/


Expand Down
289 changes: 289 additions & 0 deletions core/benches/benchmark_results.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,289 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Rust-Sitter Parser Benchmark Results</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}

body {
font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI",
sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
padding: 40px 20px;
}

.container {
max-width: 1200px;
margin: 0 auto;
}

.header {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
border-radius: 20px;
padding: 40px;
margin-bottom: 30px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
}

h1 {
font-size: 2.5rem;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin-bottom: 10px;
}

.subtitle {
color: #666;
font-size: 1.1rem;
}

.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
margin-bottom: 30px;
}

.stat-card {
background: rgba(255, 255, 255, 0.95);
border-radius: 15px;
padding: 25px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.stat-card:hover {
transform: translateY(-5px);
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.3);
}

.stat-label {
color: #888;
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 1px;
margin-bottom: 10px;
}

.stat-value {
font-size: 2rem;
font-weight: 700;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}

.stat-unit {
font-size: 1rem;
color: #999;
margin-left: 5px;
}

.chart-container {
background: rgba(255, 255, 255, 0.95);
border-radius: 15px;
padding: 30px;
margin-bottom: 20px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
}

.chart-title {
font-size: 1.3rem;
font-weight: 600;
color: #333;
margin-bottom: 20px;
}

.footer {
text-align: center;
color: rgba(255, 255, 255, 0.8);
margin-top: 40px;
font-size: 0.9rem;
}

.badge {
display: inline-block;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 8px 16px;
border-radius: 20px;
font-size: 0.85rem;
font-weight: 600;
margin-top: 15px;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>🚀 Rust-Sitter Parser Benchmark</h1>
<p class="subtitle">Performance metrics for the Comline IDL parser</p>
<span class="badge">✅ Production Ready</span>
</div>

<div class="stats-grid">
<div class="stat-card">
<div class="stat-label">Simple IDL</div>
<div class="stat-value">
18,868<span class="stat-unit">parses/sec</span>
</div>
<div style="color: #999; font-size: 0.85rem; margin-top: 8px">
~53μs per parse
</div>
</div>

<div class="stat-card">
<div class="stat-label">Complex IDL</div>
<div class="stat-value">
1,203<span class="stat-unit">parses/sec</span>
</div>
<div style="color: #999; font-size: 0.85rem; margin-top: 8px">
~831μs per parse
</div>
</div>

<div class="stat-card">
<div class="stat-label">Large IDL</div>
<div class="stat-value">
151<span class="stat-unit">parses/sec</span>
</div>
<div style="color: #999; font-size: 0.85rem; margin-top: 8px">
~6.6ms per parse
</div>
</div>
</div>

<div class="chart-container">
<div class="chart-title">Throughput (parses/second)</div>
<canvas id="throughputChart"></canvas>
</div>

<div class="chart-container">
<div class="chart-title">Parse Time (microseconds)</div>
<canvas id="parseTimeChart"></canvas>
</div>

<div class="footer">
<p>
Benchmarked on release build • Pure Rust implementation • Zero C
dependencies
</p>
</div>
</div>

<script>
// Throughput chart
new Chart(document.getElementById("throughputChart"), {
type: "bar",
data: {
labels: [
"Simple (4 lines)",
"Complex (70 lines)",
"Large (500 lines)",
],
datasets: [
{
label: "Parses per Second",
data: [18868, 1203, 151],
backgroundColor: [
"rgba(102, 126, 234, 0.8)",
"rgba(118, 75, 162, 0.8)",
"rgba(237, 100, 166, 0.8)",
],
borderColor: [
"rgba(102, 126, 234, 1)",
"rgba(118, 75, 162, 1)",
"rgba(237, 100, 166, 1)",
],
borderWidth: 2,
},
],
},
options: {
responsive: true,
maintainAspectRatio: true,
aspectRatio: 2.5,
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
label: (context) =>
`${context.parsed.y.toLocaleString()} parses/sec`,
},
},
},
scales: {
y: {
beginAtZero: true,
ticks: {
callback: (value) => value.toLocaleString(),
},
},
},
},
});

// Parse time chart
new Chart(document.getElementById("parseTimeChart"), {
type: "line",
data: {
labels: [
"Simple (4 lines)",
"Complex (70 lines)",
"Large (500 lines)",
],
datasets: [
{
label: "Parse Time (μs)",
data: [53, 831, 6606],
borderColor: "rgba(118, 75, 162, 1)",
backgroundColor: "rgba(118, 75, 162, 0.1)",
borderWidth: 3,
fill: true,
tension: 0.4,
pointRadius: 6,
pointHoverRadius: 8,
pointBackgroundColor: "rgba(118, 75, 162, 1)",
pointBorderColor: "#fff",
pointBorderWidth: 2,
},
],
},
options: {
responsive: true,
maintainAspectRatio: true,
aspectRatio: 2.5,
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
label: (context) =>
`${context.parsed.y}μs (${(context.parsed.y / 1000).toFixed(
2
)}ms)`,
},
},
},
scales: {
y: {
beginAtZero: true,
ticks: {
callback: (value) => `${value}μs`,
},
},
},
},
});
</script>
</body>
</html>
Loading