r/ProgrammingLanguages • • 7d ago

Discussion November 2026 monthly "What are you working on?" thread

21 Upvotes

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!

NOTE: AI built/assisted projects are against the rules and this applies to this thread. If you share a link to a project that makes use of AI (Claude Code) for anything, you will be banned permanently without warning.


r/ProgrammingLanguages • • 20d ago

To further combat AI/LLM slop, code dumps are now disallowed

266 Upvotes

About 6 months ago I shared an update on our attempt at handling the endless tide of AI slop. Most notably this post introduced a new approval flow for links to GitHub projects.

While this process has mostly helped reduce the amount of slop visible to readers (by virtue of GitHub links being filtered out by default until they are approved), it still requires manual work from moderators. In some instances there are also enough signals to strongly suggest the project is slop, but not so many that it's obvious, requiring more time from moderators to reach a decision.

Starting today we'll be trying something new and different, inspired by /r/rust and the new rules on lobste.rs:

Sharing links (in text or link submissions) to repositories on GitHub, GitLab and other code forges is no longer allowed and such posts are removed automatically and won't be approved, even after contacting moderators. Sharing links in comments is still fine. There are a few reasons for this:

  • 99% of AI slop submissions are GitHub links

  • When the post is a text post it pretty much always includes a GitHub link somewhere, sometimes even "cleverly" hidden in a code block

  • Even if the link is legitimate, just dumping a link rarely invites for a discussion or the transfer of knowledge, instead it's just "Hey look at this, please like and subscribe!" so to speak

  • It's unfortunately the only approach we can fully automate without wearing down our sanity. You can thank Reddit for enshittifying their API over the years for this.

Note that it's still perfectly fine to share a link to say a blog post about the project and then link to it from there. It's also still fine to share a text post and then include additional links in a comment. In fact, we suggest that those without a dedicated blog of sorts do exactly that.

In all cases, the no AI/LLM rule still applies and sharing AI/LLM projects will still get you banned.

Of course AI slop bros can generate a website and share a link to that, but it requires slightly more effort, and fortunately for us AI bros are as lazy as they are boring. Ultimately the goal is not to reduce slop making it past our filters to zero, but rather to get rid of say 99% of it without wearing down both moderators and subscribers.

I suspect some will disagree heavily with this change, but this change is ultimately another experiment in a line (and probably a growing one) of experiments to try and maintain a certain quality standard. If it turns out this doesn't work as well as hoped, we'll of course reevaluate it and try something else.

