frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Show HN: I built a synth for my daughter

https://bitsnpieces.dev/posts/a-synth-for-my-daughter/
119•random_moonwalk•5d ago•21 comments

Giving C a Superpower

https://hwisnu.bearblog.dev/giving-c-a-superpower-custom-header-file-safe_ch/
106•mithcs•3h ago•61 comments

FreeMDU: Open-source Miele appliance diagnostic tools

https://github.com/medusalix/FreeMDU
24•Medusalix•40m ago•4 comments

GCC 16 considering changing default to C++20

https://inbox.sourceware.org/gcc/aQj1tKzhftT9GUF4@redhat.com/
35•pjmlp•1h ago•26 comments

Craft Chrome Devtools Protocol (CDP) commands with the new command editor

https://developer.chrome.com/blog/cdp-command-editor
63•keepamovin•1w ago•12 comments

C++ implementation of SIP, ICE, TURN and related protocols

https://github.com/resiprocate/resiprocate
20•mooreds•1w ago•0 comments

Quest for Permissively Licensed PDF Library in C#

https://duerrenberger.dev/blog/2025/11/04/quest-for-permissively-licensed-pdf-library-in-csharp/
29•ingve•1w ago•21 comments

Building a Simple Search Engine That Works

https://karboosx.net/post/4eZxhBon/building-a-simple-search-engine-that-actually-works
179•freediver•10h ago•52 comments

Heretic: Automatic censorship removal for language models

https://github.com/p-e-w/heretic
646•melded•23h ago•287 comments

A file format uncracked for 20 years

https://landaire.net/a-file-format-uncracked-for-20-years/
235•todsacerdoti•1w ago•38 comments

Listen to Database Changes Through the Postgres WAL

https://peterullrich.com/listen-to-database-changes-through-the-postgres-wal
136•pjullrich•6d ago•34 comments

Fastmcpp (Fastmcp for C++)

https://github.com/0xeb/fastmcpp
28•0xeb•3d ago•1 comments

Mysterious drones have been spotted at airports across Europe

https://www.bbc.co.uk/news/articles/crkl3d6pegpo
27•fumblebee•1h ago•13 comments

A 1961 Relay Computer Running in the Browser

https://minivac.greg.technology/
101•vaibhavsagar•11h ago•27 comments

Ned: ImGui Text Editor with GL Shaders

https://github.com/nealmick/ned
7•klaussilveira•2h ago•0 comments

PicoIDE – An open IDE/ATAPI drive emulator

https://picoide.com/
147•st_goliath•15h ago•31 comments

The fate of "small" open source

https://nolanlawson.com/2025/11/16/the-fate-of-small-open-source/
251•todsacerdoti•19h ago•187 comments

I finally understand Cloudflare Zero Trust tunnels

https://david.coffee/cloudflare-zero-trust-tunnels
249•eustoria•20h ago•81 comments

The Pragmatic Programmer: 20th Anniversary Edition (2023)

https://www.ahalbert.com/technology/2023/12/19/the_pragmatic_programmer.html
163•ahalbert2•17h ago•43 comments

FPGA Based IBM-PC-XT

https://bit-hack.net/2025/11/10/fpga-based-ibm-pc-xt/
197•andsoitis•22h ago•40 comments

Neuroscientists track the neural activity underlying an “aha”

https://www.quantamagazine.org/how-your-brain-creates-aha-moments-and-why-they-stick-20251105/
123•wjb3•16h ago•35 comments

US startup Substrate announces chipmaking tool that it says will rival ASML

https://www.msn.com/en-in/news/world/us-startup-substrate-announces-chipmaking-tool-that-it-says-...
8•redwood•1h ago•15 comments

Runit Linux: Complete Guide to Unix Init Scheme with Service Supervision

https://codelucky.com/runit-linux-init-service-supervision/
58•smartmic•5d ago•32 comments

Z3 API in Python: From Sudoku to N-Queens in Under 20 Lines (2015)

https://ericpony.github.io/z3py-tutorial/guide-examples.htm
135•amit-bansil•19h ago•12 comments

Open-source Zig book

https://www.zigbook.net
671•rudedogg•18h ago•330 comments

Fourier Transforms

https://www.continuummechanics.org/fourierxforms.html
158•o4c•1w ago•20 comments

