evilstevie boosted

Defer available in gcc and clang

About a year ago I posted about defer and that it would be available for everyone using gcc and/or clang soon. So it is probably time for an update.

Two things have happened in the mean time:

A technical specification (TS 25755) edited by JeanHeyd Meneide is now complete and moves through ISO’s complicated publication procedures.
Both gcc and clang communities have worked on integrating this feature into their C implementations.

I have not yet got my hands on the gcc implementation (but this is also less urgent, see below), but I have been able to use clang’s which is available starting with clang-22.

I think that with this in mind everybody developing in C could and should now seriously consider switching to defer for their cleanup handling:

no more resource leakage or blocked mutexes on rarely used code paths,
no more spaghetti code just to cover all possibilities for preliminary exits from functions.

I am not sure if the compiler people are also planning back ports of these features, but with some simple work around and slightly reduced grammar for the defer feature this works for me from gcc-9 onward and for clang-22 onward:

#if __has_include(<stddefer.h>) # include <stddefer.h> # if defined(__clang__) # if __is_identifier(_Defer) # error "clang may need the option -fdefer-ts for the _Defer feature" # endif # endif #elif __GNUC__ > 8 # define defer _Defer # define _Defer _Defer_A(__COUNTER__) # define _Defer_A(N) _Defer_B(N) # define _Defer_B(N) _Defer_C(_Defer_func_ ## N, _Defer_var_ ## N) # define _Defer_C(F, V) \ auto void F(int*); \ __attribute__((__cleanup__(F), __deprecated__, __unused__)) \ int V; \ __attribute__((__always_inline__, __deprecated__, __unused__)) \ inline auto void F(__attribute__((__unused__)) int*V) #else # error "The _Defer feature seems not available" #endif

So this is already a large panel of compilers. Obviously it depends on your admissible compile platforms whether or not these are sufficient for you. In any case, with these you may compile for a very wide set of installs since defer does not need any specific software infrastructure or library once the code is compiled.

As already discussed many times, the gcc fallback uses the so-called “nested function” feature which is always subject of intense debate and even flame wars. Don’t worry, the implementation as presented here, even when compiled with no optimization at all, does not produce any hidden function in the executable, and in particular there is no “trampoline” or whatever that would put your execution at risk of a stack exploit.

You may also notice that there is no fallback for older clang version. This is because their so-called “blocks” extension cannot easily be used as a drop-in to replace nested function: their semantics to access variables from the surrounding scope are different and not compatible with the defer feature as defined by TS 25755.

So for example if you are scared of using big VLA on the stack, you may use the above code in headers and something like

double* BigArray = malloc(sizeof(double[aLot])); if (!BigArray { exit(EXIT_FALURE); } defer { free(BigArray); }

to have an implementation of a big array with a failure mode for the allocation.

Or if you want to be sure that all your mutexes are unlocked when you leave a critical section, use and idiom as here

{ if (mtx_lock(&mtx) != thrd_success) { exit(EXIT_FAILURE); } defer { mtx_unlock(&mtx); } ... do something complicated ... if (rareCondition) { return 42; } ... do something even more complicated ... }

Just notice, that you’d always have to use the defer feature with curly braces to ensure that the gcc fallback works smoothly.

evilstevie boosted
evilstevie boosted

Once you realize it’s not “age verification”, but actually “identity verification”, then it’s easy to understand that the real goal is “papers, please” for the entire internet.

evilstevie boosted

And now for my favorite dark programming j/k

What is the difference between a light bulb and a programmer?

The light bulb stops working when it burns out.

🥁

evilstevie boosted

455) Pibot. Knows all the decimal places of the mathematical constant pi. Will continue reeling them off until the heat death of the universe if you let it. #SmallRobotsRemastered

evilstevie boosted

[ closing out requests for contact from graphic designers ]

UPDATE: I got so many great responses! Thank you all! It will take me a little time to get back to everyone, but I promise I will do so.

evilstevie boosted
evilstevie boosted

454) Invisibot. The culmination of our research into transparent components. We haven't had chance to figure out a use for it yet because we keep losing it. #SmallRobotsRemastered

evilstevie boosted

another regular reminder: if your organization sends out phishing email tests on the regular - document the sending domain. dump it into virustotal. click on the details tab. Look at the SSL certificate details. More than half the time, they use a wildcard SSL cert. Congratulations, you just mapped out most of their phishing infrastructure because they re-use the same wildcard SSL cert fuckin' everywhere.

evilstevie boosted

Search on the web is now just utterly broken. You can barely find anything using any of the search engines. We need a new player to come in and shake the whole industry up.

evilstevie boosted

I'm so tired. People, I am not interested in reading *blogs* generated with claude, gemini or chatgpt. No, not even ones proofread by AI. Do it yourself. I do not wish to even accidentally click on "one-shotted" dummy projects. Don't show me your AI-generated analysis of anything. Above all, I do not wish to see images/artwork someone prompt created.

I value real content, with all its good and bad quirks, from actual human beings.

Somebody please normalize auto-tagging of AI generated content across all formats - text, images and code so I can blanket ban them from my personal computer.

This is a plead for help I never thought I'll have to make.

#noai #enshittification #writing #bookstodon #reading #books #quotes #quote #cybersec #mentalhealth #adhd #art #cooking #blog #indieweb

evilstevie boosted
evilstevie boosted

How have I lived to the Year of our Lord 2026 without having seen this meme before now?

#StarWars #memes #ReneMagritte

evilstevie boosted

"Al is here to stay"

well ok, but me complaining about Al is also here to stay

evilstevie boosted

Guy with neurolink cut me off in traffic, pulled out my flipper zero and gave him gender dysphoria

evilstevie boosted

453) Balletbot. If you aren't able to access ballet lessons for your child, this graceful little robot can give them a solid grounding. #SmallRobotsRemastered

evilstevie boosted

More "Laundry Animal Art" by Helga Stentzel, who I've posted before under the #WomensArt hashtag

But I especially love the dinosaur ... ! 🦕

evilstevie boosted

448) Bouncycastlebot. If you're having a party outdoors, maybe you'll be lucky enough to see this robot hovering through the air, looking for a place to set down for a few hours before it goes off on its merry way again... #SmallRobotsRemastered

evilstevie boosted

I am driving doesn't mean I am the designated driver because I am not drinking. I will leave when I want not when you have had your fill of drink. Show a bit of respect or make your own transport arrangements.

evilstevie boosted

Had the pleasure of working on this commission of Hattie and Hugo. Hattie sadly passed away last week and I was asked to produce a commemerative print with her brother by her side

Show older
mastod1.ddns.net

Mastod1 be nice. (sorry, closed for new registrations after a bunch of 'commercial/spamming' accounts jumped in - rule 3 on site)