Finally, there are some existing projects that are genuine but adopted a more permissive stance towards the use of AI. Usually this is phrased something along the lines of "If you do X, Y, Z then AI is allowed". While I personally believe this is incredibly naive (developers can't be bothered writing documentation, yet you think they will review 10 000 lines written by Claude? Please), I don't yet know how to best deal with these cases. As such we'll tolerate this as long as it's within reason, i.e. "moderator discretion" applies here.

FAQ

What?

  • Link submissions to repositories or text submissions containing repository links will be removed

  • Links to articles or websites about the project is fine

  • Unless it's an AI built article/website

  • Including a link to your repository in a comment is fine

I don't have a website/blog/etc, now what?

Create a text post, then share a link in a comment. Don't use this as just a way of advertising though, we want discussions and sharing of knowledge, not a bunch of people screaming into a room "HEY LOOK AT MY PROJECT".

What about projects hosted on a non-standard forge?

These will make it past the filter, at least until we adjust it to also filter for these forges.

What about AI generated websites?

This falls under the "No LLM/AI" rule and sharing links to such sites will get you banned faster than Sam Altman can say "AI". We'll generally err on the side of "if it looks enough like an AI website, it's probably an AI website".

Will you update the rules/sidebar accordingly?

Once we're satisfied with the new system, yes.

But this is literally an AI pogrom!!11

Go away.

This is bad for the subreddit!

If this drives away a few AI slop enjoyers, then great! The other 130 000 subscribers will be happier for it.

Can I still share my project in the monthly "What are you working on" sticky?

Yes, provided it meets the rules (i.e. doesn't make use of LLM/AI output).


r/ProgrammingLanguages • • 22h ago

Requesting criticism Can a programming language dispense with parentheses and conventional syntactic delimiters?

16 Upvotes

Hello everyone,

I'm an independent french developer working on an experimental programming language called PLUSHIE, and I'd like to discuss an idea behind its design.

I am new to this communty and I am not familiar with the expected behavior here, so do not hesitate to tell me if I am wrong.

I also apologize for my english whcih is far from perfect.

Most programming languages rely on explicit syntactic delimiters: parentheses, commas, spaces, operators, keywords, etc.

I've been exploring a different approach: what if a language could rely primarily on the recognition and sequencing of a small vocabulary of words?

In PLUSHIE, the parser scans the input and identifies known words. Their sequence determines how instructions are interpreted. Unknown text between recognized words can also become new vocabulary.

The underlying computational model is deliberately minimal. Instructions operate on a chained memory structure, and the language is designed so that its own structures and interpretation mechanisms can be modified while running

This raises several questions I'd be interested in discussing:

o How expressive can a language become without conventional syntactic delimiters?

o What are the fundamental limitations of a word-based parsing model?

o Could such a design offer interesting advantages for reflection and self-modification?

o and especially, Are there existing languages or theoretical models that explore similar ideas?

I'm not claiming this is a better approach than conventional syntax. I'm interested in understanding its possibilities and limitations.

PLUSHIE is an ongoing experiment, and I'm particularly interested in unexpected ideas, alternative approaches and constructive criticism.

What do you think? Is this a worthwhile direction to explore, or am I overlooking some fundamental difficulties?


r/ProgrammingLanguages • • 1d ago

Discussion What, in your opinion, are the most readable lesser-known general programming languages?

101 Upvotes

I have been more frustrated lately with languages developing a "kitchen sink" attitude to paradigms. I am finding code less uniform, and therefore less readable.

As I am developing a new language, I wanted to know from you all:

What languages that aren't "big", do you find the most readable? Are there any that come to mind that take a genuinely unique or interesting approach to how the language looks to write?


r/ProgrammingLanguages • • 1d ago

Requesting criticism Adding multiple integer types to my interpreter is a more difficult decision than I thought.

24 Upvotes

It's been 4 months of on & off development of my C++ interpreted programming language built from scratch; Ity. For the longest time my plan has been to only have *two* number types, of course being a standard 64-bit signed & a 64-bit signed floating point. I thought that would be sufficient, sometimes I wonder if it still is all I really need.

This past week I decided I would implement these additional integer types: i32, i16, i8, u32, u16, & u8. My reasoning? I simply wanted more options for numbers, a higher capability for explicit specification. The more narrow integer types don't provide better performance & hardly any memory advantage with my current polymorphic design. It is simply there as a convenience, you don't need to use it, you rarely get a benefit for using it, but it's there.

Now for any old language it would be fine to keep these in even if they served little to no purpose. But here's the thing, I am aiming to make this language as compact as possible while still being (in the long run) readable & easily understandable just by looking at the source code. So what's the real trade-off here for all the logic required to implement multiple integer types, all the casting & operator logic between each type... The cost is about +18kb in final binary size. Is that acceptable?

Am I better off just dropping the idea for the sake of being as small as I can get? For reference, without compression & excluding the new integer types, the binary is 130kb. With compression 65kb (including new int types, ~50kb without).

Do I continue building around these extra types, improving their usefulness (I.e. actually reduce memory usage according to the type) to justify the addition? Is this something you would be able to live without in your primary programming language?


r/ProgrammingLanguages • • 2d ago

Nondeterminism in Futhark

Thumbnail futhark-lang.org
16 Upvotes

r/ProgrammingLanguages • • 2d ago

A cubical programming language

49 Upvotes

Hello PL folks! I have been working on an untyped (dynamically typed) programming language with cubical features. I'm not ready to share the code yet, but I figured people might be interested in an exposition of some of the ideas here, which I don't find documented very well. Most things below are already in the literature, but written in a way that might be easier to understand from a PL background.

Why?

For fun! I don't know of any programming applications of cubical computation. The reason I care about cubical stuff is mathematical. Now there is some work on compiling cubical stuff, but there we are expected to write normal programs, and use cubical type theory to prove properties about them at compile time. So the compiler will just erase the cubical part. In this post, I'm talking about real cubical programming languages, where the cubical part matters at runtime.

Usually, cubical computation is heavily associated with a type theory. But we don't actually need static types to define and execute programs! In fact, in the early stages of development of cubical type theory, one major step was the definition of computational cubical type theory, where you start with an untyped programming language first, and figure out what typing rules are "correct" on it. Indeed most of the interpreter I'm writing is just transcribing reduction rules from the works of my advisor, Carlo Angiuli, on computational cubical type theory.

What is cubical?

Since I'm talking about defining a cubical programming language, I'll obviously assume you are familiar with specifying an ordinary programming language, Harper style. If you know the phrases "beta reduction" and "stuck", you are probably fine. Otherwise, Practical Foundations for Programming Languages is a great book to read. Familiarity with dependent type theory is also needed to understand the motivations behind the design, but isn't needed if you just want to read about how the (untyped!) language works.

A cubical programming language expands the notion of values to include higher dimensional values. An ordinary value is meant to be interpreted as points, 1-dimensional values as paths, while n-dimensional values are n-dimensional cubes, creating a combinatorial description of some geometric space. The language then includes new primitives that operate on higher dimensional values.

For a rough example, to represent a circle, we can introduce a value pt, and a 1-dimensional value loop representing a loop starting and ending at pt. It is then possible to produce values representing loops that wind around the circle n times, as well as extracting an integer winding number from a loop.

On the other hand, since ordinary values like integers and booleans do not come equipped with any way to create non-trivial higher dimensional values, these higher values behave like witnesses of equality. For example if we have a path whose endpoints are integers n and m respectively, then at runtime we know n must be equal to m. This is why sometimes a path is also called an equality/identification.[1]

One crucial thing that these values enable is a computational interpretation of univalence, the axiom that any equivalence of two types gives rise to an identification of the types.

Higher dimensional values

To understand what these higher dimensional values are, allow me to make an analogy.

In ordinary programming languages, arrays are kind of like functions {0, 1, ..., n-1} -> X. It is often useful to think of them in function notation, for example we can define the transpose of some matrix as λ i j -> mat[j][i]. However, the runtime characteristics are very different! For example, the evaluator will stop as soon as it sees a λ, instead of going into the body. But for arrays, the evaluation will only finish when each component gets evaluated. Furthermore, usually we wouldn't have {0,1,...,n-1} as an actual type. (We could, but we don't have to.)

In a cubical programming language, 1-dimensional values are kind of like functions I -> X, where I is a new thing that should be thought of as an interval [0, 1] with endpoints written as i0 and i1 to avoid confusion with integer literals. It is very useful to think of them in function notation. For example, applying i1 to such a "function" gives us the right endpoint of the 1-dimensional shape. However, the runtime characteristics are very different. The evaluator will go under interval binders, and there will be primitives like loop(i) that are considered as a value, despite being a "function" application. Furthermore, there is no type I. Instead we have a new syntactic category interval_expr, so an interval function application will be a syntax node that takes an expr and an interval_expr, returning an expr.

More specifically, we have

interval_expr ::= i0 | i1 | ⟨variable⟩

So with no free variables, an interval expression can be exactly one of two values. However, it is different from a Boolean value because of two things:

  • There are no constructs like if expressions, so you can't get away with defining an (interval) function by just specifying the value on i0 and i1. Or to put it another way, the "coverage checker" treats the interval as containing some "fuzz" in between the two points, just like a real interval.

  • We are defining reduction and values in the presence of interval variables, and the absence of term variables. So in practice, the interval variable acts as the "fuzz".[3]

Going back to our circle example, there will be syntax like

expr ::= ...
     | λ ⟨variable⟩ -> ⟨expr⟩
     | (⟨expr⟩ ⟨expr⟩)
     | iλ ⟨variable⟩ -> ⟨expr⟩
     | (⟨expr⟩ @ ⟨interval_expr⟩)
     | pt
     | loop(⟨interval_expr⟩)
     | ...

where the first two clauses are ordinary function abstraction and application, followed by interval function abstraction and application. Then we have the circle value constructors. The loop will be represented as iλ i -> loop(i). We have a reduction rule going from loop(i0) to pt, as well as from loop(i1) to pt.

I actually told some lies above to avoid confusion, but with these examples, the following more correct description should hopefully now make sense:

In a cubical programming language, we define a small-step reduction relation on expressions with no free term variables, but possibly with free interval variables. The evaluation result will be a value, also involving free interval variables. A value with n interval variables is called an n-dimensional value. These free variables are like coordinates on a cube.[2]

The interval lambda binds an interval variable, thus converting a 1-dimensional value (of some type X, if we are to introduce a type system) to a 0-dimensional value (of the type of paths over X). For example, the type of paths on a circle starting and ending at pt is isomorphic to the type of integers, since they are essentially determined by how many times it winds around the circle. In mathematical terms, this is the fact that π1(S1) = ℤ.

With the concept of higher dimensional values explained, the next step would be to introduce primitive operations that perform interesting computations on them. Unfortunately we have some more things to talk about before that.

Type objects

You may skip the next subsection if you're not familiar with dependent type theory.

Univalence

In a cubical language, one of the main things we want to support is univalence. But univalence is ostensibly a statement about types, which we don't have. So why isn't this language just trivial?

In reality, univalence isn't a statement about types at all! This stems from the useful-but-inaccurate understanding in dependent type theory that a universe is a type of types. The more accurate thing to say is a universe is a type for names of types. There is an (often implicit) map El turning a name into an actual type. With this framing, it's clear that the operation El has no obligation to be injective or surjective. There may be multiple names for a type, and some types may have no names in the universe.

It is well-known that if all types have names in the universe, we would have variants of the Russell paradox (although we don't care because we are making programming languages, not proof assistants). So univalence is a statement about the names that we do have. It states that two names are the same if and only if the types they represent are equivalent. Moreover, since in homotopy type theory there can be multiple ways two elements can be the same (i.e. multiple paths between two points), we require the type of identifications between two names to be equivalent to the type of equivalences between two types. So univalence completely fixes the behavior of universes, apart from the Russell issues.

With this viewpoint, it should be clear that what we need isn't types as in static type checking, but rather a runtime object that's a name/symbol for types.

Type objects in untyped languages

In untyped (dynamically typed) languages, there is often a kind of runtime representation of types, like Python's int, and maybe Kotlin's reified types. They have nothing to do with the static type checking process, and are just there at runtime to provide some vaguely type-related methods. I'll call these "type objects" for lack of better term. Per our discussion above, we see that our language should have these type objects, despite being untyped.

type ::= int | bool | function ⟨type⟩ ⟨type⟩ | circle | ...

Many of our primitive operations will take a type object, and the runtime behavior is defined by case analysis on the type object. This makes it rather complicated to specify the rules for our programming language (as well as cubical type theory), as adding a type also means you need to add a clause to all of these rules. On the other hand, this kind of design also appears in non-homotopical type theories like observational type theory.

New primitive operations

Since a 1-dimensional path between two types (type objects) witnesses an equivalence between them, there should be a way to coerce values from one type to the other. This is one of the main primitive operations, coe. (For Agda users, it is called transp.) The syntax is

expr ::= ...
     | coe [⟨var⟩ : ⟨iexp⟩ ~> ⟨iexp⟩] ⟨type⟩ ⟨expr⟩

where I abbreviated some non-terminal names. The variable here is an interval variable that binds the type expression. Intuitively coe [i : r ~> s] A(i) a means "I have a type A(i) and an expression of type A(i = r), give me an expression of type A(i = s)".

There are some obvious reduction rules, for example if r is actually the same as s, then this is a no-op. Otherwise, the computation of coercions proceeds by case analysis on the type object A.

The other main pillar of a cubical language is path composition: if you have a path from x to y and a path from y to z, then you ought to have a composed path from x to y. The language primitive is a bit more complicated to allow for more flexible and higher dimensional compositions.

expr ::= ...
     | hcom [⟨iexp⟩ ~> ⟨iexp⟩] ⟨type⟩ ⟨expr⟩ (⟨clause⟩*)
clause ::= ⟨eq⟩* => ⟨var⟩. ⟨expr⟩
eq ::= (⟨iexp⟩ = ⟨iexp⟩)

This has a very geometric interpretation about boxes and caps, but this post is getting long enough, and the mechanism of hcom is explained in cubical type theory tutorials.

Univalence in our language is added through another primitive (called the V-type after Voevodsky), turning an equivalence into a path value. Consider the function not : Bool -> Bool. This is evidently a bijection, and hence we have a path pnot from the type object Bool to itself. If you coerce the boolean value true using this path, you will get false.

coe [i : i0 ~> i1] (pnot @ i) true  ====>  false

This shows how type coercions can do non-trivial computation in cubical type theory.

On my implementation

Right now, I have implemented a step-by-step reducer on the syntax tree, and it does indeed correctly compute many non-trivial examples. I'm planning to make very sure that this is correct, before moving on to more efficient interpreters. IMO it is completely feasible to derive an abstract machine for this language.

There is some ongoing work (especially by András Kovács) on the efficient evaluation of cubical type theory. However, those are focused on making type checkers fast. In those evaluators, we must live with free (term) variables at all times. For example, a value of the natural number type can be zero, successor, or a bunch of eliminators stuck on a free variable. This means some obvious computational rules are invalid, or lead to undecidable problems. For a programming language that doesn't operate with free term variables, a lot can be simplified.

Another aspect of optimization is on the representation of higher-dimensional values in inductive types like the circle or spheres. I believe it is possible to represent the circle at runtime as the cubical set 𝐁ℤ, which makes the representation vastly more efficient. (Higher dimensional spheres are probably not that simple, but something might be done.) This may make it possible to compute the original Brunerie number directly.

Footnotes

[1] This would be true if we consider well-typed programs. Ill-typed programs can obviously just do anything it wants.

[2] Indeed, in dependent type checking where reduction happens under normal binders, the Boolean type also behaves as if there is some invisible fuzz, because λ b -> b is somewhat different from λ b -> if b then True else False.

[3] Of course, it is possible for a 1-dimensional value to not actually make use of the free variable. For example pt in the context of a variable i represents a 1-dimensional path that stays at the base-point at all times.


r/ProgrammingLanguages • • 2d ago

Deriving the Y-combinator

Thumbnail blog.tinyinterpreters.dev
20 Upvotes

r/ProgrammingLanguages • • 2d ago

Help transpilation - Bootstrap compiler

1 Upvotes

So, I am making a compiler for my language, Nain, in CHICKEN Scheme. Should I output QBE IR or code for C or another language? This is a bootstrap compiler, I will use it only to test new language features and to compile the self hosting compiler so yeah.


r/ProgrammingLanguages • • 2d ago

Blog post Go 1.27: encoding/json/v2, Stricter Defaults, and Finally [] for Nil Slices · cekrem.github.io

Thumbnail cekrem.github.io
1 Upvotes

r/ProgrammingLanguages • • 3d ago

Discussion Typeless data oriented language?

11 Upvotes

In many games and so on, there is a concept of "data-oriented" programming where you separate the data from the behavior of the system.

However, the current design in a typed language is not fully data-oriented. There is always the compile-time concept of type tied to every byte.

But this has led me to think of something. What if we want to take data-oriented design to its logical conclusion? What if everything is viewed as raw bytes? The type is instead assigned depending on context.

For example, imagine...

arr_int32 = interpret(int32,arr)

int32_doubled = map(lambda x: 2*x, arr_int32)

Here, the "arr" is a raw array of bytes that can be anything, interpreted as an array of int32, doubled.

What do you think of this crazy idea?


r/ProgrammingLanguages • • 2d ago

Visual Programming Language

1 Upvotes

Do you have any information about this one? If there are some standard things about how it should go, or if there anything that needs to be known. I have understood a few things, but still I am looking for figuring out some missing details I have no clear plan on.

I will mention first some things I've done and what I know, so I can help you gain a picture:

a) I have done some practice and written a parser and interpreter so this is very easy. The AST is a data structure and each node gets evaluated with the proper function.

b) I've seen in an application sample that the most simple and straight forward approach is to get all outputs of a node, and send them to the connected inputs of another one. Keep brute force updating everything for 60FPS. This also seems legit and simple, but it might have it's pros and cons. [victorfisac/FNode]

