4 ms·
Translating Cython to Mojo, a first attempt
- adsharma 1y agoA more interesting path is to keep dbscan_inner in pure python with type annotations and then use py2many --mojo=1 dbscan_inner.py to translate.
- baobun 1y agoSomehow just trying to navigate to this website makes my browser crash. Firefox on Android with NoScript.
- VoidWhisperer 1y agoSomething with Noscript is causing it. I was able to load it fine, then installed noscript and it suddenly crashed
- fnands 1y agoMhh, any idea what I could do? It's my website. I just use Quarto to create a static site, but I am also very clueless about web stuff.
- hyperbovine 1y agoIn my niche corner of scientific computing it feels like Cython has largely been replaced by Numba and CFFI, or just Julia. Last I checked it still needed setup.py which is a bit of a deal breaker in 2025.
- almostgotcaught 1y ago> Last I checked it still needed setup.py which is a bit of a deal breaker in 2025. lolwut
- westurner 1y ago/? cython pyproject.toml: https://www.google.com/search?q=cython+pyproject.toml https://www.google.com/search?q=cython+pyproject.toml From "Building cython extensions using only pyproject.toml (no setup.py)" https://github.com/pypa/setuptools/discussions/4154#discussioncomment-12424894 https://github.com/pypa/setuptools/discussions/4154#discussi... : [build-system] requires = ["setuptools", "cython"] [tool.setuptools] ext-modules = [ {name = "example", sources = ["example.pyx"]} # You can also specify all the usual options like language or include_dirs ]
- physicsguy 1y agoPybind11 seems more popular in my area now. I still like Cython though in terms of the ease of wrapping anything in a Python-y interface.
- maleldil 1y agoObligatory Rust + PyO3/Maturin plug. Very ergonomic and easy to use.
- physicsguy 1y agoThat's true but I still don't see that so much because the core libraries are not as mature and often they're just thin wrappers around the C/C++/Fortran API without examples. Just as an example, I'd count this SUNDAILS library as like that: https://docs.rs/sundials/0.3.2/sundials/ https://docs.rs/sundials/0.3.2/sundials/ Nothing wrong with that as a starting point of course, but it's easier just to compile it as a dependency and look at the core documentation if you're familiar with C++; you'll need to be reading the C++ examples anyway to write Rust code with it.
- pjmlp 1y agoAnd it will get even better with reflection, there are already a few talks on the matter, generating Python bindings with C++26 reflection.
- 1y ago
- Certhas 1y agoI haven't kept track of numba in recent years. But there is a clear path to translate more and more scikit-learn to mojo, bypassing the python interpreter entirely. And then things become much more composable in a way that numba can't be. We are heavily leaning on Julia, and to my mind Mojo is a major threat to the long term development of the Julia community. If people dissatisfied with Python+C(++)-Silos end up writing Mojo instead of Julia it will become even harder to grow the ecosystem and community. That said, for now Julia has a number of big strengths for scientific work that don't seem to be in the focus of the Mojo devs...
- fnands 1y agoYeah, I went to JuliaCon last year, and it was clear that Julia really seems to have found it's niche in the scientific computing world. I like the language, but as I do ML, Python is really the only game in town, and Mojo is looking promising.
- Archit3ch 1y ago> Mojo is a major threat to the long term development of the Julia community Mojo has 3 disadvantages compared to Julia: 1) The core team is focused on the Linux+servers+AI combination, because that's where the money is. 2) Less composability due to the lack of multiple dispatch. 3) The license.
- RossBencina 1y agoVery interesting. I'm currently trading off whether to use Mojo or C++/pybind to accelerate simulations that combine matrix operations with fine-grained scalar calculations. I only recently learned that pybind + cppimport offers the integrated compile-on-import experience available in Mojo.
- melodyogonna 1y agoMojo makes SIMD and GPU programming more ergonomic than what you would obtain from C++, I imagine this should factor into your decision process. The language is just less mature overall.
- fnands 1y agoI would say it depends on how stable you need the code to be. If it's something you need to put in production soon, C++/pybind might be the way to go, but if it's just a side-project, Mojo could work.
- pjmlp 1y agoDepends on how much you care to work on Windows, if not at all, then Mojo can be considered.
- pjmlp 1y ago> I think moving a lot of scikit-learn’s more computationally intensive code to Mojo could be an interesting project. Only if you want to lose access to Windows users, as it is a low priority for Mojo development.
- fnands 1y agoFair, but it would also be a multi-year project, and I wouldn't take it seriously until Mojo reaches a 1.0
- jononor 1y agoMojo is not open source, so how can it be realistic to use it in scikit-learn? We spent decades getting out of the clutches of Mathworks, Microsoft, etc. Why are people eager to go back that way?
- fnands 1y agoThey want to open-source the language, and call me naive, but I do believe that they will. The licence is a bit weird to me though. I do get it for their main product, Max, but it is a bit of a weird one for a language.