[HN Gopher] Codon: A high-performance Python-like compiler using...
       ___________________________________________________________________
        
       Codon: A high-performance Python-like compiler using LLVM
        
       Author : arshajii
       Score  : 231 points
       Date   : 2022-12-08 15:05 UTC (7 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | maxloh wrote:
       | What's the difference with mypyc [0] ? It also compiles Python to
       | native code.
       | 
       | [0]: https://github.com/mypyc/mypyc
        
         | return_to_monke wrote:
         | the last commit to it's repo was 2 years ago.
        
           | okso wrote:
           | > The mypyc implementation and documentation live in the
           | mypyc subdirectory of the mypy repository. > Since mypyc uses
           | mypy for type checking, it's convenient to use a single
           | repository for both. > Note that the mypyc issue tracker
           | lives in this repository! Please don't file mypyc issues in
           | the mypy issue tracker.
           | 
           | See https://github.com/mypyc/mypyc/blob/master/show_me_the_co
           | de....
        
       | slt2021 wrote:
       | power of Python is in ecosystem of libraries, not only Python
       | syntax.
       | 
       | Without the ecosystem of libraries, I am afraid use cases for
       | Codon will be very very limited. Because Python developers (just
       | like Node) got used to thinking: Need to do X? Lets see if I can
       | pip install library that does it.
       | 
       | Ultimately, python is like super flexible glue between ecosystem
       | of libraries that lets anyone build and prototype high quality
       | software very quickly
        
         | victoryhb wrote:
         | If Codon becomes similar enough to Python, it will be trivial
         | to port Python libs to it, thus opening Codon to the vast
         | Python ecosystem.
        
           | slt2021 wrote:
           | The only trivial thing in software is hello world, anything
           | more complicated or useful for end users is usually far from
           | being trivial, in my experience.
        
           | _frkl wrote:
           | What's the story with Python libraries that have
           | c-modules/binary parts to it? Would those work? If not, then
           | the previous comment stands, IMHO.
        
       | yayr wrote:
       | Can it run PyTorch, TF etc?
        
       | PaulHoule wrote:
       | How does this relate to
       | 
       | https://cython.org/
       | 
       | ?
       | 
       | Would it be possible to write performance-sensitive parts of a
       | Python system in Codon and link that to a CPython or PyPy runtime
       | that supports more dynamic features?
        
         | bastawhiz wrote:
         | Cython takes python-ish code and compiles it to C for use as
         | CPython C extensions. This compiles directly to machine code
         | without the need for CPython, as far as I can tell.
        
       | weinzierl wrote:
       | I want the opposite. Is there a project that compiles to python
       | (either source or bytecode)?
       | 
       | Sort of a graalvm for python?
        
         | odo1242 wrote:
         | WebAssembly? Try compiling something to WebAssembly and running
         | it in python?
        
           | weinzierl wrote:
           | I haven't thought of that. It's a good idea. I know how to
           | compile to WebAssembly but how do I run it in python?
           | 
           | A quick search leads to pywasm and it is even native python.
           | But is it usable? Any other options?
        
             | syrusakbary wrote:
             | Wasmer Python can be used if you want to run Wasm in
             | Python. Hope this helps!
             | 
             | https://github.com/wasmerio/wasmer-python
        
         | grumpopotamus wrote:
         | https://coconut-lang.org/
        
       | IceHegel wrote:
       | would love to see actual benchmarks
        
         | arshajii wrote:
         | We do have a benchmark suite at
         | https://github.com/exaloop/codon/tree/develop/bench and results
         | on a couple different architectures at
         | https://exaloop.io/benchmarks
        
           | _aavaa_ wrote:
           | Why are do the C++ implementations perform so poorly?
        
             | camel-cdr wrote:
             | My guess for word_count and faq is that the C++
             | implementation uses std::unordered_map, which famously has
             | quite poor performance. [0]
             | 
             | [0] https://martin.ankerl.com/2019/04/01/hashmap-
             | benchmarks-01-o...
        
         | memco wrote:
         | Don't have anything significant, but giving this a quick test
         | with some of my advent of code solutions I found it to be quite
         | a bit slower:                  time python day_2.py
         | ________________________________________________________
         | Executed in   57.25 millis    fish           external
         | usr time   25.02 millis   52.00 micros   24.97 millis
         | sys time   25.01 millis  601.00 micros   24.41 millis
         | time codon run -release day_2.py
         | ________________________________________________________
         | Executed in  955.58 millis    fish           external
         | usr time  923.39 millis   62.00 micros  923.33 millis
         | sys time   31.76 millis  685.00 micros   31.07 millis
         | time codon run -release day_8.py
         | ________________________________________________________
         | Executed in  854.23 millis    fish           external
         | usr time  819.11 millis   78.00 micros  819.03 millis
         | sys time   34.67 millis  712.00 micros   33.96 millis
         | time python day_8.py
         | ________________________________________________________
         | Executed in   55.30 millis    fish           external
         | usr time   22.59 millis   54.00 micros   22.54 millis
         | sys time   25.86 millis  642.00 micros   25.22 millis
         | 
         | It wasn't a ton of work to get running, but I had to comment
         | out some stuff that isn't available. Some notable pain points:
         | I couldn't import code from another file in the same directory
         | and I couldn't do zip(*my_list) because asterisk wasn't
         | supported in that way. I would consider revisiting it if I
         | needed a single-file program that needs to work on someone
         | else's machine if the compilation works as easily as the
         | examples.
        
           | crucialfelix wrote:
           | It looks like you are compiling and running. Try compiling to
           | an executable and then benchmark running that
        
           | arshajii wrote:
           | I would guess the bulk of the time is being spent in
           | compilation. You might try "codon build -release day_2.py"
           | then "time ./day_2" to measure just runtime.
        
       | ubj wrote:
       | Very interesting--Codon can generate standalone executables,
       | object files, and LLVM IR [1]. It has strong typing for functions
       | and argument return values [2]. Syntax looks more compact than
       | Cython.
       | 
       | Looking forward to giving Codon a try!
       | 
       | [1]: https://docs.exaloop.io/codon/general/intro
       | 
       | [2]: https://docs.exaloop.io/codon/language/functions
        
       | CyberDildonics wrote:
       | _Codon is a high-performance Python compiler that compiles Python
       | code to native machine code without any runtime overhead_
       | 
       | Further down:
       | 
       |  _Codon is a Python-compatible language, and many Python programs
       | will work with few if any modifications:_
        
       | harvie wrote:
       | Unfortunately stuff like this never makes it to the upstream. And
       | i am afraid to ask why. We had pypy for years, but never got
       | merged with python. That is why there are still minor
       | incompatibilities between pypy and "The Python", so it's not that
       | useful as it might have been if it got merged with cpython at
       | some point.
        
         | camdenreslink wrote:
         | No need to be afraid. The Python C extension API makes it very
         | hard to make a JIT work well because of how it is implemented.
         | C extensions are also part of why Python is so popular in the
         | first place. If everybody wrote pure Python (like they write
         | pure JavaScript), then the reference implementation would
         | probably look like Pypy.
        
         | dr_zoidberg wrote:
         | I got a massive jump in performance when moving from Python 3.8
         | to 3.10 (over some function call optimizations I think, based
         | on the project). And 3.11 got even better (up to 50% faster on
         | special cases, and 10~15% on average) with respect to 3.10.
         | Python 3.12 is already getting even more speedups and a there's
         | a lot more down the road[0].
         | 
         | But Python core developers value keeping "not breaking anyones
         | code" (Python 3 itself was a huge trip on that aspect and
         | they're not making that mistake again), that's why things may
         | seem slow on their end. But work is being done, and the results
         | are there if you benchmark things.
         | 
         | [0] See https://github.com/faster-
         | cpython/ideas/blob/main/FasterCPyt... however that's over a
         | year old already and I'm sure I've read/heard more specifics
        
           | amelius wrote:
           | Interesting. What is the status of the GIL these days?
        
             | ris wrote:
             | Exactly the same as it ever was, but if you're doing cpu-
             | heavy stuff on python objects you're doing it wrong because
             | they'll never be Fast.
        
           | gjvc wrote:
           | same. for my work project, 3.11 was performance-equivalent to
           | pypy 3.9
        
         | laerus wrote:
         | It's not like you can just "merge" pypy into python, they are
         | totally different implementations. CPython is written in C and
         | PyPy is written in RPython which is a subset of the python
         | language that gets compiled, into into an interpreter with JIT
         | support. You can actually write an interpreter for any language
         | using RPython and their toolset, for example Ruby
         | https://github.com/topazproject/topaz
        
           | williamstein wrote:
           | Morever, a wonderful aspect of standard CPython is that you
           | can compile it from source on a huge range of architectures
           | in less than 5 minutes. Building Pypy from source is more
           | difficult, and Pypy is significantly less portable (e.g.,
           | there is no viable WebAssembly version of Pypy).
        
       | danbmil99 wrote:
       | The number one question for me would be, is it interoperable with
       | existing Python and libraries?
        
       | ot wrote:
       | Can we change the title to say Python-like or something similar?
       | Based on the comments so far, it seems that the detail that it
       | compiles its own Python-inspired language, not actual Python, is
       | lost on many.
       | 
       | EDIT: A list of differences here:
       | https://docs.exaloop.io/codon/general/differences
       | 
       | The summary minimizes with "many Python programs will work with
       | few if any modifications", but it actually looks like a
       | substantially different language.
        
         | adsharma wrote:
         | For py2many, there is an informal specification here:
         | 
         | https://github.com/py2many/py2many/blob/main/doc/langspec.md
         | 
         | Would be great if all the authors of "python-like" languages
         | get together and come up with a couple of specs.
         | 
         | I say a couple, because there are ones that support the python
         | runtime (such as cython) and the ones which don't (like
         | py2many).
        
         | dang wrote:
         | Ok, we've liked it in the title above.
        
         | darawk wrote:
         | That list actually seems genuinely pretty minimal. Reading your
         | comment I was expecting a long major list of changes, but it's
         | only 3 things, most of which seem relatively unlikely to impact
         | most programs, with the possible exception of dictionary sort
         | order.
        
           | wpietri wrote:
           | Really? The lack of Unicode strings immediately disqualifies
           | this for most things I've worked on the last few years. No
           | emojis, no diacritics, no non-US users. Ok for internal tools
           | for American companies with an older workforce, I guess, but
           | I wouldn't use this for anything that takes input from the
           | general public (e.g., customers).
        
             | darawk wrote:
             | I suppose I'm thinking more about data science /
             | engineering oriented things, since that's what I tend to
             | use Python for.
        
           | [deleted]
        
           | KerrAvon wrote:
           | Read the entire page. Those three bullet points aren't the
           | extent of it. This is like the difference between Ruby and
           | Crystal; the same syntax, similar culture, but they're
           | fundamentally different languages.
        
           | antoinealb wrote:
           | The list of small things are for data structure. However, the
           | language is a lot less dynamic than Python:
           | 
           | > Since Codon performs static type checking ahead of time, a
           | few of Python's dynamic features are disallowed. For example,
           | monkey patching classes at runtime (although Codon supports a
           | form of this at compile time) or adding objects of different
           | types to a collection.
           | 
           | While monkey patching is maybe not done so much in Python
           | (outside of unit testing), adding objects of different to a
           | collection is definitely a common operation!
        
             | unsafecast wrote:
             | From what I understand, this will be possible in the future
             | with implicit union types. Wouldn't work with _arbitrary_
             | types, but with a set of types that can be computed at
             | compile time (my guess is that this is possible in most
             | real-world cases).
        
         | williamstein wrote:
         | You convinced me to change the description of a "Python-like
         | language" I'm working on to say "Python-like" instead of
         | "Python": https://www.npmjs.com/package/pylang
        
         | jxy wrote:
         | > Since Codon performs static type checking ahead of time, a
         | few of Python's dynamic features are disallowed. For example,
         | monkey patching classes at runtime (although Codon supports a
         | form of this at compile time) or adding objects of different
         | types to a collection.
         | 
         | This may or may not be the biggest concerns.
        
         | linuxftw wrote:
         | Python is a language with several implementations (PyPy,
         | CPython, JPython). Not all python programs work in all of those
         | implementations.
         | 
         | So, I think this might qualify as much as a python
         | implementation as PyPy.
        
           | e12e wrote:
           | I don't think python without heterogenous lists and
           | dictionaries is really python?
        
             | linuxftw wrote:
             | I can't think of a time I ever needed to do such a thing,
             | and I've written many thousand lines of python. Python
             | supports OOP, so classes will get you quite far in this
             | regard.
        
         | otikik wrote:
         | Pythonic?
        
         | Waterluvian wrote:
         | The main challenge with those three issues, to me at least, is
         | that it cannot even tell you, "yep, you need minor changes for
         | Codon to work." It'll just work until it doesn't at runtime
         | because your violates one of those three assumptions. So to
         | migrate, we would have to go and figure out all the possible
         | cases those things matter and guard against them. Not really
         | unpalatable, just not so much a nice migration path.
         | 
         | Also, I'm not actually sure what they mean by internal dict
         | sorting. Do they mean insertion order stability?
        
         | wiremine wrote:
         | From the README, for those who didn't scroll that far:
         | 
         | "While Codon supports nearly all of Python's syntax, it is not
         | a drop-in replacement, and large codebases might require
         | modifications to be run through the Codon compiler. For
         | example, some of Python's modules are not yet implemented
         | within Codon, and a few of Python's dynamic features are
         | disallowed. The Codon compiler produces detailed error messages
         | to help identify and resolve any incompatibilities."
        
       | LarsDu88 wrote:
       | Do people not know about numba which unlike this project is FOSS
       | and integrates with numpy???
        
         | nerdponx wrote:
         | And Numba is actually CPython, unlike this which is just
         | "Python-like".
         | 
         | There's also Nuitka as yet another alternative.
         | 
         | Or you're going to use a "Python-like" compiled language,
         | consider using Nim.
        
         | ipsum2 wrote:
         | For context, Numba also uses the LLVM and it works with Python
         | code via decorators.
        
         | killingtime74 wrote:
         | Doesn't it require you to annotate every function if you want
         | to compile to a binary? That makes it more like Cython than
         | this.
         | https://numba.readthedocs.io/en/stable/user/pycc.html#overvi...
        
         | xapata wrote:
         | Numba doesn't market itself very well.
        
         | bornfreddy wrote:
         | Does it make sense to use Numba with Django / Flask / FastApi?
        
           | LarsDu88 wrote:
           | If you're trying to do intense numerical computations on the
           | backend...
        
       | poulpy123 wrote:
       | after reading it's not a python compiler but a compiled language
       | based on the python syntax
        
         | JonChesterfield wrote:
         | One of the faq things refers in passing to integers being 64bit
         | instead of arbitrary precision. That's a bit more fundamental
         | than some cpython modules don't work. Haven't found a language
         | reference yet.
         | 
         | edit: it's statically typed ahead of time - that feels like
         | something that needs a detailed description of what it's doing,
         | given the baseline of like-python
        
           | bogwog wrote:
           | I wonder if the differences will cause any real compatibility
           | issues with existing Python libraries?
        
             | williamstein wrote:
             | It would cause major issues to libraries for mathematics
             | (such as sympy or sagemath) that assume integers are
             | arbitrary precision. Large integers are common in number
             | theory and cryptography, where people also care very much
             | about performance.
        
       | pmontra wrote:
       | I googled 'codon and django' and unsurprisingly found a lot of
       | bioinformatic stuff. I tried to add language and compiler to no
       | avail. The only query that got results was codon python compiler.
       | Overall I think it's a name that clashes with a lot of DNA/RNA
       | research.
       | 
       | While searching I found a paper from 2021 about Codon [1]. The
       | author is not in the About page of Exaloop [2] but the supervisor
       | of that thesis is there. From the "Future Work" section:
       | 
       | > we plan to add union types and inheritance. On the IR side
       | [Intermediate Representation], we hope to develop additional
       | builtin transformations and analyses, all the while expanding the
       | reach of existing passes. As far as library support, we plan to
       | port existing high-performance Python libraries like NumPy [...]
       | to Codon; this will allow Codon to become a drop-in replacement
       | for Python in many domains.
       | 
       | Maybe they already did.
       | 
       | [1] Codon: A Framework for Pythonic Domain-Specific Languages by
       | Gabriel L. Ramirez
       | https://dspace.mit.edu/bitstream/handle/1721.1/139336/Ramire...
       | 
       | [2] https://exaloop.io/about.html
        
         | inetknght wrote:
         | Having worked in the DNA analysis space and admittedly haven't
         | read the article... my first thought was that Codon was some
         | python library for DNA stuffs that gets compiled via LLVM for
         | performance.
        
       | melenaboija wrote:
       | > "...typically on par with (and sometimes better than) that of
       | C/C++"
       | 
       | What makes it faster than C++?
       | 
       | I see this in the documentation but I am not sure it helps me
       | (not an expert):
       | 
       | > C++? Codon often generates the same code as an equivalent C or
       | C++ program. Codon can sometimes generate better code than C/C++
       | compilers for a variety of reasons, such as better container
       | implementations, the fact that Codon does not use object files
       | and inlines all library code, or Codon-specific compiler
       | optimizations that are not performed with C or C++.
        
         | __ryan__ wrote:
         | JIT.
        
           | ot wrote:
           | JIT can be faster than a static compiler if it takes
           | advantage of runtime feedback, but that's not the case here:
           | 
           | > While Codon does offer a JIT decorator similar to Numba's,
           | Codon is in general an ahead-of-time compiler that compiles
           | end-to-end programs to native code.
        
             | boomanaiden154 wrote:
             | It can be, but if you're using PGO, the performance gains
             | from JIT are a lot less significant and you lose the
             | compilation overhead at runtime that you have with JIT.
        
       | sambeau wrote:
       | Who would create a language that only has ASCII strings in this
       | day and age?
        
         | [deleted]
        
         | naasking wrote:
         | Someone who's just trying to get something up and running.
         | Unicode is complicated.
        
         | tasty_freeze wrote:
         | Here is the quote of the thing you are referring to:
         | 
         | > Codon currently uses ASCII strings unlike Python's unicode
         | strings.
         | 
         | Note the word "currently." Implementing this while also
         | tracking the constantly evolving Python language through its
         | various versions is a lot of work. They apparently prioritizing
         | other things over this particular aspect.
        
       | jnxx wrote:
       | Just out of curiosity: Why is it possible to compile Common Lisp
       | Code (or Scheme, or Clojure) to high-performance native or jit-
       | compiled code, but not Python? It is said that "Python is too
       | dynamic", but is not everything in Lisp dynamic, too?
       | 
       | And none of these languages is less powerful than Lisp, lack
       | Unicode support, or whatever, so this can't be the reason.
        
         | hathawsh wrote:
         | The demand for compiled Python hasn't been as high as the
         | demand for other languages, so the number of people who have
         | worked on it is much smaller than the number who have built
         | JITs for ECMAScript and others. Python has long been fast
         | enough for many things, and where it isn't, it's easy to call C
         | code from CPython.
         | 
         | Python does have lesser-used dynamic capabilities that probably
         | don't exist in Common Lisp. Those capabilities make it
         | difficult to optimize arbitrary valid Python code, but most
         | people who need a Python compiler would be happy to make
         | adjustments.
        
         | miohtama wrote:
         | It's because Python object attributes can change any time, as
         | they are accessed dynamically. Nothing can be inlined easily.
         | The object structure is pointer heavy.
         | 
         | Here is some old 2014 post:
         | 
         | http://jakevdp.github.io/blog/2014/05/09/why-python-is-slow/
         | 
         | As other commenters pointed out, some of these Python features,
         | which are unused 99,99% time, could be sacrified for additional
         | speedup by breaking backwards compatibility.
        
           | register wrote:
           | The same applies to Common Lisp. Maybe it's because type
           | deduction is more difficult in Python than in CL?
        
         | mytherin wrote:
         | It is possible to JIT compile Python just fine. There are
         | projects like PyPy that have been doing this for a long time
         | [1]. The reason these alternative projects never take off is
         | because many of Python's most used libraries are written
         | against CPython's C API. This API is giant, and exposes all of
         | the nitty gritty implementation details of the CPython
         | interpreter. As a result, changing _anything_ significant about
         | the implementation of the interpreter means those libraries no
         | longer work. In order to not break compatibility with the
         | enormous amounts of packages the internals of the CPython
         | interpreter are mostly locked in at this point with little
         | wiggle room for large performance improvements.
         | 
         | The only real way out is to make Python 4 - but given the
         | immense pain of the Python 2 -> 3 transition that seems
         | unlikely.
         | 
         | [1] https://www.pypy.org
        
       | xapata wrote:
       | Ugly, confusing naming choices: ``@par`` instead of
       | ``@parallel``.
        
         | jlokier wrote:
         | How do you feel about _`def`_ instead of _`define`_?
        
       | tomas789 wrote:
       | What is the difference between Codon and Pypy other than Codon
       | not being targeted as a drop-in replacement for Cpython?
        
         | arshajii wrote:
         | Some info on that at
         | https://docs.exaloop.io/codon/general/faq#how-does-codon-
         | com......
        
           | williamstein wrote:
           | Their benchmarks (https://exaloop.io/benchmarks) show that
           | Codon is much, much faster than pypy. I also just tried some
           | microbenchmarks with their fib example (iterated many times
           | with higher parameters) and got similar results. It's
           | unfortunate for now that this isn't open source, but it's
           | really valuable to demonstrate to us Python lovers what's
           | possible using LLVM!
        
             | cogman10 wrote:
             | Their benchmarks are not to be trusted (after reading the
             | source).
             | 
             | - They cheat, they rewrite code to use coden specific
             | features to "win" (ie, parallelization and GPU
             | optimizations)
             | 
             | - They don't warm up. They are simply running their
             | competition directly rather than allowing any sort of
             | warmup. (In other words, they are measuring cold boot and
             | startup time)
             | 
             | Now, if they want to argue about startup time or whatever
             | mattering for performance then fine. However, the
             | representation of "20x faster!" is simply deception.
             | 
             | TBF, they are upfront about cheating
             | 
             | > Further, some of the benchmarks are identical in both
             | Python and Codon, some are changed slightly to work with
             | Codon's type system, and some use Codon-specific features
             | like parallelism or GPU.
        
               | williamstein wrote:
               | Thanks for doing the work to point all of this out.
               | "Benchmarketing".
        
       | qwefsdf wrote:
       | Anybody claiming it's almost Python is kidding themselves. This
       | compiler needs to do static type checking. This is inherently
       | impossible in Python. Not just because of some obscure corner
       | cases that nobody uses. It's baked into the language itself.
       | 
       | Reality-check: Why do you think type hints and type checkers like
       | mypy and pyright take such a long time to get going and even they
       | are not there yet? If this was all so easy with just ignoring
       | some obscure rarely used features then mypy would work with
       | essentially no type annotations, all just automatic inferences.
       | Anybody who has tried to work with type annotations in Python
       | knows how hard this is.
       | 
       | So, those guys are quite obviously overselling their product. I
       | can understand it, academic life is hard, and once you've
       | completed your Ph.D., what can you do. You need to stand out. But
       | these claims don't pass the smell test, sorry.
        
         | LargoLasskhyfv wrote:
         | What about GraalVM? Are they overselling, too?
        
       | brrrrrm wrote:
       | does this support any form of FFI? It'd be nice if users could
       | shim in lightweight APIs that clone libraries like numpy/pytorch
       | -- it'd immediately make some machine learning super portable!
        
       | grumpopotamus wrote:
       | Any benchmark comparisons to mypyc yet?
        
       | redleader55 wrote:
       | Free for non-production use... it's a "no" for me.
        
         | williamstein wrote:
         | Woah - also, their license automatically becomes open source
         | (Apache) three years from now.
        
           | kevincox wrote:
           | The problem with these is always security updates. If you
           | want to run on the old stuff you have to make your own
           | security patches. Of course maybe that is exactly something
           | that it makes sense to pay for.
        
         | blahgeek wrote:
         | It's also confusing... I mean, what does "non-production use"
         | mean anyway? Does it mean "non-commercial use"? Or
         | "testing/debug/staging environment"? Or "does not produce any
         | valuable output"...?
        
           | worldsavior wrote:
           | It means if a company uses this program, they can't use it
           | without paying the developer.
        
             | dragonwriter wrote:
             | > It means if a company
             | 
             | "company" is not a particularly well-defined term.
        
             | georgyo wrote:
             | But companies can still experiment with it without paying.
             | IE, you can integrate it and run benchmarks to see if it
             | would actually help your pain points.
        
           | williamstein wrote:
           | According to this article
           | https://perens.com/2017/02/14/bsl-1-1/ about the Business
           | Source License, the intention conveyed by the word
           | "production" for that license is use "in any capacity that is
           | meant to make money".
        
             | dmos62 wrote:
             | > "in any capacity that is meant to make money"
             | 
             | I'll note that that's the definition of "commercial".
        
             | williamstein wrote:
             | What I want to know is: "can I add Codon to a site like
             | https://cocalc.com that I host as long as users of Codon
             | explicitly agree to only use it in a way that is compatible
             | with the license?" I have absolutely no idea if that would
             | be allowed by the rules or not.
        
               | unsafecast wrote:
               | I think that's supposed to apply to you, not your users.
               | My understanding is that you pay if you make money using
               | it. I can definitely see how you can easily interpret it
               | in many other ways though.
        
         | ThinkBeat wrote:
         | I have not dug into the project yet, but if it delivers on the
         | features it mentions it should be a game changer for a lot of
         | companies, heavily invested in Python.
         | 
         | Paying to use it seems fair.
        
           | acedTrex wrote:
           | numba is already a thing though
        
         | sillysaurusx wrote:
         | Surprised this sentiment is so common. It's like, do you want
         | open source devs to work for free forever? Even Redis had to
         | pivot to a business license.
         | 
         | I'm not sure what the terms are in this particular case, but in
         | general, wanting someone to pay if they're deploying it to lots
         | of customers seems reasonable.
        
           | lozenge wrote:
           | I can swap one load balancer or cache for another. However,
           | if my programming language has unfavourable terms I will have
           | to rewrite all my code. Oh, and the knowledge I gained will
           | be non transferable to another job or project because it'll
           | always be a niche language. Better to spend the time learning
           | how to get the same performance out of Numba or whatever
           | other alternatives people mentioned here.
           | 
           | By the way, Redis is still BSD licensed.
        
           | redleader55 wrote:
           | There are a lot of products released under GPL, for example,
           | that make money for their authors. It's just that they don't
           | make money with licensing fees.
        
           | ipsum2 wrote:
           | > Even Redis had to pivot to a business license.
           | 
           | Wrong, Redis has a BSD-3 license:
           | https://github.com/redis/redis
           | 
           | Optional add-ons to Redis may have non-free licenses.
        
           | nu11ptr wrote:
           | I understand both perspectives.
           | 
           | On the one hand, in the same way any sort of fee (even $1) is
           | a big impediment to adoption over free, so is the idea that
           | "if I try this out and like it, I'll now be stuck with
           | whatever costs they stick me with now and in the future". In
           | a fast moving world, open source is just easier because if
           | you change your mind, you haven't wasted money. In addition,
           | there are only so many costs a project can afford and it is
           | hard to know as it progresses where those will popup, so you
           | avoid when you can.
           | 
           | That said, developers need to eat, and it is easy to
           | appreciate the fact that they are letting you see the source,
           | play with it, but pay if you want to use. I also fully
           | support their right to license their software as they see
           | fit.
        
           | mywittyname wrote:
           | A lot of developers don't have/control budgets and might not
           | have the clout required to get a tool like this approved.
           | 
           | I agree that the devs of these tools need to be paid, but
           | that particular avenue presents some roadblocks.
        
       | v3ss0n wrote:
       | Why not contribution to PyPy and Why not MyPyC
        
         | bastawhiz wrote:
         | Pypy uses its own JIT. This project does AOT with LLVM. They're
         | not compatible.
         | 
         | MyPyC requires type annotations to work. This does not.
        
       | [deleted]
        
       | munificent wrote:
       | _Since Codon performs static type checking ahead of time, a few
       | of Python 's dynamic features are disallowed. For example, monkey
       | patching classes at runtime (although Codon supports a form of
       | this at compile time) or adding objects of different types to a
       | collection._
       | 
       | This seems like a _very_ different language from Python if it won
       | 't let you do:                   [1, 'a string']
        
         | didip wrote:
         | I welcome this change. I am willing to sacrifice a few Python
         | features for the sake of speed.
        
         | __mharrison__ wrote:
         | Not "Python", but if you are doing that in Python, then you are
         | doing it wrong.
        
         | [deleted]
        
         | jnxx wrote:
         | I have been using Python since 25 years, and never needed that
         | one.
        
           | ris wrote:
           | You've never had to read arbitrary json?
        
             | insanitybit wrote:
             | I just did a quick check (apparently DuckDuckGo has a built
             | in JSON validation function lol love it) and `[1, "foo"]`
             | does pass their JSON validation.
             | 
             | Not surprised but I did want to confirm.
        
           | joshmaker wrote:
           | In 25 years you've never once created a list with more than
           | one type of object in it?
        
             | cjohnson318 wrote:
             | Maybe a list with ThingObject or None, but my lists are
             | usually homogenous.
        
               | mrfox321 wrote:
               | thats just homogenous Sequence[Optional[T]], though.
        
             | mangecoeur wrote:
             | I have also been using python a long time and i honestly
             | can't remember a time i used mixed type list.
        
               | querez wrote:
               | In my code this comes up often, e.g. when I use tuples
               | instead of namedtuple or a dataclass.
        
               | bastawhiz wrote:
               | Tuples aren't lists though. Tuples are really just
               | structs with indexes instead of names.
        
             | gautamdivgi wrote:
             | I'll second that. I've been doing python for a while and
             | haven't used the mixed type list. I've actively avoided
             | doing something like that. The situation doesn't come up
             | often.
        
             | throwaway894345 wrote:
             | I mean, it depends on what you mean by "type". A list of
             | some Protocol type (what other languages call "interfaces")
             | is still a homogenous list even though the concrete types
             | are heterogeneous. This is almost always what you want when
             | you're thinking of "a heterogeneous list".
        
             | terhechte wrote:
             | Same here. If I needed that I might use a tuple.
        
               | amelius wrote:
               | And then it crashes when you convert it to JSON.
        
       | victor82 wrote:
       | Seems there is not bytearray implemented, can't test further :(
        
       | shadowofneptune wrote:
       | This gives the same feeling as AssemblyScript: it says it is one
       | language, up to the point it isn't. That may make it easier for
       | some people, but feels so uncertain. Both have a very slim set of
       | articles in place of a proper manual; they lean on their parent
       | languages.
        
       ___________________________________________________________________
       (page generated 2022-12-08 23:00 UTC)