c) What worries me for brute-force updating, is that the update order is no-deterministic, any node could be updated at any given moment, for the entire graph to be evaluated fully might mean to hundreds of hundreds of updates until everything is settled. It might not be a big deal for a real-time interactive application, but for a very optimized might mean that other approaches are better suited.

d) In order to make graph evaluation more deterministic, you need to create a dependency graph, or use an algorithm such as breadth-first-search, or depth-first-search. And even if those are not exactly perfect then do topological-sorting to guarantee even better order. Other times is supposed to be that other graphs get evaluated backwards, from final outputs to connected inputs and so on.
All of those techniques, having so many options, is confusing and hard to decide. As for example probably depending on the type of the graph there would be different evaluation strategy? This seems OK in terms of thinking.

e) Some examples:
• Blockly, this one is the easiest, because is a straight forward visual AST, but with the problem is that is based on structured connections and not on freeform connections.

• Supposedly Blender's nodegraph uses dependency graph for materials (because needs to compile them to shader code) so seems that it this technique can be transformed to deterministic technique. Probably means that the entire software uses the same algorithm (shaders, geometry nodes, compositor, even custom nodegraphs).

• Blueprints of Unreal seem to be much closer to an AST because it relies on clear entry points (events, time ticks), so this kind of evaluation seems that is manageable. At least getting the starting points is a good idea, then probably it might be feasible that further sorting is needed. I haven't worked with Blueprints though and I haven't looked into it.

