I have thought about it and decided that all I should demand of the reference variables in hiha is that, at any given point, they match in name and to what they refer.

Thus all the stuff I said earlier about appending incremented numbers to variable names is probably now null and void...

#programming #programmingLanguages

Hardware Memory Models

์ด ๊ธ€์€ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ํ™˜๊ฒฝ์—์„œ ํ•˜๋“œ์›จ์–ด ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ์˜ ์ค‘์š”์„ฑ๊ณผ ๋ณต์žก์„ฑ์„ ์„ค๋ช…ํ•œ๋‹ค. ํŠนํžˆ, ์ˆœ์ฐจ์  ์ผ๊ด€์„ฑ(sequential consistency) ๊ฐœ๋…๊ณผ ์ด๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ํ˜„๋Œ€ ํ•˜๋“œ์›จ์–ด(x86-TSO, ARM, POWER)์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ ์ฐจ์ด๋ฅผ ๋‹ค๋ฃฌ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ, ์ปดํŒŒ์ผ๋Ÿฌ, ํ•˜๋“œ์›จ์–ด ์„ค๊ณ„์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์˜ ์ผ๊ด€์„ฑ๊ณผ ์ตœ์ ํ™” ๊ฐ€๋Šฅ์„ฑ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ด๋‹ค. ์ด ๊ธ€์€ Go ์–ธ์–ด์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ ๊ฐœ์„  ๋…ผ์˜๋ฅผ ์œ„ํ•œ ๋ฐฐ๊ฒฝ ์ง€์‹์„ ์ œ๊ณตํ•œ๋‹ค.

https://research.swtch.com/hwmm

#memorymodel #hardware #multiprocessing #concurrency #programminglanguages

research!rsc: Hardware Memory Models (Memory Models, Part 1)

Just Fucking Use Go - Blain Smith

It is not for nothing that mathematics (usually) draws a distinction between operations and relations.

Some computer programming languages, not so much.
Here is one thing that can happen, using Python just as a handy example:

>>> 2 == 1 == 0
False
>>> (2 == 1) == 0
True

So, not left-associative.

>>> 0 == 1 == 2
False
>>> 0 == (1 == 2)
True

And not right-associative, either...

What do we call it?
Perhaps "quasi-associative" might fit the bill?
In any case, "anti-associative", "counter-associative", "dissociative", "non-associative", and "pseudo-associative" don't.

Note: the above doesn't happen with irritating silly parentheses โŒซโŒซโŒซ Lisp's prefix notation.

#CaveatProgrammator
#ComputerProgramming
#ProgrammingLanguages

I think this is pretty neat, and a bit different than most c-style language implementations: any number of initial arguments can be factored out of a group of functions:

https://mocompute.codeberg.page/item/2026/2026-05-08-tess-receiver-blocks.html

#c #programming #programminglanguages #cprogramming #compiler

Tess receiver blocks: reduce visual noise in API headers

Jez returns for programming language chat!

https://video.infosec.exchange/w/ddh8hoaL2qJj4hvXgS9RUm

Jez returns for programming language chat!

PeerTube

MMTk porting guide is the prime example of:

How to draw an owl:

- Draw a circle
- Draw the rest of the owl

So, how to port to MMTk?

