> integer literals become i32, float literals become f32
Don't use the shitty small sizes that have introduced countless bugs over the last decades, as a language default.
Especially if you care about correctness.
i32 is all over the examples.
Use 64 bits, like Python and Haskell; even JavaScript and thus TypeScript got floats right defaulting to f64.
My understanding is that i32 and f64 literals are pretty common among the more modern languages because f64 isn't much slower than f32 on modern CPUs and f32 costs precision, but i64 is slower than i32 (especially multiplies and divides or on 32 bit hardware) and i32 costs range, not precision, and most uses don't need the extra range.
One thing I would love to have as a feature is native compilation.
JS derivatives are that, a derivative to a scripting language.
One reason I haven't explored that is that I want to tailor the language for the more constrained environment of Wasm GC first.
Agents will naturally be bad at it due to a lack of examples.
Btw if folks have ideas of how to make Killswitch even harder for LLMs I’d appreciate them.
Good one. Though this might unfairly bias against Chinese models?
Personally I don't have much interest in using models that blatantly censor historical facts.
Tiananmen Square is an obvious one but I would be concerned that any model that censors that would also have other hidden censorship or more subtle biases I wouldn't catch
The one thing I do see sometimes is that agents sometimes don't take advantage of added features, but that's partially because the Zena code base doesn't use them as much yet. I'm working on skills and linter-based suggestions to use better patterns.
Even though this programming language is absolutely nowhere in any large language model’s training set, they have so far done extremely well at extrapolating from the small set of examples I’ve given it when I need an agent to generate some tests or whatever for me.
"Dart-style constructors, Swift-style pattern matching and Strings, Trio-style async cancellation, Scala-style sealed classes"
The future is cooked
Can we please as a community stop parroting these false premises as a basis of every argument against doing anything new? It's plainly obvious to anybody that uses LLMs on a regular basis that it's not true.
They should find the limitation of the natural language somehow, and use and distribute babo language will help find how it will works(or not). LLM model eveolves yet, so there is no such a approach, but the speed of evolution is decreased lately. So now is good time to dig into identify the limitation and boundary of the LLM.
What can happen is sometimes patterns that are unique to certain languages aren't surfaced and so can't be "learned" but that is a different case, since you can add examples - or patterns that go beyond syntax (threaded code, process isolation, interaction between different modes of resolution, etc) where you need the agent to be able to understand and plan higher-level logic.
I wrote CSSex as a css pre-processor (similar but not the same as SASS/SCSS) and my "boss" at the time fed the existing cssex files to GPT (+2 years ago) and it was able to write CSSex just as fine as if it was writing something that was present in its training data set. It never introduced syntax bugs, the bugs it introduced were all relative to complex cascading styles rules in an existing large (for a definition of large in webapps) codebase, rules interactions (CSS), browser quirks, and complex logic to do what we "humans" wanted (or him in this case) and so on.
LLMs that have to constantly fix their code and look up libraries or features are much slower, more expensive and more prone to create inefficient and slightly wrong code. Sure, an LLM can just create a new web framework from scratch, but you usually don't want to spend your tokens on that.
I also think that with LLMs, new languages will have more trouble building an ecosystem, because until now, the popular libraries had a "proof of work" that kinda also made sure that they were well-trodden and maintained. Now, anyone can just push their new generated library and we have no clue on how to compare (and tbh reading LLM-generated READMEs is also not pleasant).
"LLMs dont create anything new, if programmers stop reading the code technology will be forever frozen to 2022, no new programming languages, operating systems, concurrency primitives, databases, networking protocols, UI frameworks everything will be based on the training data and future generations will forget about all the primitives we now take for granted.
If someone creates a new programming language/ framework or new better way to do async or whatever, no one will use it because it is not in the training data and it wont take off because everyone is using LLMs. It will be like using the same Lego pieces over and over."
Esoteric languages like BrainFuck are esoteric and difficult precisely because they go out of their way to eschew conceptual links to existing languages or paradigms.
So if you invented a new type of esoteric language with arbitrary syntax and strange operators (not sure how you’d do that, exactly, iirc all fundamental binary operators are known) it might be impossible to use with an LLM even if the user manual was in context… but aside from that, languages and the underlying concepts are extremely generalizable.
I think you are underestimating the amount of data/context that is required to use a battle tested general purpose language, for both humans and LLMs. The ecosystem requires official docs, stack overflow answers, blog posts, tutorials, existing source code, subreddits, issue/PR discussions of undocumented features, obscure mailing list threads with rare insights, books, youtube videos, benchmarks, tests suits... and the ecosystem of libraries for the language that also need their own official docs, stack overflow answers...
You also need the collective audit by the community and assurance that this language has been used in production by countless others.
What might be the case though, is that new languages will use more context to think about until they are well represented in the training set.
Seems like a solvable problem though by generating synthetic data that’s guaranteed to be accurate through linters, compilers and tests.
If it’s ~9 figures to train a frontier model, it seems like training on a new language could be a rounding error if it was a priority.
I could see the appeal of a new agentic-friendly language that’s focused on minimizing tokens. The standard library could be massive with no concern of making the language easily readable or learnable.
This makes sense and is very insightful, thank you. But with that solution it seems that only LLM companies will be in the position to create new languages.
My personal experience is that LLMs are quite good at one-shotting complex solutions in both Rust and Go, and tend to be idiomatic.
newdsl describe some_feature
This returns the docs for that language feature. So instead of a giant SKILL.md containing the language spec, it exposes a way for an LLM to introspect.DSLs climb the ladder of abstraction and constrain the solution space at the language level, which IMO provides tighter feedback to both humans and machines.
I want a very very coarse language that I can wrap around maybe an existing language, maybe after asking an llm to create an adapter that will allow me to type faster than the llm
Say SELECT c.name, c.email, SUM(o.total) AS spent FROM customers c JOIN orders o ON o.customer_id = c.id JOIN addresses a ON a.customer_id = c.id WHERE a.country = 'AR' AND o.created_at >= '2026-01-01' AND o.status <> 'cancelled' GROUP BY c.id, c.name, c.email HAVING SUM(o.total) > 1000 ORDER BY spent DESC LIMIT 10;
and compress it to
c+o+a|a.cn=AR,o.d>26,o.st!X|c:nm,em,$tt>1k|v10
(I made up a random example with claude).
I know about J and Q but they cannot be used with sql databases or existing python libraries.
Anyway. I am not sure if anyone has such concerns.
Implement whatever abstractions you think LLMs should work in terms of in whatever language is handy, and have your LLM use those abstractions.
LLMs are generally more tolerant of tedium than humans, but they make mistakes more often on repetitive mechanical tasks. I've had Claude write PTX directly once, and Claude just wrote majority of it and commented something along the line of "repeat this block 7 more time with these minor changes" instead of writing them out, so the code didn't work.
So, no, replacing compilers with LLMs is probably a worse option than having them code a compiler/programming language.
Plugging my own thing to use as example:
https://github.com/yuechen-li-dev/oct
Oct is the first programming language that I made with Codex. It started out as "Octave Modern" and was never intended to be a language for LLMs in the first place, but rather a teaching language that I've been thinking about for a decade because of my frustration with academic code and specifically reproducibility, with Python and Matlab in particular.
But it turns out the same design choices that was made to prevent bad patterns from academic code also made it pretty good for LLM coding: statically typed, immutable by default, GC'd with fast compile and runtime because it compiles to Go, along with features designed for scientific compute like SI units and builtin graphing etc.
But now it just took a life of its own, so it has extra features like templates/concepts, iterators, async/await, database query, build system for C/C++, SystemVerilog/WASM(WIP) codegen, LaTeX/pdf generation etc. None of them were features that were developed in isolation of "what an LLM agent might want to write" but to address a specific problem that I had encountered or to address specific failure modes that Codex/Claude actually had.
That's why I think Oct is probably one of the better languages for AI to write/generate, not because it was designed to be AI friendly in abstract, but that it's developed against how AI actually writes code, even though again, it is still very much a work in progress.
I'm with you there, I think I starred Oct when I came across it. I've been on that quest since 2014, we should collaborate! I'll be presenting this work at IROS tomorrow, I'd love to hear what you think: https://mech-lang.org/iros-r4r-2026/index.html
So here is my experiment with Kalman filters here.
https://github.com/yuechen-li-dev/oct/tree/main/Experiments/...
It's been a while, but I think the findings there are mostly that Kalman filters are relatively heavy and fairly narrow in application in that it's good at filter Gaussian noise out but not much else, and it's kind of branchy so it doesn't run on the GPU very well, you can try to see if a simpler feedforward like Smith predictor can work as well.
Also, something to try out: the explicit state machine stacks/pushdown automata are only half of the equation, the other (and imo more important) half is argmax/utility AI based transition instead of traditional state machine graph.
But yeah, if your target is embedded/bare-metal application for robotics, since Oct really isn't designed for it, maybe you would like to check out what I'm currently working on, the Concept programming language?
That’s an interesting idea about an aromas transition, I’ll have to think about that. I put state machines in the language for better static program analysis and tracing, I think the aromas idea could complement that. What do you see as the main utility?
Have you written about your work anywhere else?
So the main strength of utility AI is that it simplifies the situation where it is "pick the action from the list of valid actions when there are multiple valid conditions" by assigning a weighted score to each action. The alternative right now is to write multiple nested if/else ladders to express that logic and argmax is a very nice, very fast middle ground between exhaustive pattern matching and full LLM softmax inference. It's the same pattern used for the Sims, and you can see how powerful it is for games/robotics.
>Have you written about your work anywhere else?
I don't have a blog or anything, so a lot of it lives in the markdown documentations that LLMs, but if people are interested, I'll clean up the repos and do some writing on the tech stuff at least.
I'm not proud of that pun.
Matching a desired output is a global goal, but even that sometimes works now. Someone sent me a LLM-generated JPEG 2000 decoder. They got Fable to generate a decoder that uses a GPU to get the same answer as the reference implementation gets on the GPU.
Net result faster (10-70x) and massively lower memory footprint. Now we’ve got a service that can do something essentially instantly that most people wouldn’t have even bothered to try before.
I’d love for a class in this future language to come packaged with tests, invariants, fuzzer parameters, profile targets / performance budgets with realistic inputs (on this 100 element array this should take no more than X clock cycles), race condition stress tests etc.
The compiler (or even linter) should optionally run some / all of these checks and succinctly report back (with knobs so the LLM can manage wall clock time).
Adding each of these should not be follow on steps.
Beyond this, debug hooks should be trivial to set (in code itself), so the LLM can trivially say show me the stack after the 9th time this function is called on this input to the program.
claude is perfectly capable of building a language to your specific design and then being competent at programming in it. the trick will be how much senior or experienced devs stay in the process. hands off will be boring and backward looking. hands on (steered by human in the loop) will be innovative and interesting.
i predict the results will be that we will get a cambrian like explosion in the number of new syntaxes and languages. every home experimentor will create their variant of c++ or lisp, they will be frowned on by experts. but because out of it will come one or two unique and interesting new ways of programming that nobody else thought of before.
There is such a wide range of interesting things that can happen here that we aren't exploring at all.
Some of us now have to deal with tools like Boomi, Workato, Opal, Sitecore AI, Power Platform,....
Eventually some microservices might be written in "legacy" languages for MCP tools.
This is how "programming languages" look like in 2026 for internal corporate development.
To be effective in using low level languages, LLMs would have to build higher level constructs like subroutines from scratch every program.
It's not that different from why we almost never use assembler for anything more than code islands: even a modest subroutine can overwhelm our own mental context window.
Considering how digitally inclined workers are already building various tools on their own. Even though these tools are completely vibe coded and the creator has absolutely no idea how to build things. I imagine we're going to look into a future where the LLM and the prompting becomes the "programming langauge".
I also think we'll see the personal responsibility shift because of this, and I think some traditional IT and software companies will struggle with this. We're an energy company, and where we would've bought a specialized piece of software and a team of consultants to implement it. We can now, not only build a better tool but also rewrite it enough to actually deploy it, all with a handful of people doing other tasks and 4000 Euro worth of credits. 6 months ago I would've laughed into your face if you told me this woud happen, but now, here we are.
I suspect that in a few years (if not sooner) you'll not need any form of software developer in the process for this. You need a buisness domain expert and you need it-architecture + cybersecurity, and most of the architecture + cybersecurity can be done through company wide AI skills. But the code itself never really has to be read for a really large part of software running in companies. You wouldn't do that for something critical, like the software running on your plants, but the web portal with a dashboard containing the status of your devices? Sure, especially because AI lets you do these things with 0 external dependencies.
Like I remember reading human studies that people make 1.5 - 5 errors per 100 loc.
If AI works in a similar way then we should stick to higher level languages that minimize loc
you can do a hell of a lot with a PERL one liner. What i'd recommend is extremely obvious languages like Golang
Move errors from runtime to compile time as much as possible.
This is unfortunate, because I wanted to try both. Now I hope that Erlang has not sold out yet.
This is deeply unintuitive but AI negates language specific ecosystems, while strengthening language agnostic ecosystems.
Pick whatever your favourite programming language is and its ecosystem. With AI someone can take your ecosystem and just port it to their language.
This means the only way you can protect your ecosystem is to play on all language fronts at the same time so porting the software to another language becomes a meaningless exercise.
I don't think its that "just". Examples of porting we seen had some prerequisites: being self contained with very strong tests coverage, so AI could iterate N millions times and fix bugs in new implementation. Otherwise such porting could be very buggy and unmaintainable.
year, that's usually what is referred as ecosystem.
I think this is only true when it comes to LLM raw output. There's also the concern of checking its work. A compiler that can check many aspects of correctness (static types, null) is a huge boost to AI. It can use the compiler directly to check its own work.
https://docs.dagger.io/reference/sdks
both can invoke modules written in other languages from your language of choice
Kubernetes is likely an interesting ecosystem to consider under this lens too
A Programmable Programming Language
https://cacm.acm.org/research/a-programmable-programming-lan...
See also:
What is a programmable programming language?
https://hiphish.github.io/blog/2019/06/22/what-is-a-programm...
Otherwise, for efficiency, LLMs could adopt something akin to:
Lambda Calculus in 383 Bytes
We also need a metric ton of opinionated linting to sheep-herd codebases into a smaller amount of possible shapes -- which I'm strongly in favor of and see it as the next iteration (of the concept of a single code formatter a la Rust) because it'll put many other bikeshedding time-wasters to rest, hopefully forever.
To be honest though, it's mostly hypotheses and feelings; nobody has truly figured it out yet -- and if some have, they're keeping the secret sauce to themselves.
To the point that I would support banning the creation of an AI-only language that can't be read by humans. Huge, huge, huge step in the wrong direction.
...
Naturally, it is probably inevitable.
But it's still a terrible idea.
If we can assume that all files are saved and each file has correct syntax (which can be enforced by tooling), a much simpler protocol could handle all the language-specific indexing needed to make it easy to read source code.
(I’m assuming that we still do read source code. I for one like reading source code and have little interest in ‘software factory’ techniques where you don’t look at at the code. I might not look at every commit, but I’ll still read it fairly often and tell the AI to fix anything that’s unclear.)
Personally, I think new languages will end up taking a form similar to the grammar of existing languages, but with different semantics. That's because when I tried a completely new grammar, the AI couldn't generate code well, so I ended up spending time bringing in TypeScript's grammar and converting it into my language's mental model.
My language isn't anywhere near as sophisticated as the languages the developers here boast about creating (it's actually lower), but these days it at least runs, even if it's full of bugs. So sometimes I think that many people like me will develop languages, and that programming might end up becoming fragmented.
It's a nautilus. If I remember correctly, the original idea came from `gyre -> spiral`, so I attached meaning to the spiral shape of its shell.
The reason gyre ended up in the name was that I had this idea that a world, or perhaps a program, keeps curling inward through layers.
At the time, I was studying state machines. Once you define a state machine, you also define its state space: how far that space can expand, what states are possible, and where its boundaries are.
But the more I programmed, the more I felt that software kept repeating the same structure inside itself. You establish an outer boundary, then inside that boundary you create another state space and another boundary, and then another one inside that.
So I started wondering whether a program is something that begins by defining an outer frame and then keeps spiraling inward.
When I first started designing the language, one of my biggest inspirations was D&D.
That's partly why I chose words like `ability` instead of `interface` or `trait`. The idea was closer to, "this subject must have this ability," rather than "this type implements this interface."
I like fantasy games, and most RPGs tend to describe their worlds using fairly similar concepts and vocabulary.
Around the same time, I was reading material about Simula 67. What interested me was the old question behind Simula: how do you represent a world using a programming language?
When humans describe worlds, we probably do it most extensively in fiction and games. So I thought: why not build a programming language using words humans already use when describing a world?
I started collecting those kinds of words and turning them into language concepts.
Originally it was just a small language with a C backend. Then AI arrived, I became more ambitious, and the project gradually grew much larger than I initially intended.
So there is a `World`, and inside the world there are `Zone`s. At first I considered using `Realm`, partly because of D&D, but in Korea people tend to use the word "zone" much more naturally for this kind of spatial division, so I ended up with `Zone`.
The project has grown quite a lot since then.
It's still incomplete. The source of truth for the semantics is not fully closed yet, and there are many rough edges, although I've confirmed that at least some of the basic ideas actually work.
I'm also trying to make it a memory-safe systems language without relying on a GC.
One of the inspirations was Vale, an experimental language that explored generational references. I took that idea and tried to expand it into something broader: in Pergyra, I think of a `Slot` as a resource identity, and the compiler tracks transitions in the state of that resource. (Vale itself seems to have moved away from that approach in its successor, Valen.)
The compiler pipeline is roughly:
`HIR -> DIR -> RIR -> MIR -> backend`
At the RIR level, memory accesses are interpreted as resource-state transitions, and resource operations are normalized there.
This does mean that Pergyra can carry more runtime machinery than some other systems languages when those checks cannot be eliminated. On the other hand, the same resource identity model has been useful for reasoning about parallel access and concurrency.
I still don't think I can honestly claim that the language is completely memory-safe yet, and I'm not even sure whether this approach will ultimately turn out to be the right one.
But as the design evolved, I noticed the same spiral structure appearing again:
`World -> Zone -> ... -> Slot`
The layers keep curling inward.
That's why I chose the nautilus.
There's another meaning I like as well: the nautilus is often described as a "living fossil," and in a way I'm taking an old question from Simula — how should a programming language represent a world? — and trying to revisit it from a different direction.
I don't really expect the language to become successful. I'm not even sure I've written the compiler particularly well. I'm currently using it in a few small projects to see whether the ideas survive contact with real software, but I don't know how far it will go.
Thank you for taking an interest in it.
My personal goal, though, is much simpler: I want to make a game in my own language.
I think that part is probably achievable within the next two years.
You know the Yeats poem?
Maybe my own ideology, when projected, looks like this
https://nilesjohnson.net/hopf.html
(Imagine that all these threads are connected before the projection, maybe by "connecting the "point" of "each linkage" thus "foliating" 4D space" -- "to infinity and back"!)
I'm keen to run it.
---
- Correct by construction: the language makes invalid states or programs hard or impossible to express.
- Statically established: types, proofs, and static analysis establish properties before execution.
- Runtime-enforced: memory management, isolation, capability boundaries, and other runtime enforced properties.
- Empirically validated: program validation through tests, property-based testing, and fuzzing.
---
Along with being familiar, so it's easy to generate, is a huge part of why I'm building Zena: https://zena-lang.dev/
I don't have the AI-first rationale put into the public docs well just yet, but I mention some of it here: https://zena-lang.dev/guide/why-zena/#familiar-to-humans-and...
along with a doc in the repo on this topic: https://github.com/elematic/zena/blob/main/docs/design/ai-fi...
In short, the more deterministic, automated, checks the better. AI can deal with a pedantic language. I intend to add statically verified structured concurrency, units of measure, contracts, and eventually more and more formal methods into the language so it can be a familiar TYpeScript-like base with as many static guarantees as we can fit in.
I also think that fine-grained isolation, which Zena gets via Web Assembly, is critical for limiting the capabilities of generated code and the blast radius of bugs, vulnerabilities, and non-aligned behavior.
I do have an optimistic hope that a language also optimized for humans, readability and simple semantics especially, has value in the future, even when most code is generated. We'll see about that.