2. Terrible installation UX.
The number of issues we've had with pre-commit because it's written in Python and Python tooling breaks constantly...
In fairness, the latter point may be finally solved by using `uv` and `uv tool install`. Performance is still a major issue though. Yamllint is easily the slowest linter we use.
(I'm tempted to try rewriting it in Rust with AI.)
Performance only matters if you're doing something compute- or disk-intensive, and then only if the libraries you're using are Python all the way down. (AI programming, at least the kind that most of us do--I don't know about places like OpenAI) is generally done with Python using libraries that use some compiled language under the hood.
And in this case--a linter--performance is almost certainly never an issue.
Performance only matters if you care about performance, and I do care about performance. If you don't, fine I guess.
Also format-on-save is a common workflow.
My comment has absolutely nothing to do with this project or its author, nor the language he has chosen. See the other comments in this thread.
I do not care whether or not this project is written in Python. Sure, he chose Python because he is more familiar with it. That is fair enough to me.
For example: I thought this or that music or movie sucked. I do not need to know how to make a song or a movie to be able to criticize it, let alone have one in a similar vain, same with books. I can criticize a book, or an article, without having written one myself on related topics.
All that said, where did I criticize? I did not criticize anything, at all.
I stated facts. Perl is indeed faster than Python, and Perl was indeed made with string manipulation in mind. I made no comment about this project or its author, thus, it was not a criticism of any sort.
FWIW it really was just about his comment, and I made two statements: Perl is faster than Python, and that Perl is especially good for string manipulation. I do not mind that he chose Python, good for him.
None of it has anything to do with the author choosing Python. How many times do I need to repeat myself?
You are the one who are being extremely defensive about it and making it seem like I give a damn about whether or not this project is written in Python. I told you I do not care. I was responding to your comment. No matter how much you insist on my reply (to you) being a criticism of the author or his project, it will not make it so.
I am done talking to you, you are seeing ghosts.
This is incoherent no matter what two programming languages you are talking about. It's like trying to say the road is fast, as opposed to the car.
But in practice, for anything where performance matters, Perl and Python are effectively just convenient ways to wrap a C inner loop anyway. I don't just mean gluing to some third-party library, either. I mean something inside the interpreter. Once you've built the state machine for the regex, the language bytecode doesn't matter any more.
Which is why it's dozens of times slower in both Python and Perl to run a do-nothing for loop than to iterate through a string with a dummy regex, or to use built-ins to search for a character, etc. (Or to create the string in the first place.)
> it is great for string manipulation, which again, is not a matter of opinion
This is incoherent no matter what programming language you are talking about. Of course it's a matter of opinion. Other people aren't going to like the same syntax you do.
Yet everyone talks about performance when it comes to programming languages. Why? And what does coherence have anything to do with it?
Plus I explained what I meant by that, there is a huge difference in the startup time of Perl and Python, for one, and you can check benchmarks. The implementation of the two languages are not identical. If they are not identical, there must be a difference in performance one way or another, I assume.
> This is incoherent no matter what programming language you are talking about. Of course it's a matter of opinion. Other people aren't going to like the same syntax you do.
I do not think anyone is going to argue that Brainfuck was made with easy string manipulation in mind, or Forth.
The point is that Perl helps you manipulate strings with relative ease. Assuming you know the language, yeah.
In fact, please read other comments, because I have already said this: "For the 100th time, I was responding to "[...] python and it is easy to do string manipulation with.".". It is easy to do so in Python, but even easier (and faster) to do on Perl. In both cases there is an assumption of knowing the language, and I thought that goes without saying.
I said nothing about liking the syntax or whatever you are trying to read into it. It is easy to do string manipulation, regardless of your like or dislike of the syntax. Thus, not an opinion.
Have fun reading https://news.ycombinator.com/item?id=44359539.
I'm still not sure why this got you so involved.
As I have said a couple of times, it is fair enough that he is comfortable with Python or that he decided to use it for whatever reasons.
At any rate, I cannot come back to this thread anymore. :P
I know this may come as a shock to the average HN reader, but most people do not think very clearly. Even programmers. And among those who do, it is quite rare that people speak precisely without putting in considerable effort.
> but even easier (and faster) to do on Perl.
You have no objective way to substantiate this claim (because such cannot exist), therefore it is in fact a matter of opinion.
Trivial example:
Replace all numbers in a string (faster and easier in Perl):
Perl:
$string =~ s/\d+/NUM/g;
Python: import re
string = re.sub(r'\d+', 'NUM', string)
Perl's design history is text processing as a first-class goal. It has syntax-level efficiency, and expressive power (e.g. s///e, tr///, inline regex flags, etc.). Do you want me to go on? These are all objective ways to substantiate the claims I made.Perl is implemented in C with a runtime that aggressively optimizes text processing. The core primitives such as split, join, substr, index, s///, etc. are tight wrappers around C functions with minimal object overhead. In Python, even simple string manipulations go through Python's object system, and in Python strings are immutable, so every manipulation creates a new string object, which incurs extra memory allocation and garbage collection.
Perl is typically 30-80% faster in similar regex-heavy workloads because there is no import overhead, there is internal opcode dispatch for regex, and no allocation of new strings until match is confirmed.
Additionally, Perl frequently wins by eliminating boilerplate, as shown above. It has advanced features with simple syntax, too, meaning you get fewer lines of code, fewer concepts to juggle, and faster iteration time. Python, by contrast, forces the developer to switch between the re module for non-trivial regex, multiple string method calls, and so forth.
Shall I go on? I can objectively substantiate my claims with regarding to Perl vs. Python, as I have done above, but if it is not enough for you, I could easily go on. I can give you benchmarks, too, if you so wish. FWIW, my claim was: you can achieve string manipulation / text processing faster (both execution speed and development time) and easier in Perl vs. Python.
---
The bottom line is, that for text-heavy workloads, Perl remains the more efficient and developer-friendly tool as opposed to Python; a conclusion that can be quantified, measured and defended objectively. It is not an opinion, nor a matter of taste.
Just to reiterate, across a wide range of text processing tasks, Perl consistently offers:
- Fewer lines of code
- More powerful and concise idioms
- Better CLI support
- Faster execution for regex-heavy operations
- Less boilerplate and setup overhead
This list is non-exhaustive, and I can get more into the implementation details (I did touch it above), too, if you so wish, such as, for example, how Perl's interpreter is string-first and how Perl uses SVs that are internally optimized to handle both numbers and strings interchangeably without conversion overhead, as opposed to Python that uses PyObject-based immutable strings which incur copy-on-write penalties and method dispatch overhead.
[johnisgood@arch regex]$ hyperfine 'perl regex_test.pl' 'python3 regex_test.py'
Benchmark 1: perl regex_test.pl
Time (mean ± σ): 1.807 s ± 0.028 s [User: 1.752 s, System: 0.054 s]
Range (min … max): 1.780 s … 1.857 s 10 runs
Benchmark 2: python3 regex_test.py
Time (mean ± σ): 3.316 s ± 0.230 s [User: 3.246 s, System: 0.069 s]
Range (min … max): 3.052 s … 3.858 s 10 runs
Summary
perl regex_test.pl ran
1.84 ± 0.13 times faster than python3 regex_test.py
This is for a very simple script!You know why?
Because Perl was practically designed for text processing and regex.
It has:
- A regex engine that's deeply integrated and highly optimized.
- Less overhead (no interpreter startup, minimal memory structures).
- Simpler string substitution and less abstraction.
Seriously, it is not a matter of opinion.
I hope you are convinced now.
In case you are not, let me know, I will let you in on a lot of great details. :)