- Port to NoGC (ensure runtime compiler doesn't shit itself while linking with rust)
- Complete the rest of the port

#mmtk #gc #rust #programminglanguages

From 11:00 to 12:00 on Thursday, May 28, the PLSL reading group will discuss "Proofs as Processes" by Samson Abramsky, as well as the first two sections of "Propositions as sessions" by Philip Wadler.

https://plsl.acp.sdu.dk/posts/2025-05-28-proofs-as-processes-propositions-as-sessions/

#PLSL #curryHoward #propositionsAsTypes #concurrency #logic #lambdaCalculus #piCalculus #programmingLanguages #functionalProgramming

Proofs as Processes. Propositions as sessions

In this session, we explore how the propositions-as-types paradigm extends to concurrency

PLSL

A Grand Challenge for Reliable Coding in the Age of AI Agents
์ด ๋…ผ๋ฌธ์€ AI ์—์ด์ „ํŠธ๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์˜๋„๋ฅผ ์ •ํ™•ํžˆ ๋ฐ˜์˜ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃฌ๋‹ค. ๋น„๊ณต์‹์ ์ธ ์ž์—ฐ์–ด ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์ •ํ™•ํ•œ ํ”„๋กœ๊ทธ๋žจ ๋™์ž‘ ๊ฐ„์˜ '์˜๋„ ๊ฒฉ์ฐจ'๋ฅผ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด, ์˜๋„๋ฅผ ํ˜•์‹ํ™”ํ•˜์—ฌ ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ๋ช…์„ธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ๊ณผ์ œ๋กœ ์ œ์‹œ๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด AI๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ด๊ณ , ๋‹ค์–‘ํ•œ ์‹ ๋ขฐ์„ฑ ์š”๊ตฌ์— ๋งž์ถ˜ ๋ช…์„ธ ๊ฒ€์ฆ ๋ฐ ์ƒํ˜ธ์ž‘์šฉ ๋ฐฉ์‹์„ ์—ฐ๊ตฌํ•˜๋Š” ๋ฐฉํ–ฅ์„ ์ œ์•ˆํ•œ๋‹ค. ๋˜ํ•œ, ํ˜„์žฌ ์ดˆ๊ธฐ ์—ฐ๊ตฌ ์‚ฌ๋ก€๋“ค๊ณผ ํ•จ๊ป˜ ํ–ฅํ›„ ์—ฐ๊ตฌ ๊ณผ์ œ๋“ค์„ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌํ•˜์˜€๋‹ค.

https://arxiv.org/abs/2603.17150

#ai #softwareengineering #formalverification #programminglanguages #aicodegeneration

Intent Formalization: A Grand Challenge for Reliable Coding in the Age of AI Agents

Agentic AI systems can now generate code with remarkable fluency, but a fundamental question remains: \emph{does the generated code actually do what the user intended?} The gap between informal natural language requirements and precise program behavior -- the \emph{intent gap} -- has always plagued software engineering, but AI-generated code amplifies it to an unprecedented scale. This article argues that \textbf{intent formalization} -- the translation of informal user intent into a set of checkable formal specifications -- is the key challenge that will determine whether AI makes software more reliable or merely more abundant. Intent formalization offers a tradeoff spectrum suitable to the reliability needs of different contexts: from lightweight tests that disambiguate likely misinterpretations, through full functional specifications for formal verification, to domain-specific languages from which correct code is synthesized automatically. The central bottleneck is \emph{validating specifications}: since there is no oracle for specification correctness other than the user, we need semi-automated metrics that can assess specification quality with or without code, through lightweight user interaction and proxy artifacts such as tests. We survey early research that demonstrates the \emph{potential} of this approach: interactive test-driven formalization that improves program correctness, AI-generated postconditions that catch real-world bugs missed by prior methods, and end-to-end verified pipelines that produce provably correct code from informal specifications. We outline the open research challenges -- scaling beyond benchmarks, achieving compositionality over changes, metrics for validating specifications, handling rich logics, designing human-AI specification interactions -- that define a research agenda spanning AI, programming languages, formal methods, and human-computer interaction.

arXiv.org

Until about 2022, I loved to program in Raku, the language formerly know as Perl 6. (Sadly, since then, genAI has ruined that for me.)

Raku has neat feature called Junctions. A junction is a lazy expression of values of any type combined with Boolean-like operators `|`, `&` and `^`. When an operation is applied to a Junction, it is carried out for each junction element, and the result is the junction of the return values of the operations. You can optionally evaluate a Junction in a Boolean context using `so`.

So you can do things like

my \jj = 1&2;
say so jj; # True
say so (->\x {x-1})( jj ); # False

Back in 2020 I pointed out an issue with Junctions, [The strange case of the greedy junction](https://limited.systems/articles/greedy-junctions/). Junctions are *greedy*, they turn anything they are combined with also into a Junction. This is not always desirable. I proposed an additional operation ("collapse") to undo this behaviour.

In a second post [Reconstructing Raku's Junctions](https://limited.systems/articles/reconstructing-raku-junctions/) I provided a proof for both the observed behaviour and the need for a "collapse" operation, by formalising Junction semantics in terms of polymorphic algebraic data types. I just re-read it and I still think it is very cool.

The `collapse` method never made it into the language (https://github.com/rakudo/rakudo/pull/3944) but my implementation still works.

What I think is neat is that my formalisation lets you implement Junctions in any language.

#programming #programmingLanguages
#rakulang

The strange case of the greedy junction โ€ข Wim Vanderbauwhede

An illustration that Raku's junctions are greedy by design, and a proposal.