Why Castrol Honda Superbike crashes on (most) modern systems

https://seri.tools/blog/castrol-honda-superbike/
106•shepmaster•17h ago•24 comments

Mixing Is the Heartbeat of Deep Lakes. At Crater Lake, It's Slowing Down

https://www.quantamagazine.org/mixing-is-the-heartbeat-of-deep-lakes-at-crater-lake-its-slowing-d...
40•pseudolus•11h ago•17 comments

A new chapter begins for EV batteries with the expiry of key LFP patents

https://www.shoosmiths.com/insights/articles/a-new-chapter-begins-for-ev-batteries-with-the-expir...
163•toomuchtodo•14h ago•142 comments

Supercookie: Browser Fingerprinting via Favicon (2021)

https://github.com/jonasstrehle/supercookie
329•vxvrs•18h ago•89 comments
Open in hackernews

Giving C a Superpower

https://hwisnu.bearblog.dev/giving-c-a-superpower-custom-header-file-safe_ch/
103•mithcs•3h ago

Comments

krapht•1h ago
C++: "look at what others must do to mimic a fraction of my power"

This is cute, but also I'm baffled as to why you would want to use macros to emulate c++. Nothing is stopping you from writing c-like c++ if that's what you like style wise.

Lerc•1h ago
Perhaps but a project using this stops you from writing any old C++ in your C. Writing C++ in a C style has no such protection.

It's choosing which features are allowed in.

Qwuke•1h ago
It's interesting to me to see how easily you can reach a much safer C without adding _everything_ from C++ as a toy project. I really enjoyed the read!

Though yes, you should probably just write C-like C++ at that point, and the result sum types used made me chuckle in that regard because they were added with C++17. This person REALLY wants modern CPP features..

loup-vaillant•1h ago
> I'm baffled as to why you would want to use macros to emulate c++.

I like the power of destructors (auto cleanup) and templates (generic containers). But I also want a language that I can parse. Like, at all.

C is pretty easy to parse. Quite a few annoying corner cases, some context sensitive stuff, but still pretty workable. C++ on the other hand? It’s mostly pick a frontend or the highway.

ikamm•24m ago
>Nothing is stopping you from writing c-like c++ if that's what you like style wise.

You'll just have to get used to the C++ community screaming at you that it's the wrong way to write C++ and that you should just use Go or Zig instead

miroljub•1h ago
Nice toy. It works until it stops working. An experienced C developer would quickly find a bunch of corner cases where this just doesn't work.

Given how simple examples in this blog post are, I ask myself, why don't we already have something like that as a part of the standard instead of a bunch of one-off personal, bug-ridden implementations?

Borg3•1h ago
Yeah, kids like to waste time to make C more safe or bring C++ features. If you need them, use C++ or different language. Those examples make code look ugly and you are right, the corner cases.

If you need to cleanup stuff on early return paths, use goto.. Its nothing wrong with it, jump to end when you do all the cleanup and return. Temporary buffers? if they arent big, dont be afraid to use static char buf[64]; No need to waste time for malloc() and free. They are big? preallocate early and reallocate or work on chunk sizes. Simple and effective.

lukan•1h ago
Can you share such a corner case?
kstrauser•1h ago
God forbid we should make it easier to maintain the existing enormous C code base we’re saddled with, or give devs new optional ways to avoid specific footguns.
mightyham•1h ago
Goofy platform specific cleanup and smart pointer macros published in a brand new library would almost certainly not fly in almost any "existing enormous C code base". Also the industry has had a "new optional ways to avoid specific footguns" for decades, it's called using a memory safe language with a C ffi.
kstrauser•54m ago
I meant the collective bulk of legacy C code running the world that we can’t just rewrite in Rust in a finite and reasonable amount of time (however much I’d be all on board with that if we could).

There are a million internal C apps that have to be tended and maintained, and I’m glad to see people giving those devs options. Yeah, I wish we (collectively) could just switch to something else. Until then, yay for easier upgrade alternatives!

