Remix.run Logo
C*: Unifying Programming and Verification in C(arxiv.org)
27 points by rramadass an hour ago | 18 comments
gdwatson 11 minutes ago | parent | next [-]

Names for C successor languages are pretty well exhausted by this point, so I sympathize, but I strongly associate the name C* with a decade-old rant about C compilers’ aggressive exploitation of undefined behavior: https://www.complang.tuwien.ac.at/kps2015/proceedings/KPS_20... . (In calling it a rant I don’t mean that it’s altogether unpersuasive. Its style is just a bit spicier than I am used to seeing typeset in Computer Modern.)

gavinray 38 minutes ago | parent | prev | next [-]

I really think that verification aware languages are going to become a necessity

Wrote a bit about this recently

https://gavinray97.github.io/blog/design-by-contract-and-eff...

jensgk 14 minutes ago | parent | prev | next [-]

There already is a C* : https://en.wikipedia.org/wiki/C*

dymk 6 minutes ago | parent | next [-]

That C* uses .cs, but nobody is complaining about C# using that extension

That C* was released in 1993

Who actually cares about the name collision?

applfanboysbgon 6 minutes ago | parent | prev [-]

Does it matter? Is the global namespace permanently depleted because of an obscure language that nobody has used in 30 years?

Taikonerd 41 minutes ago | parent | prev | next [-]

The authors cite this, but just to mention it: this sounds like F*, another proof-oriented language. (https://fstar-lang.org/)

F* is in the ML family of languages, so it looks pretty different from C*.

theokrueger 26 minutes ago | parent | prev | next [-]

formal verification is great and all, but you can never make it as ergonomic as functional verification. this matters for agents and real people alike.

formal verification requires a deeper understanding of underlying mechanisms to write correctly. yet nothing prevents you or your agent from changing invariants to fit the algorithm and making it incorrect.

bellowsgulch 6 minutes ago | parent | prev | next [-]

[delayed]

rramadass an hour ago | parent | prev | next [-]

The "C*" language website - https://cstarlang.org/en/intro.html

See in particular, usage benefits with LLMs (last para of https://cstarlang.org/en/intro.html) and how to use it with LLMs (https://cstarlang.org/en/tutorial/cstar-mcp.html).

Note that the paper/language are from 2025 and so pretty recent.

glitchc an hour ago | parent | prev [-]

Great idea, terrible syntax.

ux266478 16 minutes ago | parent | next [-]

Yeah I dislike it. Why are we babyducking sepples attributes? And what I assume to be namespace accessors? Why are logical assertions enclosed in backticks? I "get it", because it's actually kind of difficult to make a backwards compatible derivative of C that doesn't devolve into glyph soup, but this has a massive frankengrammar stink to it. The proof language is eyebrow raising to say the least.

ahknight 36 minutes ago | parent | prev | next [-]

I say this about C every day.

rramadass an hour ago | parent | prev [-]

What's terrible about the syntax? Using "[[require/ensure/invariant/proof/assert/etc.]]" is actually pretty neat.

And given that almost all C programmers are also C++ programmers, no mere syntax can faze us :-)

binaryturtle 38 minutes ago | parent [-]

In my own ranking of favourite programming languages C is at the first place. C++ comes in last. I personally hate it when people write C/C++ as if it's the very same thing. I'm quite sure there's more like me out there. :)

Interestingly Perl comes in second, even I use it rarely (aka not at all) these days. But that's a slightly off-topic side note. :)

ahknight 29 minutes ago | parent | next [-]

Perl is just C with less type safety.

And yes, for the most part. C++ as simple shorthand for struct-attached functions and automatic memory management (no, not smart pointers; RAAI) is good. Every single thing added after that is misery and should push a modern developer to Rust, Go, or Zig (roughly in that order) where such things are implemented sanely or not at all.

hnlmorg 4 minutes ago | parent | next [-]

The only thing Perl and C have in common is the curly-brace.

stvltvs 10 minutes ago | parent | prev [-]

Funny I think of Perl as Bash with slightly saner syntax plus robust regexp. (said with love)

rramadass 9 minutes ago | parent | prev [-]

For me, C++ is always in first place. It allows me to do high-level abstractions to low-level hijinks all with total control (i.e. zero-cost abstractions, Templates for compile time programming etc.) across all levels of the software stack and the full spectrum of available hardware.

Furthermore, any C++ programmer who says they do not know C, knows neither C nor C++ (hence my preference in using C/C++ as a shorthand to encompass both and highlight the dependency of the latter on the former). I often see this in novice C++ programmers who started with "Modern C++" and identify it as something like Java/C# because of the now huge set of standard libraries and copious syntactic sugar which only compounds their confusion further.