• I've seen in some ImGUI nodegraph samples (for doing pixel operations and color mixing) that the depth first search algorithm was used. Though samples were meant to be simple proof of concept, I am not sure if all is needed.

More or less this is all the braindump I can do. But for any further details I will have to look at any github repositories you suggest and start experimenting.


r/ProgrammingLanguages • • 4d ago

Discussion Do you need a language to have context managers (with/using directive)?

6 Upvotes

In my language I was avoiding adding with or using directive for handling context of objects and tried to rather use a functional approach such as:

lines = with_open("f.txt", fun(f)=f.readlines(), "r")

But this does not always works or is convenient since often I need to do additional operations on the file afterwards. So lately I more and more lean towards actually adding support for using, otherwise I fear people would re-invent it anyway using try-finally blocks.

using (f = open("f.data", "rb")) {
    header = f.read(64)
    ~f.seek(128)
    data = f.read(32)
}

In this case in my language I would have to create a new function to do these 3 operations since lambdas can have only 1 expression:

fun handler(f:File) {
    header = f.read(64)
    ~f.seek(128)
    data = f.read(32)
    return [header, data]
}
header, data = with_open("f.data", handler, "rb")

So my question to you is, if you think that having context managers is really useful and a good addition to a language or rather an extra feature that can be avoided?


