r/ProgrammingLanguages • u/philip_schwarz • 17h ago
r/ProgrammingLanguages • u/AutoModerator • 7d ago
Discussion September 2026 monthly "What are you working on?" thread
How much progress have you made since last time? What new ideas have you stumbled upon, what old ideas have you abandoned? What new projects have you started? What are you working on?
Once again, feel free to share anything you've been working on, old or new, simple or complex, tiny or huge, whether you want to share and discuss it, or simply brag about it - or just about anything you feel like sharing!
The monthly thread is the place for you to engage /r/ProgrammingLanguages on things that you might not have wanted to put up a post for - progress, ideas, maybe even a slick new chair you built in your garage. Share your projects and thoughts on other redditors' ideas, and most importantly, have a great and productive month!
r/ProgrammingLanguages • u/shrynx_ • 1d ago
Language announcement Mezze: a functional programming language on GraalVM
mezze-lang.orgHi All,
I am working a programming language, Mezze. It is in quite early stages.
Mezze has a fully inferable type system and also have first class effect system and runs on GraalVM
A lot is WIP, working on performance optimization (currently loop fusion) and distributed programing and lots of tooling and docs
Put up a quick website for explaining the language and its features more
Also piggy backing on graalvm could get a wasm built of the entire tool chain, so you play with examples in website.
The Concepts and Taste of Mezze explains how the language works.
r/ProgrammingLanguages • u/hun_nemethpeter • 2d ago
InfoCell - a consequences based syntax-free programming language
I working on ( https://github.com/hun-nemethpeter/InfoCell ) this programming language for a while.
It is an executable DSL concept. The OP DSL cells are executable, and acts like an ASM instruction. We have AST cells which directly generated from C++ code, so there is no input syntax. These AST cells are forming a language (we have if, do, while, class, template, ...), we have a compiler for it, which compiles from AST cells to OP cells. Looks like a regular interpreter. But ... The idea of this project is a new component, the ToolFinder and the description segment for AST nodes (which compiles to OP description). The description segment can describe how we can measure the effect of that instruction/function with other instructions/functions.
The language looks like this:
/*
void List::removeNode(Node* node)
{
if (node->m_previous) {
node->m_previous->m_next = node->m_next;
} else {
m_firstNode = node->m_next;
}
if (node->m_next) {
node->m_next->m_previous = node->m_previous;
} else {
m_lastNode = node->m_previous;
}
--m_size;
}
*/
listStructT.addMethod("remove")
.parameters(
parameter("node", _(std.Cell)))
.instructions(
if_(has(p_("node"), "previous"))
.then_(
if_(has(p_("node"), "next"))
.then_(set(p_("node") / "previous", "next", p_("node") / "next"))
.else_(erase(p_("node") / "previous", "next")))
.else_(
if_(has(p_("node"), "next"))
.then_(m_("first") = p_("node") / "next")
.else_(erase(self(), "first"))),
if_(has(p_("node"), "next"))
.then_(
if_(has(p_("node"), "previous"))
.then_(set(p_("node") / "next", "previous", p_("node") / "previous"))
.else_(erase(p_("node") / "next", "previous")))
.else_(
if_(has(p_("node"), "previous"))
.then_(m_("last") = p_("node") / "previous")
.else_(erase(self(), "last"))),
m_("size") = subtract(m_("size"), _(_1_)));
The comment section is the original C++ code, after that the InfoCell version, which is also C++, but basically creates AST nodes, that can be compiled to other InfoCell OP cells. So this is a language embedded language, doesn't compile to native code.
Actually there is an output syntax, which looks like this:
fn List<valueType=Number>::remove(p_node: Cell)
{
if p_node.has(previous) then
if p_node.has(next) then
p_node.get(previous).set(next, p_node.get(next));
else
p_node.get(previous).erase(next);
else
if p_node.has(next) then
m_first = p_node.get(next);
else
self.erase(first);
if p_node.has(next) then
if p_node.has(previous) then
p_node.get(next).set(previous, p_node.get(previous));
else
p_node.get(next).erase(previous);
else
if p_node.has(previous) then
m_last = p_node.get(previous);
else
self.erase(last);
m_size = m_size - 1;
}
There is no parser for this syntax although.
So back to the toolfinder, description segment part...
For example cell.set(key, value) description has a consequences subsegment which describe that equal(get(self(), p_("key")), p_("value"))). So the result of the SET can be measured with GET and EQUAL, basically SET(CELL, KEY, VALUE) => GET(CELL, KEY) == VALUE
Also this approach works with math functions. Math functions has an extra subsegment, I called it selfBuilders, where I can put the symmetries of that function.
Number.addPrimitiveFunction(std.Number.Add, op.Add, "add")
.parameters(
parameter("other", "Number"))
.descriptionBegin()
.consequences(
equal(subtract(return_(), p_("other")), self()))
.selfBuilders(
add(self(), p_("other")),
add(p_("other"), self()))
.descriptionEnd()
.returnType("Number");
With these informations I wrote an algorithm which calculate how the consequences behaves when an unknown variable is given. Basically something like this:
equation: 2 + X == 4
recombined: X + 2 == 4
recombined: 4 == 2 + X
recombined: 4 == X + 2 *
1. result: 4 - X == 2
1. result: 4 - 2 == X
1. result: 2 == 4 - X
1. result: X == 4 - 2 *
So this is the experimenting phase for the tools, so here I can remeber how an uninitialized variable (the unknown X) interacts with the tool's consequeences. Here I store which const/unknown combination leads to a simpler case, where a consequence tools all input's will be const variable. So I can transform an equation from one form to a simpler one.
Basically I just pattern match for function + const/unknown input params, then just reapply the tarsformation steps, just like solving the Rubik's cube. Pattern match for color combination and apply rotations.
equal(add(const_(_2_), unknown_(x) / const_(id.value)), const_(_4_));
equal(unknown_(x) / const_(id.value)), subtract(const_(_4_), const_(_2_));
We can now find a tool to the last equation: the SETtool.
set(x, id.value, subtract(4, 2))
Which is now executable.
So the goal is that I can just write a unit test like prompt, and this toolfinder can generate a code for it. So I can just "solve" a unit test.
r/ProgrammingLanguages • u/xeow • 2d ago
Expressions vs. statements
Got into a big argument with a coworker yesterday when they were converting some code from their own language (that they designed) into Python, JavaScript, C, and R as comparative examples.
The Python code that they wanted to write as the translation went something like this:
n = foo; if cond: n = bar
They were upset that Python allows ; as a statement separator but not before an if statement, even though
if cond: n = bar
is syntactically correct Python code when written on its own line. I explained why Python doesn't allow it, and he came back later and showed me that an LLM had suggested he write it instead like this:
n = foo if cond else bar
which of course is the canonical way to write that in Python. He was all flustered about that, and asked me why Python allows an if statement in that particular case and not after a semicolon, and I explained that x if cond else y in Python is not an if statement but is Python's ternary conditional expression and is directly equivalent to the ternary operator expression cond ? x : y in C, C++, awk, and JavaScript. He argued with me and said I was making a ridiculous distinction and walked away falsely believing that foo if cond else bar was an if statement.
I then explained that statements and expressions are very different things in programming languages, and just because the keyword if is present doesn't make something an if statement -- because in order to be an if statement, it has to be a statement in the first place.
Anyway, it made me realize how subtle the difference can be sometimes. For example, in Perl, the following is not a return statement but actually an if statement (with a return statement as its affirmative branch), due to the postfix conditional:
return foo if cond;
because it is identically semantically to writing:
if (cond) { return foo; }
Whereas in Python, the following is a return statement (with a ternary operator as its target expression):
return foo if cond else bar
So I can see why people sometimes get confused by syntax if they haven't had much of a theoretical background in language design. It also makes me wonder how much of programmer intuition about "what a statement is" comes from the particular languages they learned first.
r/ProgrammingLanguages • u/lil-kid1 • 3d ago
Discussion What lambda syntax do you wish Python had?
Python lambdas are particularly difficult because the lack of braces. Guido is not a fan of functional programming, so lambdas in Python are forever doomed to a single expression preceded by lambda, quite literally spelled out. However, it may please you to know that the lack or braces can easily be resolved (in my opinion most sensibly,) by surrounding the entire lambda in parenthesis. It may further please you to know that surrounding it in parenthesis is only necessary in an expression list: tuples, lists, dicts, sets, function arguments (and even then, only when there are multiple arguments.) With this in mind, which of the following syntaxes do you wish Python used? Annotations would of course be optional. For the sake of consistency with the entire language, all will use a colon before the block but feel free to comment your preferred non-colon alternative.
|arg: type| -> type: ...(arg: type) -> type: ...def (arg: type) -> type: ...\(arg: type) -> type: ...
Note: The second has ambiguity issues.
r/ProgrammingLanguages • u/endistic • 3d ago
Discussion How did you decide on a vision for your programming language?
Hi,
The title should be self explanatory, but if you want to see where I’m at context is below.
I’m in the relatively early stages of designing my programming language.
However, I’m struggling to really capture the essence of what I want out of it.
I have a very vague idea: a natively compiled language along the lines of Go or C++, that takes a hoist of features from other languages, like:
- Monomorphized generics
- C-style pointers at base (with safe stdlib abstractions for better quality of life)
- Rust-style enum and interface types
Despite these general ideas I have, I’m really struggling to bring them together into a nice package of a programming language.
My idea is basically to make a programming language that can compile down to a lean, native binary (or even other targets?), but still be user-friendly. C++ is manual memory management, Rust has a borrow checker in the way, etc.
The issue is I’m also struggling to decide what I want. Do I want a focus on native binary compilation? Multi-platform shenanigans (like Kotlin)? Object-oriented or imperative? What syntax should the language even have? I just can’t gather a solid vision for the language, enough to make something out of it.
Ideally, I want a programming language I can throw around on multiple platforms, with Rust-esque and Kotlin-esque semantics, without a bunch of hassle or having to worry about memory management. This is a very wide scope though and finding a vision for it is tricky due to all the features, I explicitly want to avoid a C++-like kitchen sink.
Does anyone have any suggestions on how to get a vision for a programming language & figure out what it needs vs. what it doesn’t?
r/ProgrammingLanguages • u/Potato871 • 3d ago
What are your favourite data structure operations?
My language workbench is to the stage where I can implement new operators and overloads very quickly, and I've started stealing syntax I like from JavaScript and C++.
Since I have one universal data structure, I can just add all the new operators to it.
I wanted to get some more good ones though, from different fields, different languages.
Oh and if you want to suggest something just as a challenge I might give it a shot and show you how I do it.
Edit: data structure was the wrong word, I have one data structure substrate/storage model that I am currently furnishing one major aspect of, it's not the one universal data structure, more like my swiss army knife API over the memory model.
r/ProgrammingLanguages • u/Jeaye • 3d ago
jank reimagines C++ errors and gets an official native package repo
jank-lang.orgr/ProgrammingLanguages • u/False_Actuator_6236 • 3d ago
ABC has served its purpose as a teaching language. Could it become a community project?
r/ProgrammingLanguages • u/umayl • 4d ago
A declarative, interval-scoped notation system for hybrid streams (designed out of frustration with calculus pedagogy)
github.comr/ProgrammingLanguages • u/mttd • 4d ago
Lost Bytes At The Crossroads Between User- And Kernel-Level Memory Allocation
ibr.cs.tu-bs.der/ProgrammingLanguages • u/mttd • 4d ago
Verifying the Rust Standard Library
amazon.sciencer/ProgrammingLanguages • u/Mean-Decision-3502 • 4d ago
Unambiguous Operator Specification for Programming Languages
nvitya.github.ioAs I changed recently the operators in my programming language I've created this specification:
https://nvitya.github.io/pluops/
I did not wanted to overload the operators like the C does with the / or Pascal does with theand/or/not. Neither re-use the operator symbols for some very different purpose, like C does with * and & so the code becomes more readable. I was orienting for existing solutions so this is what I came up with. The specification contains the symbol usages and operator precedence too.
If you are developing a new programming language, it would be nice to follow some standard, so at least the expressions would be portable between the languages.
I'm open for debates or suggestions.
r/ProgrammingLanguages • u/gingerbill • 5d ago
CTTI is Exponential, RTTI is Linear
gingerbill.orgr/ProgrammingLanguages • u/Fine_Seaworthiness19 • 5d ago
Language announcement The gab programming language
Hi all!
I am a long-time lurker of this sub, and a language enthusiast. I have been working on my own programming language for several years, and I finally worked up the courage to post it.
The language is called gab. I'm heavily inspired by lua, clojure, and smalltalk.
All the code is on github here and I've built a small website for the language here.
The language design, runtime, and standard library are all entirely my own work without the use of an LLM. However, I did consult LLMs occasionally when I wanted to research certain subjects (such as the difference between c11 atomics on x86 and arm).
I'm looking for any kind of feedback on the language, its goals/ergonomics, and the website itself.
Thank you for taking a look!
r/ProgrammingLanguages • u/Bro8an • 5d ago
Discussion Auto-memoization for pure functions – how to decide when it pays off?
Im currently working on a compiler for my own programming language. I want the compiler to automatically memoize pure function calls, but only when it actually improves performance. The challenge: how does the compiler decide whether caching a specific recursive call (e.g., self(x-1) and self(x-2) in fibonacci) will save more time than the memory overhead? tracking how many times a function recieves the same input isnt an option as this requires all recieved inputs to be saved. too many saved calculations can cause finding the right result for a function call to be slower than the actual calculation. so the memoization table shouldnt get to big. naive fibonacci should be memoized but simple addition for an example should not be memoized. do you have any ideas?
r/ProgrammingLanguages • u/ThomasMertes • 5d ago
A new Seed7 installer for Windows has been released
A new Seed7 installer for Windows has been released. The new installer is seed7_05_20260711_win.exe and it can be found here.
The installer installs the newest released version of Seed7. It writes all Seed7 related things into one directory, so it is easy to clean up, if necessary.
The installer can be used to download and install future releases of Seed7 as well.
r/ProgrammingLanguages • u/Potato871 • 6d ago
Discussion What is the interesting part of a programming language to you?
I've been working on some "documentation" for my own language (see here), which got me thinking: do we all see languages the same way? I personally look for unification of concepts and extensibility in a design, yet I've seen those who care deeply about functional purity or clean decompositions.
What do you look for in a programming language? And why?
r/ProgrammingLanguages • u/chipmunk-zealot • 6d ago
Show-and-tell: anna lang
I made the anna programming language for a Language Jam I hosted in the beginning of August. 1 week is not enough time to explore too many ideas but 2 interesting(ish) ideas I explored were
- all function invocation is infix with
.(dot) operator. This lets you chain/pipeline nicely. - the only looping semantic available is the
iterateoperator which produces a stream.
I made a playground if anyone wants to poke at it. https://jzwood.github.io/langjam2/submissions/anna/playground/
r/ProgrammingLanguages • u/tjpalmer • 6d ago
Wasmi 2.0 - Engineering of the Fastest Wasm Interpreters
wasmi-labs.github.ior/ProgrammingLanguages • u/False_Actuator_6236 • 7d ago
A teaching language that grew up a little: ABC v0.1 now talks to C libraries
r/ProgrammingLanguages • u/NoSubject8453 • 7d ago
Requesting criticism Do you find this syntax readable
github.comI feel like curly braces aren't enough alone for organizing code. I also want it to have natural steps that induce some blank lines after completion of the step. like with assembly. my main concern is readability and self documentation. It will mainly be for programming on windows. The 'thunk' libraries are mostly wrappers for tedious apis like writeconsole. I plan to add more for things like graphics and math in addition to the planned window/console/file. I see 'thunks' in ghidra so its a reference to them being wrappers. It will also support normal win32 imports.
thankz
edit 1: I have read all feedback so far. the language is case insensitive. for branch{}endbranch and alias.name{}end alias.name the idea was to make it a little more clear which curly brace belongs to what if someone had a bunch of nested stuff. with that being said, it seems the consensus is that the syntax is awkaward while readable, there are still some large wrinkles.
because of your feedback, i will 1. Allow the pattern "name{}end name"," name end name", and/or" {}". 2. Make the language case insensitive 3. Make whitespace completely optional 4. Sinilar to the first thing, allow parameters for functions to be entered either on seperate lines or within parenthesis and seperated by commas (but not both within the same function) 5. allow %/n% within a string, or a %hexConstant% for other characters instead of 'newline' on a seperate line.
i am still accepting feedback, and i appreciate those who have responded.
r/ProgrammingLanguages • u/Maurycy5 • 7d ago
Blog post Blogpost #8 — Duckling's first programming contest
duckling.plr/ProgrammingLanguages • u/hopeless__programmer • 8d ago
Discussion I call this "(a=aa)(a=a)" test
Many years ago while trying to make my own programming language I faced an issue. In short, parsers didn't parse specific inputs as expected, due to some implicit rules.
For instance, let's consider EBNF grammar for a sequence of expressions a=aaaa, where a on the right can repeat arbitrary number of times.
This will look something like this:
symbol = "a"
params = symbol params | symbol
Line = symbol "=" params
lines = Line lines | Line
I designed it without + and * notation on purpose, to narrow down the root cause to the most basic rules: terminals, and and or expressions, and recursion.
Using this grammar I expect the text a=aaa=a to be parsed as (a=aa)(a=a): as two separate Line.
But typically parser generators will not produce parser that can handle such case.
Instead, the parser will (typically) fail.
The root cause is of course the nature of such parsers: they don't scan for all possible combinations.
Instead, in case of collisions (like in this case a at the end of a=aa and a at the beginning of next a=a) it is expected that user will insert negation or something to "fail" a specific route fast, eliminating the collision.
But doesn't this challenge the whole purpose of grammars as "simple" description of language rules?
It might get very difficult to predict all possible such collisions for a large grammar, like for Python or C++.
Are there any generators that don't have such limitation and can pass (a=aa)(a=a) test?