Earlier quoted context omitted.
The main reason pylint is slow is it tries to infer the types of the variables, and it predates type annotations so it can go through multiple functions/control paths across multiple files to figure these out. This approach is obviated by type annotations and type checkers. Ruff is built for speed from the start and doesn't look at type annotations because you should run a type checker alongside.
Just to be sure. Is Ruff faster by lacking type checking? Also, does Ruff work well on codebase without type hints?
Ruff will work fine without type hints.
I believe it rightfully leaves it to mypy for those who want those features.
Mypy transpiles itself to c using mypyc and that can still take a while to complete when caches get invalidated.