mightyham•29m ago
I was also, in fact, referring to the bulk of legacy code bases that can't just be fully rewritten. Almost all good engineering is done incrementally, including the adoption of something like safe_c.h (I can hardly fathom the insanity of trying to migrate a million LOC+ of C to that library in a single go). I'm arguing that engineering effort would be better spent refactoring and rewriting the application in a fully safe language one small piece at a time.
kstrauser•22m ago
I’m not sure I agree with that, especially if there were easy wins that could make the world less fragile with a much smaller intermediate effort, eg with something like FilC.

I wholeheartedly agree that a future of not-C is a much better long term goal than one of improved-C.

1718627440•24m ago
> static char buf[64];

In a function? That makes the function not-threadsafe and the function itself stateful. There are places, where you want this, but I would refrain from doing that in the general case.

1718627440•6m ago
> use goto

My thoughts as well. The only thing I would be willing to use is the macro definition for __attribute__, but that is trivial. I use C, because I want manual memory handling, if I wouldn't want that I would use another language. And now I don't make copies when I want to have read access to some things, that is simply not at a problem. You simply pass non-owning pointers around.

brabel•1h ago
It would be a lot more constructive if you reported a bunch of corner cases where this doesn't work rather than just dismissing this as a toy.
miroljub•35m ago
No, I don't dismiss anything.

It's just, I'd rather play with my own toys instead of using someone else's toy. Especially since I don't think it would ever grow up to be something more than a toy.

For serious work, I'd use some widely used, well-maintained, and battle-tested library instead of my or someone else's toy.

rurban•1h ago
Just don't mix that up with the real safec.h header from safeclib:

https://github.com/rurban/safeclib/tree/master/include

debugnik•1h ago
How can anyone be this interested in maintaining an annex k implementation when it's widely regarded as a design failure, specially the global constraint handler. There's a reason why most C toolchains don't support it.

https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm

quotemstr•54m ago
FWIW, it's heavily used inside Microsoft and is actually pretty nice when combined with all the static analysis tools that are mandatory parts of the dev cycle.
rurban•14m ago
It's only regarded as design failure by the linux folks. Maybe because it came from Microsoft, NIH syndrome.

A global constraint handler is still by far better than dynamic env handlers, and most of the existing libc/POSIX design failures.

You can disable this global constraint handler btw.

keyle•1h ago
I don't understand this passion for turning C into what it's not...

Just don't use C for sending astronauts in space. Simple.

C wasn't designed to be safe, it was designed so you don't have to write in assembly.

Just a quick look through this and it just shows one thing: someone else's walled garden of hell.

pkhuong•1h ago
> Just don't use C for sending astronauts in space

But do use C to control nuclear reactors https://list.cea.fr/en/page/frama-c/

It's a lot easier to catch errors of omission in C than it is to catch unintended implicit behavior in C++.

debugnik•1h ago
I consider code written in Frama-C as a verifiable C dialect, like SPARK is to Ada, rather than C proper. I find it funny how standard C is an undefined-behaviour minefield with few redeeming qualities, but it gets some of the best formal verification tools around.
ReptileMan•1h ago
Actually C performs quite good in exactly that area.

https://ntrs.nasa.gov/citations/19950022400

fransje26•1h ago
And

https://hackaday.com/2024/02/10/the-usage-of-embedded-linux-...

pjmlp•1h ago
Some C devs will make all kinds of crazy efforts only not to use C++.
fransje26•1h ago
> Just don't use C for sending astronauts in space. Simple.

Last time I checked, even SpaceX uses C to send astronauts to space...

HexDecOctBin•1h ago
Any hopes that MSVC will add C23 support before 2040?
nmeofthestate•1h ago
Bit of a random question on an article about C.
HexDecOctBin•58m ago
The article clearly states that the code only works on GCC and Clang, which leaves MSVC. Not sure how the question was random.
le-mark•1h ago
Will windows be relevant by 2040? I personally don’t think so.
pjmlp•1h ago
Depends on how much Valve manages to get rid of Proton.
pjmlp•1h ago
Given how C was seen in the past, before there was a change of heart to add C11/C17, minus atomics and aligned memory allocators (still between experimental or not going to happen),

https://herbsutter.com/2012/05/03/reader-qa-what-about-vc-an...

https://devblogs.microsoft.com/cppblog/c11-atomics-in-visual...

https://learn.microsoft.com/en-us/cpp/c-runtime-library/comp...

And the new guidelines regarding the use of unsafe languages at Microsoft, I wouldn't bet waiting that it will ever happen, even after 2040.

