Андрей Бурлаков
05/29/2026, 6:00 AMf(x) = y regardless of time, place, or permission. But software does not exist in a vacuum; it exists in a messy, stateful, hostile world. By treating programming as applied math, we trapped ourselves in implementation bubbles. We obsess over the mechanics of the loop, the memory layout, and the specific syscall, while the actual intent of the software rots in documentation and comments. We have enormous difficulty expanding the intent of software because the intent is never expressed in the code itself - only the rigid steps to execute it.
This is why we just keep running in circles, rewriting the same logic over and over. We translate the same human intent - "display this document" or "transfer this value" - into a thousand incompatible computational dialects: Swift for iOS, Kotlin for Android, C++ for the backend, JavaScript for the web. We aren't creating new value; we are just manually translating computations across boundaries, because computation cannot transcend its substrate.
If a system can reason about itself, it can adapt. It doesn't need to be explicitly told how to do something for every possible scenario; it needs to understand what it is trying to achieve and negotiate the how based on its current reality.
In natural language, we refer to concepts via words. Words refer to concepts within a current context; they are not the concept itself. If I say "open," you understand that the mechanics of "opening" a window are vastly different from "opening" a database connection or "opening" a door. You don't need a different verb for each physical mechanism because the context resolves the ambiguity. Current programming languages lack this context entirely. They force the word "open" to mean exactly one rigid mechanism, shattering the unity of the concept across different environments.
I think we need a language for intent description, rather than another one for computation. A language where operations are not hardcoded instructions, but negotiated capabilities - where "read" isn't a specific syscall, but a declared intent that the environment fulfills based on what it is authorized and able to do. By decoupling what we want from how the machine achieves it, we can finally unite the ecosystems shattered across different platforms, languages, and hardware. We stop writing software for a specific machine, and start writing knowledge for a dynamic world.
P.S. I do have a PoC of intent language, but I'll need to rewrite it from lua to julia, because lua can't do multi-threading. In current state I haven't finished tutorial nor a proper document on how it works, so showing just it's examples usually causes confusion because of new paradigm shift. Anyways I can show it right now, but I need to add description on how to use it.Konrad Hinsen
05/29/2026, 6:23 AMАндрей Бурлаков
05/29/2026, 6:38 AMIvan Morén
05/29/2026, 6:52 AMАндрей Бурлаков
05/29/2026, 7:50 AMJari
05/29/2026, 8:23 AMOleksandr Kryvonos
05/29/2026, 8:29 AMIvan Morén
05/29/2026, 8:30 AMErik Stel
05/29/2026, 9:21 AMАндрей Бурлаков
05/29/2026, 9:36 AMguitarvydas
05/29/2026, 9:56 AMАндрей Бурлаков
05/29/2026, 9:56 AMguitarvydas
05/29/2026, 9:57 AMThat exact flaw was inherited from mathematical notation.I see the fundamental flaw as being the one-size-fits-all problem. We seem to believe that it is necessary to force all concepts into single GPLs (General Purpose Languages) and single notations instead of using multiple notations (programming languages) to co-exist and to be composed into real-world solutions. Reality is asynchronous. The notation f(g(x)) implies synchrony, hence, it cannot deal with asynchrony. Hence, closed-world formalization denies reality. Only a small slice of reality can be described in a closed form (e.g. for example the 5% formalizable vs. 95% pushed aside as "dark matter" in cosmology). Belief in closed-form formalization encourages people to disregard the greater majority of reality.
guitarvydas
05/29/2026, 9:59 AMP.S. I do have a PoC of intent language, but I'll need to rewrite it from lua to julia, because lua can't do multi-threading.Multi-threading is but a simple trick that can be implemented in assembler, hence, any language patterned on assembler can do multi-threading. The implementation of multi-threading is actually the implementation of synchronous time-sharing, which has been misconstrued to be equivalent to asynchronous parallelism (it's not the same). The idea that a language "can't do multi-threading" is simply false. If you can build queues (queue classes, data structures in assembler) and have first-class functions (closures, pointers in assembler) then you can do multi-threading. Multi-threading simply /simulates/ parallelism, it is not asynchronous parallelism. We have many tools for wrangling languages and it is entirely possible to - easily - create mappers from meta-language to existing language. I would suggest that you don't waste time porting from lua to julia but spend time rewriting the lua implementation in a meta-language (your DI language, say), then create a T2T (text to text) transmogrifier that spits out lua, julia, python, C, Rust, etc. code from your DI code. (This kind of thing has been done since the early days of computer-ing, e.g. Prolog is a non-functional language. The "engine" for Prolog was built using functional, synchronous, sequential building materials, like other languages (FORTRAN, as I understand it), Tiny Basic was written in assembler, SmallC was written in pdp-7 K&R C, Forth was originally written in COBOL, etc).
Андрей Бурлаков
05/29/2026, 10:08 AMАндрей Бурлаков
05/29/2026, 11:00 AMdoor.open(). This is exactly what Paul is pointing out with f(g(x)) - the caller strictly defines the synchronous chain of who talks to whom.
In NegI, the caller only expresses the intent: open. They don't hold a reference to a specific object; they throw the intent into the current KES context. It is the environment that finds the Manifest capable of fulfilling open - whether that's a Door, a File, or a Network Socket-based on dynamic protocol negotiation (capcheck), not static interfaces.
This is how it mirrors natural language. If I say 'open' in a room with a door, the door handles it. If I say 'open' at a computer, the OS handles it. I didn't change my intent; the context changed the execution. OO can't do this without rigid Visitor patterns or dependency injection frameworks. NegI does it natively because context is the runtime.Андрей Бурлаков
05/29/2026, 11:01 AMeval for Artifacts, the C-FFI for hardware, and the shared-memory threading natively. Julia becomes the substrate where the physics of negotiation live, and I only have to write those physics once.Konrad Hinsen
05/29/2026, 12:30 PMopen. What happens? More precisely, how is the decision made?Konrad Hinsen
05/29/2026, 12:33 PMdman-os
05/29/2026, 12:44 PMKartik Agaram
open expressed nominatively, with those 4 letters, or with some other form that captures the semantic that can disambiguate between opening doors and file handles?Андрей Бурлаков
05/29/2026, 1:22 PMdoor open , but something open and that something could be anything. Same label can't reference multiple thing within 1 context, because it's transfered between manifests. So if within 1 room there are window and a door that was assigned label something that label is resolved to the last one that was assigned label somethingАндрей Бурлаков
05/29/2026, 2:03 PMread filesystem, the protocol check fails, because the Manifest for the filesystem doesn't exist in its context. You don't need sandboxing wrappers; the lack of capability is the sandbox."
5. The Cross-Platform Intent. "Imagine writing a UI app. I want to express the intent save document. In a computational language, I must write conditional logic: if (OS == 'web') { localStorage.set() } else if (OS == 'desktop') { fs.writeFile() }. I am manually mapping intent to mechanics. In NegI, I just dispatch document save. The KES environment running on the web provides a Manifest that fulfills save via LocalStorage. The KES environment on the desktop provides a Manifest that fulfills save via the filesystem. The source code is identical; the context adapts."
6. Frontend (parser) is decoupled from the backend, because backenmd expects only Manifests and it doesn't matter from what place they are coming from. This allows to make other modules that emits Manifests (like foreign language parsers, decompilers and etc)
7. Reinterpretation of existing code allow to mock literally anything without DI pattern. This allows to add logging to anything (including maths), and allow to compile code just by evaluating it.Андрей Бурлаков
05/29/2026, 2:06 PMIvan Morén
05/29/2026, 2:33 PMKartik Agaram
Андрей Бурлаков
05/29/2026, 2:45 PMАндрей Бурлаков
05/29/2026, 2:47 PMАндрей Бурлаков
05/29/2026, 2:52 PMАндрей Бурлаков
05/29/2026, 2:56 PMАндрей Бурлаков
05/29/2026, 3:17 PMАндрей Бурлаков
05/29/2026, 3:23 PMguitarvydas
05/29/2026, 3:33 PMАндрей Бурлаков
05/29/2026, 3:36 PMKartik Agaram
Scott
05/29/2026, 3:46 PMАндрей Бурлаков
05/29/2026, 4:00 PMeval and authority. An Artifact in NegI isn't just data; it's a string of host-language code injected with a specific context (FLESH) and evaluated at runtime. A transpiler cannot automatically map Julia's Core.eval to Python's exec or C's compiler API without writing massive, language-specific runtime polyfills.
Furthermore, the whole point of choosing Julia is its native substrate capabilities: ccall for zero-cost C-interop, llvmcall for ASM, and native OS threads for parallelism. If I transpile OPHANIM to JavaScript or Python, I lose the native C authority and I lose true parallelism. I end up simulating the physics of Julia in languages that lack its capabilities, which defeats the purpose of having a substrate that can actually reach the hardware. I'm not building a syntax to transpile; I'm building a physics engine, and the physics depend on the substrate.Андрей Бурлаков
05/29/2026, 6:06 PMАндрей Бурлаков
05/29/2026, 6:12 PMAndrew F
05/29/2026, 7:30 PMAndrew F
05/29/2026, 7:35 PMАндрей Бурлаков
05/29/2026, 7:39 PMАндрей Бурлаков
05/29/2026, 7:45 PMAndrew F
05/29/2026, 8:06 PMf(x) = x^2 is an intent. By itself or in composition with other bits of intent, you can re-interpret it in different contexts: evaluate it with various number systems, compile to various forms of machine code, do abstract/partial evaluation shenanigans on it, take its derivative, etc. In some cases you can even solve it for x and run it backwards. But at least for some of those you do have to be able to inspect it deeply. I think that's an important way to get more value from a precise intent. I haven't figured out the exact line between a context and an interpreter/simulator, but they're close; a simulator is definitely a context, and a simulator sees everything. (Simulator is probably also responsible for security FWIW)
There's still some overlap in views though. "DisplayDocument(content)" has a similar timelessness to math, as long as the document content itself also does, which it should in my opinion.
I've thought along a lot of these same lines and eventually came to the conclusion that a good enough intent language is indistinguishable from a good enough programming language. The tricky part is the interface with the context, making it general enough that code/intent written against it can be meaningfully recontextualized. Or something like that. Still figuring it out. 🙃Kartik Agaram
Andrew F
05/29/2026, 11:24 PMKartik Agaram
f(x) = x^2 a computation? It's easier to understand a sense of "intent" that is "everything but computation". In this framing, SQL gets closer to intent than C, but is still not the intent. No computation can ever be the intent.
I don't know either, but it doesn't seem unrelated to the topic at hand. I'd say until proven otherwise there is only one sense of "intent" that we're all circling.Kartik Agaram
Ivan Morén
05/31/2026, 8:04 PMKartik Agaram
rand and so be one of a thousand valid candidates. You need something more than computation to express these differences. In the past I've explored prose, tests and formal methods to express them. But there may be other approaches.guitarvydas
06/01/2026, 2:21 AMf(x) = 2 * x
f(x) = x + xAndrew F
06/01/2026, 2:29 AMAndrew F
06/01/2026, 2:56 AMKonrad Hinsen
06/01/2026, 6:28 AMKonrad Hinsen
06/01/2026, 7:12 AMPter Rim
06/01/2026, 7:59 AMguitarvydas
06/01/2026, 12:06 PMguitarvydas
06/01/2026, 12:10 PMAre these different?
f(x) = 2 * x
If one considers the arrow of time, instead of just the result, one concludes that these are different.f(x) = x + x
Андрей Бурлаков
06/02/2026, 5:37 PMThere are lots of similar examples in which the symbols used in code (variable names etc.) point to a context of usage that is not encoded anywhere at the level of programming language semantics but which matters for the program's correctness.I did tried to solve this and actually succeeded, but this also introduced parts where I had to keep it extremely minimalistic (at some point of the development I considered some ways to not hardcode brackets and
; , into parser), but I eventually left the parser as it is, just to make PoC within months (got this within ~5 months) and not year.
This also forced me to make all possible potential ways for the user to encode semantics from the language itself. This is the reason for protocols, artifacts and no math expression precedence, because I couldn't find a way to make it safe for the code readability. Like imagine if user could make custom order of precedence for any label (aka name token that can be a symbols or cname), that would overcomplicate an output of a parser and create total chaos where no one can be sure how the thing should be executed. That's also a reason why I made parser just be another separate entity that can be replaced during runtime.Андрей Бурлаков
06/02/2026, 5:46 PMf(x) = 2 * x
> f(x) = x + x
I'd say for the intent perspective they are indeed very much different. But not for a arrow time reason, it's about assumptions, about names/symbols we see here. By that I mean there are nothing that states x type nor for anything else. This means that `x`'s understanding of + can be very much different from user's assumption about addition. Just thinking that this might be JS is enough for this to break.Андрей Бурлаков
06/02/2026, 6:25 PMАндрей Бурлаков
06/19/2026, 7:53 PM