Everything is a scope.
No GC Β· No borrow checker Β· Memory safe
Software's most expensive wound is memory safety β roughly
70% of serious security vulnerabilities are memory
errors. Rust closes that wound, but the price is the borrow checker's
learning wall. MELP aims to close the same wound without that
wall: the programmer annotates nothing β no
&, no lifetimes, no
unsafe. Scope is lifetime.
Evidence status, honestly: The mechanism works and is valgrind-verified. The two most serious bugs of that same week were of exactly this class β both were caught and closed by our test corpus, which is evidence both of how hard the wound is and of the fact that our mechanism sees it. Real-world-scale proof is the next job. Today we say aims to; when the proof is complete we will say does.
MELP proposes a unified Scope-Oriented Programming model where scope is the primary lifetime abstraction governing memory, resources, concurrency, state, and UI.
Scope is the universal lifetime unit.
Why MELP?
Speed, safety and simplicity β all three at once.
| Language | Speed | Memory Safety | Simplicity |
|---|---|---|---|
| C / C++ | β | β | β |
| Java / Python | β (GC) | β | β |
| Rust | β | β | β |
| MELP | β | β | β |
"MELP aims to close memory safety through the scope model β requiring neither a garbage collector nor a borrow checker."
What We Solved, What We Haven't
Software's chronic wounds and MELP's answers today β gaps included.
| Wound | MELP's answer | Status |
|---|---|---|
| Memory safety | Scope/custody: no GC, no annotations, automatic | β |
| Institutional memory loss | debug block β a letter to the future that stops when its condition fires |
β |
| Silent wrongness | Nothing is left to runtime guesswork; error codes + exit discipline | β |
| State complexity | State has no separate life β data lives its scope's lifetime | π¬ |
| Concurrency β data races cannot be constructed | Scope isolation: structurally impossible, not merely discouraged | β |
| Concurrency β "free parallelism" | Design intent, not a measured fact: no legitimate gate yet, runtime is single-flow | βΈοΈ |
| Incident response | freeze = natural quarantine + preserved evidence |
β /π¬ |
| Reproducibility / bit rot | Self-hosting golden chain; every change proves itself | β |
| Supply chain β package-ecosystem class (left-pad, log4shell) | Structurally absent: there is no third-party package ecosystem, so transitive-dependency risk cannot form | β |
| Supply chain β build-chain class (xz) | We have no answer β LLVM/clang, libgmp and libc are all upstream of every binary | β |
| Supply chain β the seed (Trusting Trust) | Route drawn, not yet walked: the IR we emit is text, so an injection must show there | π¬ |
| Toolchain comfort | Our soft underbelly β editor, debugger and package tooling are young | β |
β
proven Β· π¬ partial Β· βΈοΈ design intent Β· β not yet β
source: MELP_KANONΔ°K/OZGUN_OZELLIKLER.md
What Does MELP Offer?
debug β A Letter to the Future
Today's architect leaves the next generation a running, conditional
note. A comment may go unread; a debug block
runs β when the world outgrows the assumption, the program
stops and reads the letter out. Zero cost in release builds.
Freeze β Suspend, Don't Kill π¬
A running scope can be frozen from the outside together with its subtree: state is fully preserved, sibling scopes keep flowing. A language-level quarantine answer to the "kill it and lose the evidence" dilemma of incident response. Works from the host API; language syntax integration is in progress.
LLVM Native Binary
No GC, no overhead. MELP emits LLVM IR directly and runs in the same league as C β predictable, measurable performance. Not a syntax experiment, but a compiler that compiles its own source.
Source: MELP_KANONΔ°K/OZGUN_OZELLIKLER.md β β
working, π¬ partial, β not yet (with honesty lines)
Every Structure Opens With an ID Card and Closes With a Signature
Three types, no declaration ceremony β the declaration is the type.
numeric function main()
println("Hello World!")
return 0
end function
numeric function add(numeric a; numeric b)
return a + b
end function
numeric function main()
numeric result = add(3; 5)
println(result)
return 0
end function
debug
if member.count > 10000 then stop
-- past 10 000 members this design needs
-- a real database; revisit before scaling
end debug
scope counter
numeric n = 0
end scope
-- ';' separates arguments, because ','
-- is the decimal mark:
numeric pi = 3,14
Decimal comma is a first-class decision, not a locale setting β
which is why ; separates arguments. See
the language reference.
C League, No Surprises
19 July 2026 Β· MELP v1.0 Β· Intel Core i7-10750H Β· Linux x86-64
clang -O2). Every measurement is 5 runs, best value taken.
Run time (ms) β lower is better
MELP and C are practically identical (234 β 232) β with the same LLVM backend, the language layer introduces no measurable loss.
Same complexity class β O(n). C and Rust lead on the constant factor (~9Γ).
Ready?
Try it in the browser β no installation required.