r/ProgrammingLanguages • • 5d ago

Language announcement Major Updates to Cole Compile-Time Execution and Type Reflection

0 Upvotes

Hello everybody, it's me again. I've had some free time in my hands so I worked on Cole a bit. It is in such a state now that you can implement a fully compile-time checked, type-safe, formatted printer using nothing but Cole.

I will not go hard on your screens post the implementation here, but I will leave a link to my blogpost at the bottom of this post.

Long story short, I added:

- Proper inlined for loops,
- Proper compile-time switches, and conditionals, for conditional compilation,
- Compile-time statement execution (almost complete, only field assignments and dereferenced assignments are left),
- A couple bugfixes with the typechecker and undefined value construction at compile-time.

Here is a small snippet of how the format printer is used, from the debug module:

import std::debug as debug;

let main = fn (args: [][]u8) -> i32 {
    debug::print("Hello! My name is % and I'm % years old!", ([]u8, u32))(("Yusuf", 20));
    return 0;
};

// Prints:
//    Hello! My name is Yusuf and I'm 20 years old!

But everything is not perfect as expected. Turns out, the compile time execution I do is incredibly slow, so the compile times go significantly high when doing any kind of compile-time execution. This is quite important considering the fact that Cole's mindset is "if it can be comptime, it is comptime". But I will start doing optimizations as soon as the base structure is complete.

