5 ms·
Fable Converted Pylint to Rust
- deleted 4mo ago[deleted]
- ma2kx 4mo ago> A Rust reimplementation of pylint that produces byte-for-byte identical output — 15–2300× faster (median ~85×). > prylint is not "inspired by" pylint. [...] Where pylint has bugs, prylint reproduces them. Where pylint crashes, prylint reports the same crash message. This looks very strange to me. There's no paper or explanation as to why the output should be identical to the real Pylint. Looking at GitHub, all the commits are by Claude, and otherwise, adamraudonis doesn't seem to have any connection to anyone else. I don't want to accuse anyone of anything unjustly, but this post seems more like a kind of malware SEO. Is this project legit?
- adastra22 4mo ago> There's no paper or explanation as to why the output should be identical to the real Pylint. Because that was the prompt they used. Seems par for the course with vibe coded projects.
- QuantumNomad_ 4mo ago> There's no paper or explanation as to why the output should be identical to the real Pylint. To be a drop-in replacement?
- kypro 4mo agoThat caught me off guard too – is that the intention, or the actual verifiable outcome? Potentially if there are failing tests of known bugs in pylint then Fable could have tried to reproduce those bugs in prylint, but that doesn't necessarily mean identical behaviour – at best only identical test-time behaviour. Seems the vibe coder likely wanted it to "produce byte-for-byte identical output", but realistically there's no way to actually guarantee that as the description suggests. It's one thing to burn tokens on a project like this and share it to see if there's any interest, but quite another to make exaggerated claims about its portability.
- csomar 4mo agoBecause verifying such claims will require roughly as much work as doing the thing manually; that or the community adopting his project, and testing the claims against their code bases (who doesn't want to run random LLM-generated code on their own codebase to verify the OP claims?) The OP claims align with billions (trillions?) of invested money at the moment. There is a very strong current that want to amplify this narrative.
- Leynos 4mo agoYou can see the validation approach they used here: https://github.com/adamraudonis/prylint/blob/main/harness/check_owned_f.sh https://github.com/adamraudonis/prylint/blob/main/harness/ch...
- Shorel 4mo agoI have done such migrations. An entire codebase of PL/SQL Oracle stored procedures, and I migrated it to MySQL stored procedures. Long before LLMs existed. You migrate the logic as-is because you want to replace the other code. You don't go rewriting or optimizing stuff just yet, not until the migration is complete. It helps a lot in isolating migration related issues from optimization related issues. You do one thing at at time, and fully test it before doing the next thing. It baffles me this is not super obvious to you!
- pbgcp2026 4mo ago... and Mythos just found 10k of zero-days. Dept of trading issued an order to restrict foreigners access to PyLint. /s
- Hamuko 4mo agoSo basically `ruff check --select=PL` but worse in every single way, maintained by a system that's not even available anymore? It even uses Ruff's code under the surface.
- short_sells_poo 4mo ago> It even uses Ruff's code under the surface. This is the modus operandi for a lot of vibe coded stuff. Absorb the code of entire projects wholesale and then repackage it as something new. Some of them have the decency to at least give credits to the original.
- NonHyloMorph 4mo agoSpeculative hyothesis: It might not be compatible with a capitalist social order, but also I get the impression that it' something that will staylike something that will stay. The involved means of production and their control are the critical point here. (Also - highly speculative - potentially the question if they should be >>owned<< at all even by some abstract commons)
- suuuuuuuu 4mo agoThat's how you know it's just for show. A practically equivalent (for Fable) but infinitely more valuable contribution would've been to implement any missing lints as a PR to ruff rather than reinventing (copying) the wheel.
- TheChaplain 4mo agoIMHO there is little point of these conversion projects. It screams of "look at me, see what I made" and when the attention goes down a little nothing was ever pushed to the repo ever again. Perhaps I am out of touch, but a project with author/s that have passion for every line, function and purpose, feels more real and worth my trust to spend time using it.
- xnickb 4mo agoI don't think you are. My first reaction was: "cool, now maintain it"
- deleted 4mo ago[deleted]
- baq 4mo ago"/loop maintain it" in a cron job
- conartist6 4mo ago/loop make people respect me for being competent and trustworthy
- baq 4mo agomissing the point
- bravetraveler 4mo agoI'd go even further: 'look at me, see what was paid for.' This isn't much different than the 'builder brained' coworker who is obsessed with creating technical debt, not owning it. Throwing shit at the wall and seeing what sticks, passing it off as sage wisdom. It'd be interesting to see the math behind offsetting the GPU crunching with more power efficient linting. Assuming every person or CI job switched (and the model stays offline), how many years are we looking at?
- monax 4mo ago*look inside* > ruff
- voidUpdate 4mo agoDo you generally pylint an entire codebase at once though? Why not just the file you are actually working on? Based on the homeassistant results (10.3 hours to lint 17.5k files), it only takes about 2 seconds to pylint a file, which doesn't really feel like enough of a wait to need an entirely new linter
- deviation 4mo agoThey may instead be targeting folks that run it in CI.
- psd1 4mo agoA delay of two seconds in my commit hook pushes my blood to the hydraulic pressure of a 70-ton digger.
- voidUpdate 4mo agoThen have it run asynchronously when you save
- lelanthran 4mo ago> A delay of two seconds in my commit hook pushes my blood to the hydraulic pressure of a 70-ton digger. Why though? Surely you have it set up to lint as you edit? I know my neovim installation does that and I see the results in the editor as I type. If it's a rule that linting needs to be in the commit hook, maybe the linter should write a hash of the files linted somewhere. The commit hook script then only lints those files that have changed since the last lint took place.
- psd1 4mo ago[dead]
- odiroot 4mo agoCommit hooks just don't make that much sense. Push hooks are much better idea. Once you're done with all your work, linting, last minute adjustments and whatnot, push it and get the checks result. If something goes wrong, your push is blocked.
- devnull3 4mo agoIts fascinating to see these code conversions. I reckon its easier for LLMs because the existing code acts like a precise spec and double up as prompts which the user does not have to provide.
- iamgopal 4mo agoI’m interested in python bytecode to rust code compiler, that will save a lot of time and energy.
- self_awareness 4mo agoIt would be like writing english words using cyrylic letters claiming you know Russian.
- torben-friis 4mo ago>Where pylint crashes, prylint reports the same crash message. As always, three lines in you realize that the doc you're reading hasn't been written (maybe not even read) by a human. So so tired of this breach of trust.
- ForHackernews 4mo agoWhy do this? Ruff already exists.
- vmt-man 4mo agoruff scratches the surface. pylint has more deep checks.
- tjpnz 4mo agoThey don't all support the same rules (there's literally thousands of them), so it's quite common to run multiple linters against a project.
- ForHackernews 4mo agoYou'd be surprised, Ruff covers nearly everything: https://docs.astral.sh/ruff/rules/#pylint-pl https://docs.astral.sh/ruff/rules/#pylint-pl I run Ruff + a type checker.
- tjpnz 4mo agoIt covers a lot but in our situation we had to throw Flake8 into the mix to be fully compliant with our style guide (the industry I work in is stricter than most here). There were Ruff rules which would've worked in 95% of cases, but there was no scope for configuration to get it all the way there. Last I checked you also couldn't add your own rules.
- optionalsquid 4mo agoBased on their tracking issue, Ruff is missing 156 out of 397 Pylint checks: https://github.com/astral-sh/ruff/issues/970 https://github.com/astral-sh/ruff/issues/970 Though some of them will presumably be covered by Ty
- dk_sig11 4mo agoIt is the easiest use-case for agents because deterministic tool for testing/verification exists and code of the source project is available. Give it enough tokens and test data and it will produce a clone tool pretty much autonomously in several iterations. It is still a niche use-case.
- amelius 4mo agoWould be great if it could convert the entire Python ecosystem to another language (or to GIL-free Python).
- Shorel 4mo agoAnd it would be great if that language is Dlang =)
- auslegung 4mo agoIn the few days I had access to Fable 5, I asked it to migrate our toolchain from nix+npm to docker+pnpm. It damn-near one-shotted it. I spent over a week stress testing it in every way and found very few things it missed. I was shocked. To preempt a question, our team has no knowledge or experience with nix, it was setup before the current team was in place by people who did have knowledge and experience of nix. The current team knows docker much better.
- Lucasoato 4mo agoOf course I'm not sure I'd trust to install or use in my main machine something that has been 100% written by an LLM, that doesn't have enough reviews and scrutiny, but the numbers look astounding: codebase pylint prylint speedup black 26.7 hr 41s 2328×
- smarx007 4mo agoQuite believable if the test was run on a machine with little RAM and generous/unbounded swap. Not sure these are the numbers we want to see. Anything can take days if it swaps to death.
- dgb23 4mo ago"Buy more RAM" usually isn't the thing I want to hear when my linter is slow.
- ndr 4mo agoTBH this is true only on the root of black. If you do `uvx pylint src/` it takes 5s on my machine. It's still impressive but it looks like a pathological case in a test directory.
- mezyt 4mo agohttps://github.com/psf/black/tree/main/profiling https://github.com/psf/black/tree/main/profiling
- ndr 4mo agoYes it's that, in particular `duplicate-code`. `pylint . --disable=R0801` will work, `pylint profiling/ --enable=duplicate-code` doesn't seem to exit in a reasonable time. So that's likely hitting some pathological case, possibly accidentallyquadratic.tumblr.com material.
- spwa4 4mo agoHow much did it cost?
- vezycash 4mo agoWhat if Fable made a jit layer for python. How would it affect ai?
- wiseowise 4mo agoX rewrote Y in Rust is the new “Blazing fast Y written in Rust”.
- voidUpdate 4mo agono, its "rewrote x in rust and now it's blazing fast". I still dont know fast "blazing" is. 10x? 100x? any increase at all?
- ishouldbework 4mo agoI wonder how it handles pylint's plugins.
- amelius 4mo agoSo, develop in an ergonomic language. Then use an LLM to convert to Rust. No human needs to read or write Rust anymore.
- wosined 4mo agoThe LLMs will save us from Rust. I like LLMs now.
- baranul 3mo agoThere are always going to be reasons for human review of code written by a LLM. Furthermore, for both safety and control, we will want human readable code from LLMs. These "needs" and "wants" can't be eliminated, at least while humans are in control.
- worldsavior 4mo agoThis project was created 6 months ago, and had been worked on for months with claude. I guess Fable existed 6 months ago and none of us knew about it...
- stratos123 4mo agoThe repo creation date is confusing but if you look at the actual commits, there's been 0 commits between repo creation on Dec 6 2025 and last week, after which it's all "Co-Authored-By: Claude Fable 5". So it's in fact all Fable, not Opus.
- mohsen1 4mo agoIt's fascinating to read the comments here. The attitude is very strange to me. Writing software is not a sport that if you "cheat" using tools then your results are worthless. Results are speaking for themselves. Unless you can provide a failing test case that the software presented here fails at then your arguments for "how" it was made is moot. Fully agentic coding is working well for projects like this since no matter how you write the code, the only way to truly know "it's working" is if it passes the test. With the right skills you can make well designed software with agentic coding too. It's not as easy as a simple "convert this to rust" prompt, at least today.
- DannyBee 4mo agoAgreed It reminds me very heavily of being on woodworking forums as ever more mass automation happened, and the infinite arguments around whether using power tools/CNC/etc was still "real woodworking". Lots of previously "hand-crafted" industries have dealt with mass automation. Software is not the first or the last. Hand-wringing by practitioners will change nothing, as it did not for any other industry. The vast majority of customers only care about the results, not the means. While there are some in the high end commission world who care about the art form, this is very rare and not sustainable for the majority. History says folks would be better off learning how folks survived and adapted in those industries, rather than trying to argue about how worthless or crappy the change is. Hobby wise, sure, whatever, but as a business what happens is very clear
- joeriddles 3mo agoDo you have any favorite books or resources on how folks in the past adapted to changes in their industries?
- spicyusername 4mo agoI think people will come around to accepting llm written code eventually, but it's hard having your entire career, and identity, upended overnight. Many people, myself included, have come to define themselves by their coding skills. They've taken great pride in not just solving the problem, but solving it in an elegant or nice looking way. Crisp comments, nice spacing, clever abstractions. In an age where an llm is better at scanning the code than you are, these things just do not matter anymore. Llms will be doing the debugging. Llms will be doing the writing. Llms will be doing the optimizing. And so all that matters is that llms can make sense of things. And they are much much better at making sense of things without the need for so many of the things that humans rely on as waypoints. The skill is no longer writing the code. It's solving the problems. Maybe it always was.
- wosined 4mo agoThis is an interesting use case of LLMs. I like it even though I am not very pro AI in general. Let humans write the program in a high level language and then compile it to a lower-level one using an LL compiler (large language compiler?).
- torginus 4mo agoConsidering how successful LLMs are at these kinds of projects. I think labs RL on converting successively bigger programs from language A to B, considering they have near-infinite training data, and infinite retries, I think given enough compute, LLMs can get very good at this. Which implies that eventually one can set 'A' to English and 'B' to x86 assembly. Which means LLMS will eventually emit executable code. Whether this will be a party trick or a meaningful shift in software, remains to be seen. Perhaps for some LLMS, there will need to be some intermediate translation, but this will disappear over time.
- wg0 4mo agoI think open source is dead. Basic issue is - if your product is open source or even open core, building a business around it would be impossible because someone else would point an AI agent at it and would have similar thing to offer. Hence, closed source is what's next probably. Unfortunately.
- thraxil 4mo agoInteresting to read the comments and see the reaction here. I didn't use Fable (just Opus and Gemini) but I recently ported the `djlint` Python library to Rust, also relying heavily on LLMs (but not trying to one-shot it). `djlint` is a library to lint and reformat HTML and Django template files (and some other formats but I haven't tackled them yet as I don't really have any need). It's currently unmaintained (for a couple years at least) but was part of our CI/CD and the reformat in particular is very slow on a large codebase with thousands of templates. For our code, it took about 4 minutes to run. I generated a Rust port in a similar way, aiming for byte-for-byte output compatability. The Rust version runs on the same code in a fraction of a second; fast enough to put in a pre-commit hook. Some of that was the raw Python->Rust conversion, but a lot was some optimization work that I did afterwards. The Python version was heavily regexp-based, basically running a big slow regexp for every rule that it implements, sometimes running the regexp in a loop starting with each tag it encounters as it goes through each file. For the Rust version, I switched it to properly tokenize the files and then match rules on the AST in a single (or relatively few in some cases) pass. Honestly, there's still a lot of low hanging fruit to make it faster but it's already such a big improvement that I'm pretty happy with it. I'm sure those optimizations could've been done in Python but if I'm the one maintaining the code now, I'd much rather deal with Rust than Python with or without LLM assistance.