https://azure.microsoft.com/en-us/blog/microsoft-azure-secur...

https://blogs.windows.com/windowsexperience/2024/11/19/windo...

HexDecOctBin•56m ago
Well, with the death of Xbox and release of raddebugger, maybe supporting VS/MSVC just isn't that important anymore. Good riddance.
pjmlp•50m ago
People keep forgetting Microsoft is one of the biggest publishers in the market, given the number of owned studios.

The box under the TV is a tiny part of the picture that makes Microsoft Games Studios and related subsidiaries.

https://en.wikipedia.org/wiki/List_of_Microsoft_Gaming_studi...

If Microsoft really gets pissed due to SteamOS and Proton, there are quite a few titles Valve will be missing on.

cachius•34m ago
https://github.com/EpicGamesExt/raddebugger

At first I read Radeberger, a German beer brand.

cachius•1h ago
A recent superpower was added by Fil aka the pizlonator who made C more Fil-C with FUGC, a garbage collector with minimal adjustments to existing code, turning it into a memory safe implementation of the C and C++ programming languages you already know and love.

https://news.ycombinator.com/item?id=45133938

https://fil-c.org/

762236•51m ago
Why would I want to run a garbage collector and deal with it's performance penalties?
palata•40m ago
Easy: because in your specific use-case, it's worth trading some performance for the added safety.
762236•9m ago
If I'm in C, I'm using JNI to work around the garbage collector of Kava
jerf•21m ago
Because about 99% of the time the garbage collect is a negligible portion of your runtime at the benefit of a huge dollop of safety.

People really need to stop acting like a garbage collector is some sort of cosmic horror that automatically takes you back to 1980s performance or something. The cases where they are unsuitable are a minority, and a rather small one at that. If you happen to live in that minority, great, but it'd be helpful if those of you in that minority would speak as if you are in the small minority and not propagate the crazy idea that garbage collection comes with massive "performance penalties" unconditionally. They come with conditions, and rather tight conditions nowadays.

hypeatei•11m ago
I think these threads attract people that write code for performance-critical use cases which explains the "cosmic horror" over pretty benign things. I agree though: most programs aren't going to be brought to their knees over some GC sweeps every so often.
762236•7m ago
For new projects, I just use Rust: there is zero reason to deal with a garbage collector today. If I'm in C, it's because I care about predictable performance, and why I'm not using Java for that particular project.
Phil_Latio•3m ago
> Because about 99% of the time the garbage collect is a negligible portion of your runtime

In a system programming language?

fuhsnn•1h ago
> C23 gave us [[cleanup]] attributes

C23 didn't introduce it, it's still a GCC extension that needs to be spelled as [[gnu::cleanup()]] https://godbolt.org/z/Gsz9hs7TE

cassepipe•20m ago
It is surprisingly hard to find information about it, do you have any ? From what I can guess it's a new syntax but it's the feature itself is still an extension ?
hanstospace•1h ago
I checked Fil-C out and it looks great. How is this different from Fil-C? Apart from the obvious LLVM stuff
woodruffw•47m ago
Fil-C essentially lifts C onto a managed, garbage-collected runtime. This is a small header that adds some C++ features to C.

(These features are still essentially unsafe: the unique pointer implementation still permits UAF, for example, because nothing prevents another thread from holding the pointer and failing to observe that it has been freed.)

khaledh•55m ago
The problem with macro-laden C is that your code becomes foreign and opaque to others. You're building a new mini-language layer on top of the base language that only your codebase uses. This has been my experience with many large C projects: I see tons of macros used all over the place and I have no idea what they do unless I hunt down and understand each one of them.
woodruffw•51m ago
Intentionally or not, this post demonstrates one of the things that makes safer abstractions in C less desirable: the shared pointer implementation uses a POSIX mutex, which means it’s (1) not cross platform, and (2) pays the mutex overhead even in provably single-threaded contexts. In other words, it’s not a zero-cost abstraction.

C++’s shared pointer has the same problem; Rust avoids it by having two types (Rc and Arc) that the developer can select from (and which the compiler will prevent you from using unsafely).

kouteiheika•38m ago
> the shared pointer implementation uses a POSIX mutex [...] C++’s shared pointer has the same problem

