this post was submitted on 16 Aug 2023
69 points (92.6% liked)

Python

6360 readers
9 users here now

Welcome to the Python community on the programming.dev Lemmy instance!

📅 Events

PastNovember 2023

October 2023

July 2023

August 2023

September 2023

🐍 Python project:
💓 Python Community:
✨ Python Ecosystem:
🌌 Fediverse
Communities
Projects
Feeds

founded 1 year ago
MODERATORS
 

One of my fav Python writeups. I love Python and luckily I get to dictate how it's being written in my job, so I'm forcing types down the through of my colleagues. Saved a bunch of debugging time, so I can waste more time on Lemmy while still getting paid. Good shit

top 12 comments
sorted by: hot top controversial new old
[–] [email protected] 12 points 1 year ago

Strict typing is the way

[–] [email protected] 11 points 1 year ago (2 children)

Type hints are cool. Runtime enforced type hints are cooler.

https://github.com/beartype/beartype

[–] [email protected] 3 points 1 year ago* (last edited 1 year ago)

Oh my gosh... This project and its readme are amazing. I gotta try this at work tomorrow, I hope my co-workers can bear with me.

Edit: I just found the release notes... I love it

[–] [email protected] 2 points 1 year ago

Thanks for this. I might start to use this. This would allow me to add typing class or function at a time and slowly work my way back.

[–] [email protected] 9 points 1 year ago (1 children)

I fully agree with the post. Except for a fast prototyping or a short personal script where it could be not necessary, type hint is a must. The subject is not only to guarantee that the program now runs without errors, but it will be still working right in the future too, even after a developer (either the original or other) make changes to the code.

[–] [email protected] 3 points 1 year ago

I do type hinting everywhere, cause I like it when my IDE auto complete works well ❤️

[–] [email protected] 9 points 1 year ago

I had a mixed experience adding types to a large enterprise Python codebase.

I think the thing that really kills it is the (relative) lack of community support. Whereas with TS, almost every package big or small usually has types, I've found a lot of pip packages wouldn't be typed out of the box, which means you gotta generate them automatically or use escape hatches like Any.

Using escape hatches like Any basically kill the point of typing, as the static checker basically stops checking after it sees an Any. If your static checker is configured to ignore certain files because they aren't typed yet, then any code that refers to those files also get ignored. You basically need to hit a threshold of your codebase and dependencies to get the benefits of typing. Until then, my experience was finding bugs that the type checker should've caught but didn't.

And obviously, to get the full power of types, you must buy in as a team, and that means really buy-in, without resorting to escape hatches like Any. Any reluctance, and you're likely in for an uphill battle.

Another thing that really hurt adoption, was that before using typing, a lot of the code just clearly broke type rules, eg a function that returns a string or a number, but the caller assumes the output is a number. Especially if it's lower level code, those may take a nontrivial refactor to fix.

All of this is assuming it's trivial to enforce a static check on the codebase through CI/CD.

This leads to my conclusion, that not being forced to use types is a BENEFIT of Python, not a downside. You are able to write code a lot faster and more expressively if you don't need to worry about typing, for small scripts or whatnot. I think if you're starting a project of any size and already know you want typing, consider using another language that has typing built in.

[–] [email protected] 3 points 1 year ago (2 children)

My main issue is that you’re going through all that trouble and still get Python-level performance.

I really like Python, but there are better typed languages out there. Also, faster ones.

[–] [email protected] 3 points 1 year ago (1 children)

How true is that still? I know python 3.2/3.4/3.6 there were significant performance issues on simple pieces of code. But python 3.9/3.11 have been significantly faster. I imagine I could write faster C++ code, but I definitely couldn't write it nearly as fast or nearly as readable.

[–] [email protected] 0 points 1 year ago* (last edited 1 year ago) (1 children)

Python has gotten faster, but it’s still nowhere near what you expect from traditional compiled languages. It can’t be.
The trick to writing performant Python code is to get good (native) libraries and let it handle the heavy lifting.

For performance sensitive stuff, the fact that pure Python is very slow really matters. For stuff that’s not performance sensitive (that is, 99% of the code out there) it doesn’t really matter, but even then it’s better to be fast than to be slow.

Now this is not something I would ordinarily have a problem with. I use Python for a reason and it’s not performance. But if I end up writing Python like it’s rust, I might as well do rust and reap the (massive!!!) performance and memory profile benefits too while I’m at it.

[–] [email protected] 1 points 1 year ago

Python3.10 was ~27x slower than Compiled C++ in this benchmark. Python 3.11 dropped that down to 17x just out of the box. Additionally, you can always write a python module in C or C++ to get the benefits of compilation. With the maintainability and flexibility of python.

[–] [email protected] 0 points 1 year ago

Yeah using a dynamically typed language and trying to force strong/static typing seems like a waste of effort.

There are plenty around.