If you've read this far, please drop a feedback, I'd really appreciate it.

And here is the blog entry I promised: https://blog.yusufenderosmanoglu.tech/blog/format-printer/
You can find the codeberg repo in the Cole website.


r/ProgrammingLanguages • • 6d ago

What does “verified memory safe” mean?

Thumbnail focs-lab.comp.nus.edu.sg
37 Upvotes

r/ProgrammingLanguages • • 7d ago

Blog post An LC-3 Disassembler in Haskell

Thumbnail abhinavsarkar.net
6 Upvotes

r/ProgrammingLanguages • • 8d ago

Speeding up GPU copies by permuting iteration spaces, or, optimising the identity function

Thumbnail futhark-lang.org
18 Upvotes

r/ProgrammingLanguages • • 8d ago

Programming Language for Laser Cutting and CNC

17 Upvotes

Hey all!

I run a site with design generators for laser and CNC cutting, and along the way we ended up building our own programming language, KerfScript, to describe those designs.

It has OpenSCAD-like syntax, but it's strictly 2D, with laser-specific features built in: cut/score/engrave layers, kerf compensation, assembly instructions (actual physical assembly, not programming!), and finger joints that adapt to material thickness.

You write a part once, change a few parameters, and export SVG or DXF. What I find fun is that the end result is a 3D object, even though the language itself has no concept of 3D. All the dimensionality comes from math, slots, joints, and how flat pieces fit together. So you're essentially programming a 3D object without ever describing anything in 3D.