It doesn't. C++'s shared pointers use atomics, just like Rust's Arc does. There's no good reason (unless you have some very exotic requirements, into which I won't get into here) to implement shared pointers with mutexes. The implementation in the blog post here is just suboptimal.

(But it's true that C++ doesn't have Rust's equivalent of Rc, which means that if you just need a reference counted pointer then using std::shared_ptr is not a zero cost abstraction.)

woodruffw•35m ago
To be clear, the “same problem” is that it’s not a zero-cost abstraction, not that it uses the same specific suboptimal approach as this blog post.
kouteiheika•30m ago
I think that's an orthogonal issue. It's not that C++'s shared pointer is not a zero cost abstraction (it's as much a zero cost abstraction as in Rust), but that it only provides one type of a shared pointer.

But I suppose we're wasting time on useless nitpicking. So, fair enough.

woodruffw•22m ago
I think they’re one and the same: C++ doesn’t have program-level thread safety by construction, so primitives like shared pointers need to be defensive by default instead of letting the user pick the right properties for their use case.

Edit: in other words C++ could provide an equivalent of Rc, but we’d see no end of people complaining when they shoot themselves in the foot with it.

(This is what “zero cost abstraction” means: it doesn’t mean no cost, just that the abstraction’s cost is no greater than the semantically equivalent version written by the user. So both Arc and shared_ptr are zero-cost in a MT setting, but only Rust has a zero-cost abstraction in a single-threaded setting.)

kouteiheika•5m ago
I can't say I agree with this? If C++ had an Rc equivalent (or if you'd write one yourself) it would be just as zero cost as it is in Rust, both in a single-threaded setting and in a multithreaded-setting. "Zero cost abstraction" doesn't mean that it cannot be misused or that it doesn't have any cognitive overhead to use correctly, just that it matches whatever you'd write without the abstraction in place. Plenty of "zero cost" features in C++ still need to you pay attention to not accidentally blow you leg off.

Simply put, just as a `unique_ptr` (`Box`) is an entirely different abstraction than `shared_ptr` (`Arc`), an `Rc` is also an entirely different abstraction than `Arc`, and C++ simply happens to completely lack `Rc`. But if it had one you could use it with exactly the same cost as in Rust, you'd just have to manually make sure to not use it across threads (which indeed is easier said than done, which is why it's not in the standard), exactly the same as if you'd manually maintain the reference count without the nice(er) abstraction. Hence "zero cost abstraction".

cogman10•34m ago
> very exotic requirements

I'd be interested to know what you are thinking.

The primary exotic thing I can imagine is an architecture lacking the ability to do atomic operations. But even in that case, C11 has atomic operations [1] built in. So worst case, the C library for the target architecture would likely boil down to mutex operations.

[1] https://en.cppreference.com/w/c/atomic.html

spacedcowboy•35m ago
The number of times I might want to write something in C and have it less likely to crash absolutely dwarfs the number of times I care about that code being cross-platform.

Sure, cross-platform is desirable, if there's no cost involved, and mandatory if you actually need it, but it's a "nice to have" most of the time, not a "needs this".

As for mutex overheads, yep, that's annoying, but really, how annoying ? Modern CPUs are fast. Very very fast. Personally I'm far more likely to use an os_unfair_lock_t than a pthread_mutex_t (see the previous point) which minimizes the locking to a memory barrier, but even if locking were slow, I think I'd prefer safe.

Rust is, I'm sure, great. It's not something I'm personally interested in getting involved with, but it's not necessary for C (or even this extra header) to do everything that Rust can do, for it to be an improvement on what is available.

There's simply too much out there written in C to say "just use Rust, or Swift, or ..." - too many libraries, too many resources, too many tutorials, etc. You pays your money and takes your choice.

woodruffw•18m ago
That’s all reasonable, but here’s one of the primary motivations from the post:

> We love its raw speed, its direct connection to the metal

If this is a strong motivating factor (versus, say, refactoring risk), then C’s lack of safe zero-cost abstractions is a valid concern.

saurik•13m ago
I'd think a POSIX mutex--a standard API that I not only could implement anywhere, but which has already been implemented all over the place--is way more "cross platform" than use of atomics.
immibis•10m ago
This feels AI-generated.