19 ms·
There's also Julia. Earlier in my career, I found that my employers would often not buy Matlab licenses, or would make everyone share even when it was a resour
by lemonwaterlime 9mo ago
There's also Julia.
Earlier in my career, I found that my employers would often not buy Matlab licenses, or would make everyone share even when it was a resource needed daily by everyone. Not having access to the closed-source, proprietary tool hurt my ability to be effective. So I started doing my "whiteboard coding" in Julia and still do.
- fph 9mo agoPrecisely; today Julia already solves many of those problems. It also removes many of Matlab's footguns like `[1,2,3] + [4;5;6]`, or also `diag(rand(m,n))` doing two different things depending on whether m or n are 1.
- drnick1 9mo agoI don't think Julia really solves any problems that aren't already solved by Python. Python is sometimes slower (hot loops), but for that you have Numba. And if something is truly performance critical, it should be written or rewritten in C++ anyway. But Julia also introduces new problems, such as JIT warmup (so it's not really suitable for scripting) and is still not considered trustworthy: https://yuri.is/not-julia/ https://yuri.is/not-julia/
- nallana 9mo agoIn Julia, you explicitly need to still reason about and select GPU drivers + manage residency of tensors; in RunMat we abstract that away, and just do it for you. You just write math, and we do an equivalent of a JIT to just figure out when to run it on GPU for you. Our goal is to make a runtime that lets people stay at the math layer as much as possible, and run the math as fast as possible.
- sundarurfriend 9mo agoAs your comment already hints at, using Python often ends up a hodgepodge of libraries and tools glued together, that work for their limited scope but show their shaky foundations any time your work is outside of those parts. Having worked with researchers and engineers for years on their codebases, there is already too much "throw shit at the wall and see what sticks" temptation in this type of code (because they'd much rather be working on their research than on the code), and the Python way of doing things actively encourages that. Julia's type hierarchies, integrated easy package management, and many elements of its design make writing better code easier and even the smoother path. > I don't think Julia really solves any problems that aren't already solved by Python. I don't really need proper furniture, the cardboard boxes and books setup I had previously "solved" the same problems, but I feel less worried about random parts of it suddenly buckling, and it is much more ergonomic in practice too.
- wolvesechoes 9mo ago> using Python often ends up a hodgepodge of libraries and tools glued together At least it has those tools and libraries, what cannot be said about Julia.
- forgotpwd16 9mo agoWhat tools/libraries you miss from Julia? Have you used the language or merely speculating?
- wolvesechoes 9mo ago> What tools/libraries you miss from Julia? My experience with this website is that it would be rather pointless to enumerate, because you will then point to some poorly documented, buggy and supporting fraction of features Julia "alternatives" to Python packages or APIs that are developed and maintained by well-resourced organizations. The same thing for tooling - unstable, buggy Julia plugin for VSCode is not the same as having products like PyCharm and official Python plugins made by Microsoft for VS and VSCode. Now, I will admit that Julia also has some niceties that would be hard to find in Python ecosystem (mainly SciML packages), but it is not enough. > Have you used the language or merely speculating? I just saw the logo in Google Images.
- SatvikBeri 9mo ago> Python is sometimes slower (hot loops), but for that you have Numba This is a huge understatement. At the hedge fund I work at, I learned Julia by porting a heavily optimized Python pipeline. Hundreds of hours had gone into the Python version – it was essentially entirely glue code over C. In about two weeks of learning Julia, I ported the pipeline and got it 14x faster. This was worth multiple senior FTE salaries. With the same amount of effort, my coworkers – who are much better engineers than I am – had not managed to get any significant part of the pipeline onto Numba. > And if something is truly performance critical, it should be written or rewritten in C++ anyway. Part of our interview process is a take-home where we ask candidates to build the fastest version of a pipeline they possibly can. People usually use C++ or Julia. All of the fastest answers are in Julia.
- sbrother 9mo ago> People usually use C++ or Julia. All of the fastest answers are in Julia That's surprising to me and piques my interest. What sort of pipeline is this that's faster in Julia than C++? Does Julia automatically use something like SIMD or other array magic that C++ doesn't?
- adgjlsfhk1 9mo agoThe main thing is just that Julia has a standard library that works with you rather than working against you. The built in sort will use radix sort where appropriate and a highly optimized quicksort otherwise. You get built in matrices and higher dimensional arrays with optimized BLAS/LaPack configured for you (and CSC+structured sparse matrices). You get complex and rational numbers, and a calling convention (pass by sharing) which is the fast one by default 90% of the time instead of being slow (copying) 90% of the time. You have a built in package manager that doesn't require special configuration, that also lets you install GPU libraries that make it trivial to run generic code on all sorts of accelerators. Everything you can do in Julia you can do in C++, but lots of projects that would take a week in C++ can be done in an hour in Julia.
- jakobnissen 9mo agoI use Rust instead of C++, but I also see my Julia code being faster than my Rust code. In my view, it's not that Julia itself is faster than Rust - on the contrary, Rust as a language is faster than Julia. However, Julia's prototyping, iteration speed, benchmarking, profiling and observability is better. By the time I would have written the first working Rust version, I would have written it in Julia, profiled it, maybe changed part of the algorithm, and optimised it. Also, Julia makes more heavy use of generics than Rust, which often leads to better code specialization. There are some ways in which Julia produces better machine code that Rust, but they're usually not decisive, and there are more ways in which Rust produces better machine code than Julia. Also, the performance ceiling for Rust is better because Rust allows you to do more advanced, low level optimisations than Julia.
- MillironX 9mo ago> I don't think Julia really solves any problems that aren't already solved by Python. But isn't the whole point of this article that Matlab is more readable than Python (i.e. solves the readability problem)? The Matlab and Julia code for the provided example are equivalent[1]: which means Julia has more readable math than Python. [1]: Technically, the article's code will not work in Julia because Julia gives semantic meaning to commas in brackets, while Matlab does not. It is perfectly valid to use spaces as separators in Matlab, meaning that the following Julia code is also valid Matlab which is equivalent to the Matlab code block provided in the article. X = [ 1 2 3 ]; Y = [ 1 2 3; 4 5 6; 7 8 9 ]; Z = Y * X'; W = [ Z Z ];
- forgotpwd16 9mo agoThis snippet is also cleaner than one in article and more in spirit. Also the image next to whiteboard has a no-commas example.
- forgotpwd16 9mo ago>I don't think Julia really solves any problems that aren't already solved by Python. You read the article that compares MATLAB to Python? It's saying MATLAB, although some issues exist, still relevant because it's math-like. GP points out Julia is also math-like without those issues.
- kelipso 9mo agoSometimes slower? No, always slower. And no one wants to deal with the mess that is creating an interface with C or C++. And I wouldn’t want to code in that either, way too much time, effort, headache.
- jakobnissen 9mo agoYes, Python code is indeed fast if you write it in C++... what a bizarre argument. The whole selling point of Julia is that I can BOTH have a dynamic language with a REPL, where I can redefine methods etc, AND that it runs so fast there is no need to go to another language. It's wild what people get used to. Rustaceans adapt to excruciating compile times and borrowchecker nonsense, and apparently Pythonistas think it's a great argument in favor of Python that all performance sensitive Python libraries must be rewritten in another language. In fairness, we Julians have to adapt to a script having a 10 second JIT latency before even starting...
- wolvesechoes 9mo ago> Pythonistas think it's a great argument in favor of Python that all performance sensitive Python libraries must be rewritten in another language. It is, because usually someone already did it for them.
- jakobnissen 9mo agoThat's fair - if you work in a domain where you can solve your problems by calling into existing C libraries from Python, then Python's speed is indeed fine.
- hatmatrix 9mo agoAn understated advantage of Julia over MATLAB is the use of brackets over parentheses for array slicing, which improves readability even further. The most cogent argument for the use of parentheses for array slicing (which derives from Fortran, another language that I love) is that it can be thought of as a lookup table, but in practice it's useful to immediately identify if you are calling a function or slicing an array.
- freehorse 9mo agoWhy is the `[1,2,3] + [4;5;6]` syntax a footgun? It is a very concise, comprehensible and easy way to create matrices in many cases. Eg if you have a timeseries S, then `S - S'` gives all the distances/differences between all its elements. Or you have 2 string arrays and you want all combinations between the two. The diag is admittedly unfortunate and it has confused me myself, it should actually be 2 different functions (which are sort of reverse of each other, weirdly making it sort of an involution).
- BobbyTables2 9mo agoWhat does it even mean to add a 1x3 matrix to a 3x1 matrix ?
- freehorse 9mo agoThis is about how array operations in matlab work. In matlab, you can write things such as >> [1 2 3] + 1 ans = [2 3 4] In this case, the operation `+ 1` is applied in all columns of the array. In this exact manner, when you add a (1 x m) row and a (n x 1) column vector, you add the column to each row element (or you can view it the other way around). So the result is as if you repeat your (n x 1) column m times horizontally, giving you a (n x m) matrix, do the same for the row vertically n times giving you another (n x m) matrix, and then you add these two matrices. So basically adding a row and a column is essentially a shortcut for repeating adding these two (n x m) matrices (and runs faster than actually creating these matrices). This gives a matrix where each column is the old column plus the row element for that row index. For example >> [1 2 3] + [1; 2; 3] ans = [2 3 4 3 4 5 4 5 6] A very practical example is, as I mentioned, getting all differences between the elements of a time series by writing `S - S'`. Another example, `(1:6)+(1:6)'` gives you the sums for all possible combinations when rolling 2 6-sided dice. This does not work only with addition and subtraction, but with dot-product and other functions as well. You can do this across arbitrary dimensions, as long as your input matrices non-unit dimensions do not overlap.
- quietbritishjim 9mo agoIt means the same thing in MATLAB and numpy: Z = np.array([[1,2,3]]) W = Z + Z.T print(W) Gives: [[2 3 4] [3 4 5] [4 5 6]] It's called broadcasting [1]. I'm not a fan of MATLAB, but this is an odd criticism. [1] https://numpy.org/devdocs/user/basics.broadcasting.html#general-broadcasting-rules https://numpy.org/devdocs/user/basics.broadcasting.html#gene...
- constantcrying 9mo agoJulia competes with the scientific computing aspect of matlab, which is easily the worst part of matlab and the one which the easiest to replace. Companies do not buy matlab to do scientific computing. They buy matlab, because it is the only software package in the world where you can get basically everything you ever want to do with software from a single vendor.
- moregrist 9mo agoIn addition: Simulink, the documentation (which is superb), and support from a field application engineer is essentially a support contract and phone call away. I say this as someone who’d be quite happy never seeing Matlab code again: Mathworks puts a lot of effort into support and engineering applications.
- wolvesechoes 9mo agoIt is hard to explain that to people here.
- dcanelhas 9mo agoI remember the pitch for Julia early on being matlab-like syntax, C-like performance. When I've heard Julia mentioned more recently, the main feature that gets highlighted is multiple-dispatch. https://www.youtube.com/watch?v=kc9HwsxE1OY https://www.youtube.com/watch?v=kc9HwsxE1OY I think it seems pretty interesting.
- shiroiuma 9mo agoJulia is actually faster than C for some things.
- deleted 9mo ago[deleted]
- a-dub 9mo agojulia is still clunky for these purposes! you can't even plot two things at the same time without it being weird and there's still a ton of textual noise when expressing linear algebra in it. (in fact, i'd argue the type system makes it worse!) matlab is like what it would look like to put the math in an ascii email just like how python is what it would look like to write pseudocode and in both cases it is a good thing.
- gmadsen 9mo agosimulink is the matlab moat ,not just general math expression
- finbarr1987 9mo agoPictorus is a simulink alternative https://www.pictor.us/simulink-alternative https://www.pictor.us/simulink-alternative
- deleted 9mo ago[deleted]