Hacker News new | past | comments | ask | show | jobs | submit login

Cool! And somewhat scary, shifting the work of the human to verify and understand machine-generated code.

Also, obligatory nitpick: the example naive C implementation uses bitwise AND (&) when it means boolean AND (&&), the line that starts:

    return
        (n00 == n01) & (n00 == n02)
This is bad, since bitwise AND in C isn't short-circuiting. It's also bad since it's semantically weird, the things being AND:ed are obviously truth values (the results of lots of == operators), which are not necessarily the same as "raw" bits.



In C, == simply produces a numeric value (0 or 1). There's nothing "weird" about the subsequent operation of & on those values.

There's no effects to make short-circuiting a problem, either - on the contrary, it is likely that the programmer had branchless code in mind.


Blush.

You're right, at least in that == produces 0 or 1. I was sure it had been "ported" to produce _Bool when that was added (which then of course automatically converts to 0 or 1 as needed), but that seems not to be the case.

I still think the ANDs should be boolean (i.e. &&) though, but perhaps your hunch about branchlessness is right.

Thanks.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: