Readit News logoReadit News
motoboi · 4 years ago
I’m not trying to start a flame war, but I’m genuinely curious: if you want and need all this, why not use Java?

Java has all the strong typing and static checking, all you need is to type a lot more words.

marcinzm · 4 years ago
Scripts where startup time matters.

Situations where you don't want the heavy-weight and complex JVM.

Cases where you need to interact with C/C++ code a lot (ML, etc.).

Companies where python is the norm and introducing another language adds a lot of overhead.

remexre · 4 years ago
GraalVM (and SubstrateVM) is actually fixing a lot of these; I had a short-lived process that I AOT compiled with SubstrateVM, and I spent a lot of time checking I had done it right and not somehow accidentally compiled in my input data as well or something -- I got a two order of magnitude speedup, with fewer than ten lines of code change.
qyi · 4 years ago
Replace Java with literally anything else (including whatever Java implementation does not have the issue) and the "startup time" red herring is gone.
icegreentea2 · 4 years ago
The key would be that 'you sometimes want it'.

The stuff that `zope.interface` gets you is honestly on the... heavy side of what I think makes sense for a lot of scenarios (especially in Python). Which would explain it's relatively low uptake despite having been around for like... 15-20 years??

I haven't used `typing.Protocol` yet (I am mostly still working in 3.7), but it seems to roughly capture the level of 'heaviness' that seems workable.

I do get your gist though. Sometimes I wonder what I'm doing type annotating stuff.

psd1 · 4 years ago
> I do get your gist though. Sometimes I wonder what I'm doing type annotating stuff.

I have to say, I despise trying to decipher untyped functions. This arg is called "order" - do you want an instance of Order, an order ID, or a function for sorting?

Fine, I'll read the docstring. Instead of using the IDE.

BerislavLopac · 4 years ago
> I haven't used `typing.Protocol` yet (I am mostly still working in 3.7)

You can use it if you install the typing-extensions package: https://pypi.org/project/typing-extensions/

qyi · 4 years ago
The idea of an interface is fundamental to computing. No matter what you do, at the end of the day data exchanged between two systems has to be structed _some how_. E.g., machine code submitted to the CPU, register configurations, C ABI, Python structures, JSON. You _could_ be hand wavy about it, maybe even use machine learning, but then it will just be ambiguous and lead to vulns. IMO the constant insistence to try and find ways around this is a huge setback. I used Python heavily in 2008 and always was annoyed when trying to figure out the essence of an API (which is what you get when there is no concrete interface). Whenever I read a Python codebase, unsurprisingly, it's full of handwaving and the resultant bugs (some people know what they're doing, but the problem is there more than in a typed language).
pansa2 · 4 years ago
Usually, because you already have a lot of Python code and it's easier to write more of that, than to try and figure out Python <=> Java interop.
dempedempe · 4 years ago
Or you could use Kotlin and keep the strong typing and static checking but do away with the "type a lot more words" part ;)
BiteCode_dev · 4 years ago
Because you don't always need this. In python, it's optional: you can use it when it matters.
edem · 4 years ago
A better question is why not use Kotlin? It has most of the things Python has and much more (no decorators _yet_ though, but they are on the roadmap).
high_density · 4 years ago
because most ML libraries are python-first...

as for other stuff (web-servers, what not), I don't think python can beat kotlin / typescript / etc

fnord123 · 4 years ago
Sure in Java you never have this question of structural vs nominal typing. It's all nominal.

Deleted Comment

joshuamorton · 4 years ago
Java doesn't support protocols.
albertzeyer · 4 years ago
It's the first time I hear about Zope, and also zope.interface. How widely is this used?

I personally would be hesitant to adopt something depending on some not-well-known library.

Then on the other side, if sth like interfaces are missing in core Python, and typing.Protocol is not quite the same thing, maybe we should try to extend the core typing for sth like typing.Interface? Or maybe first to typing_extensions.

Or, as I understood it, maybe we just need to fix ABCMeta (for MyPy), and then already have what we want?

I'm also not quite sure I understood: Why do I need this base class zope.interface.Interface at all? Why not just implement IPlugin or whatever like it is mentioned there, but not deriving from Interface, and throw NotImplementedError in methods (tools like PyCharm then recognize this is an abstract method). And all concrete types/classes just explicitly need to derive from this IPlugin class. That's mostly what I anyway do already, and what I also see in other projects code. This approach seems to be fine. What's the problem with it?

smoe · 4 years ago
I was a bit surprised to see zope.interfaces pop up these days. If you are not using the entire Zope Component Architecture I'm not sure how useful it has been since Python 3.

Zope and things build on top of it (Plone CMS e.g.) was fairly popular in the early-mid 2000s and was in my opinion ahead of it's time in many ways. But also overkill for most projects.

musingsole · 4 years ago
Python interfaces are an obscure feature. Zope.interface is the the ancestor of Python interfaces.

Which is to say, not widely.

robohoe · 4 years ago
AFAIK I’ve only seen Zenoss (monitoring software) use Zope widely. About the only place where I saw it.
stevesimmons · 4 years ago
Anyone curious about the history of Zope should read [1] for how the Python web server landscape looked in 2001.

[1] https://www.ukuug.org/events/linux2001/papers/html/SRichter/...

I discovered Zope in late 2000 while looking for an open source web application platform. Somehow I heard about Zope and thus learnt Python version 1.5.

Zope seemed to be on the cusp of greatness. The Zope conference in Paris in early 2001 was my first tech user group meeting. (Was anyone else reading this there?)

I stopped with Zope in 2003. Then 7 years later got a strange sense of deja vu at a bank I joined, where its trading platform used a Python object database possibly inspired by Zope's ZODB.

BerislavLopac · 4 years ago
IMO, protocols are way better than interfaces. They're essentially the same, except you don't need to inherit from a protocol for your object to be compliant.
qyi · 4 years ago
Zope was pretty popular a decade ago, never got into it though.
rbanffy · 4 years ago
If you do this, I urge you to add lots of comments explaining what and why you are doing it. All this is relatively new and will be very confusing to the people reading your code.
Recursing · 4 years ago
Actually, zope.interface has been around for 20 years. It just became almost abandoned like the rest of Zope with the era of Django/Flask (and the zope 3 debacle). Nowadays I think Twisted, Pyramid and Plone are the only "famous" projects left using it
runfalk · 4 years ago
It's also used by certbot, pyjwt, ckan, proxy.py, scrapy, etc. The list is pretty long but I do agree with you that the majority of packages neither use nor should use it.

https://github.com/zopefoundation/Zope/network/dependents?de...

btown · 4 years ago
What was the Zope 3 debacle exactly? I have vague memories of something like that from back in the day, but having trouble finding anything concrete.
rbanffy · 4 years ago
zope.interface was never widely adopted.
staticautomatic · 4 years ago
I’d urge lots of comments if you’re using anything that might lead the reader in the direction of Twisted, which has the most impenetrable documentation of any Python library I’ve ever seen.
ivirshup · 4 years ago
The O'Reilly book cover for Twisted is a tangled ball of snakes. This seemed like an accurate choice from its reputation.
chartpath · 4 years ago
OMG as a long-time Pyramid user I never thought I would see an article referring to the Zope Component Architecture on the front page of HN.
mark_l_watson · 4 years ago
Thanks for writing that. I need to use Python fairly often, even though I self identify as a Lisp developer. I found the discussion of checking structure with Protocols very useful. I am going to update my current project.

Dead Comment