Coccinelle: The Linux kernel's source-to-source transformation tool
37 points
6 hours ago
| 7 comments
| github.com
| HN
VorpalWay
21 minutes ago
[-]
Not the same level of sophistication, but ast-grep allows this for far more languages, since it is based on the tree-sitter parser library. I have used it with some success on C++. Of course it only works on the AST level, and C++ famously need types for correct parsing, so it sometimes fall short (also on macros).

https://ast-grep.github.io/

reply
pm215
38 minutes ago
[-]
I think Coccinelle is a really cool tool, but I find its documentation totally incomprehensible for some reason. I've read through it multiple times, but I always end up having to find some preexisting script that does what I want, or else to blunder around trying different variations at random until something works, which is frustrating.
reply
zabzonk
21 minutes ago
[-]
I thought this was a misspelled article about Kokinelli, the Greek red wine, fairly accurately described here: https://www.arrse.co.uk/wiki/Kokinelli

I used to drink this stuff back in the late 1960s, when my Dad was an RAF pilot based in Cyprus and I was about 15. You had to take it with a Sprite mixer if you wanted to retain your teeth.

It would be a good name for a project, though.

reply
eqvinox
3 hours ago
[-]
It's a bit of a disservice to call it "The Linux kernel's"; it's its own project that just happens to be used on the Linux kernel quite a bit. It doesn't originate there or belong to the kernel or anything like that.
reply
twic
2 hours ago
[-]
According to https://coccinelle.gitlabpages.inria.fr/website/ce.html :

> Nevertheless, detecting the holding of locks requires a careful and occasionally interprocedural analysis of the source code, and the other conditions, such as "in a completion handler", are not formally defined and require study of multiple files.

> Due to the complexity of the conditions governing the choice of new argument for usb_submit_urb, 71 of the 158 calls to this function were initially transformed incorrectly to use GFP_KERNEL instead of GFP_ATOMIC.

Okay, but how does Coccinelle help? Is it able to do this careful and not formally defined analysis? Or does it automate the undifferentiated heavy lifting and so make it easier for humans to do it?

reply
conartist6
4 hours ago
[-]
I forgot about Coccinelle.

I think semantic patching is an idea whose time has come though. I'm making a more modern set of tools for source-to-source transformation that will work with any desired languages as the input and output.

reply
fweimer
3 hours ago
[-]
Those tools exist, but you have to pay by the token. I'm not sure if they scale financially to large code bases such as the Linux kernel. They are far more accessible than Coccinelle or Perl, though.
reply
eqvinox
3 hours ago
[-]
Honestly, I rather use Coccinelle, where I understand exactly what it does, when it does it and why it does it…
reply
conartist6
2 hours ago
[-]
I would also rather use a tool that I trust than delegate the task to unreliable third party.

But to the person bringing up AI, you don't have to choose one or the other! Models use tools. Good tools for people are usually also good tools for models. The problem models have in learning to use tools like Coccinelle effectively is that there are too many of the tools and not enough documentation for each tool. If there were a unified, standard platform however then many humans would start to gain abilities through fluent tool use and of enough of those people would write docs and blog posts. Where people lead, models follow without doubt. Once a large enough corpus of writing existed documenting a single platform the models would also be fluent, just like they are fluent in JS and React because of how large the web platform is

reply
twic
2 hours ago
[-]
See also OpenRewrite:

https://github.com/openrewrite/rewrite

And i assume any large organisation running a monorepo has some vaguely equivalent tooling for making mass changes. Have any of them published about that?

reply
conartist6
1 hour ago
[-]
This is a business that I suspect may not survive BABLR.

> Moderne's build plugins allow for LSTs to be serialized to disk. This makes the process of consuming and editing large quantities of them much more efficient. OpenRewrite's build plugins, on the other hand, store everything in memory and need to be reparsed every time there is a change.

So yeah I'm giving away open standards to everyone for free that do the thing they expect people to pay them for...

reply
rzzzt
1 hour ago
[-]
What's BABLR?
reply