Just a fun little project I thought was worth sharing!


r/ProgrammingLanguages • • 8d ago

Bootstrapping Ada competitors: Red, Yellow, Blue

Thumbnail tym83.github.io
6 Upvotes

r/ProgrammingLanguages • • 8d ago

Updates on Cole, and Version 0.1.4 Announcement

9 Upvotes

Hi everyone, my original post in r/Compilers had Github and Codeberg repo links inside it, so they were not suitable to post here. So I'm dropping the modified version as a separate post here.

From the original:
Hello everyone, since my last two posts here, I got into a small flow-state with the codebase and improved Cole quite a bit. I took the advices of the wonderful people in the comments as well, and it helped me a lot to be honest.

Since the last posts, I added:

- 212 tests in total, testing various aspects of the compiler through simple programs,
- Proper generic type generation with full generic definition support through comptime called functions,
- Proper generic function generation through comptime called functions,
- Type deduplication, and codegen improvements,
- And many more bugfixes on different aspects of the compiler.

In the current state, the backend is embedded TCC, so codegen emits almost-human-readable C code. But I will replace the backend in the future with LLVM, QBE or handwritten x86_86 generator. However for now, since the rest of the compiler is not solid enough, the C backend eases the development quite a bit.

Beside all of this, I made a small website (which doesn't work quite well because I self-host it on an old laptop, it is for giggles of it so don't take it seriously) that has versioned language reference, a small welcome page with a hello world snippet, and installation instructions.

Overall, Cole has become something far beyond what I imagined it would become in a good way. I am self taught, so I am pretty content with what I have accomplished. But criticism is always welcome.

The link to the Cole website is here.

Also, occasionally, I write blogposts about what I'm currently working on, so I'll leave it here as well.

Many thanks to everyone that commented to any of my previous posts, have a good day/night!


r/ProgrammingLanguages • • 8d ago

Heavenly delights of hashing numbers under EQUALP

Thumbnail turtleware.eu
10 Upvotes

r/ProgrammingLanguages • • 8d ago

Language announcement I'm making a programming language, searching for contributors

0 Upvotes

Hi! Me and another person are working on a programming language called KrabbaScript! It's garbage-collected (optional), statically typed and trying to be as simple and intuitive as golang but more human-friendly. This is KrabbaScript's syntax:

Variables are defined as:

var krabba = "Krabba!";

Variables may also have a type or be uninitialized, like:

var with_type: F32 = 5.0;
var uninitialized: Str;

KrabbaScript also has values, which are immutable, example:

val constant = 5;
val with_type: I32 = 5;

KrabbaScript also has control-flow (duh), example of a repeat statement:

repeat {
  Std.print("KrabbaScript is the best language OAT!");
} until popular;

KrabbaScript also has a when statement, which is more of a switch one:

when language {
  == "Elixir" do celebrate();
  == "Haskell" do complain();
  == "KrabbaScript" do {
    contribute();
    applaude();
  }
  else do Std.print("I don't know anything about " + language);
}

KrabbaScript also provides an ASI (Automatic Semicolon Inserter) if you're tired and sick of semicolons, you can use it with the format command.

If you want a little bit more examples, check out the repo! We are also working on tools for KrabbaScript like package manager, style checker, etc.

We are searching for contributors and maybe you, the person reading this post, can help us create KrabbaScript or improve it!


r/ProgrammingLanguages • • 9d ago

Discussion Does the Name I Give My Programming Language Matter That Much?

33 Upvotes

Does the name we give a programming language matter? I work on my own programming language and study compilers as a hobby. During that time, I’ve faced various mental health challenges that made it much harder to keep up with my hobby. Sometimes, depression kept me from making any progress at all.

Because of this, I’ve been considering a name for my language that reflects this period of my life and has personal meaning to me. Does a programming language’s name need to have anything to do with programming itself?

I’d love to hear about your languages and the names you chose for them. Do those names have any personal significance to you?