Comment by procaryote

Comment by procaryote 2 months ago

6 replies

Python has compounding problems that make it extremely tricky though.

If it was just slow because it was interpreted they could easily have added a good JIT or transpiler by now, but it's also extremely dynamic so anything can change at any time, and the type mess doesn't help.

If it was just slow one could parallelise, but it has a GIL (although they're finally trying to fix it), so one needs multiple processes.

If it just had a GIL but was somewhat fast, multiple processes would be OK, but as it is also terribly slow, any single process can easily hit its performance limit if one request or task is slow. If you make the code async to fix that you either get threads or extremely complex cooperative multitasking code that keeps breaking when there's some bit of slow performance or blocking you missed

If the problem was just the GIL, but it was OK fast and had a good async model, you could run enough processes to cope, but it's slow so you need a ridiculous number, which has knock-on effects on needing a silly number of database/api connections

I've tried very hard to make this work, but when you can replace 100 servers struggling to serve the load on python with 3 servers running Java (and you only have 3 because of redundancy as a single one can deal with the load), you kinda give up on using python for a web context

If you want a dynamic web backend language that's fast to write, typescript is a much better option, if you can cope with the dependency mess

If it's a tiny thing that won't need to scale or is easy to rewrite if it does, I guess python is ok

pjmlp 2 months ago

> If it was just slow because it was interpreted they could easily have added a good JIT or transpiler by now, but it's also extremely dynamic so anything can change at any time, and the type mess doesn't help.

See Smalltalk, Common Lisp, Self.

Their dynamism, image based development, break-edit-compile-redo.

What to change everything in Smalltalk in a single call?

a becomes: b

Now every single instance of a in a Smalltalk image, has been replaced by b.

Just one example, there is hardly anything that one can do in Python that those languages don't do as well.

Smalltalk and Self are the genesis of JIT research that eventually gave birth to Hotspot and V8.

mixmastamyk 2 months ago

Python is fast enough for everything I’ve used it for decades and Cython and Rust are there for when it isn’t. Your performance needs are not typical.

  • procaryote 2 months ago

    Oh I use it too, just not for anything that needs to scale at all

    Cython is a bit of a non-starter for a web context as you're essentially writing C with extra sugar, and can get C style vulnerabilities.

    • mixmastamyk 2 months ago

      Second paragraph is not really true, unless you’ve gone out of your way. Cython is used primarily for compute-bound problems, not processing user input.

      • procaryote 2 months ago

        So as long as you're using it properly and diligently filter all user input before it hits your cython, and don't make any mistakes it's fine?

johnisgood 2 months ago

Or Elixir / Erlang instead of Java / Kotlin, and Go instead of Python, for this use case.