Perhaps already discussed–but if so I can’t find it–can we add a category for topics about migration to Julia from other languages like Python and MATLAB, and perhaps subcategories for the different languages being migrated from?
After noting the differences, isn’t porting mostly about learning Julia in general?
Or do you mean discussions for those considering switching to Julia?
It’s both, I think. The differences page is very useful but necessarily limited to the core language. I agree that it is sufficient to work out the changes one would need to make to modify a given small piece of e.g. MATLAB code to be Julia. However, for larger projects the core language differences are probably a minor consideration as compared to architectural issues and libraries/toolboxes usage, in terms of the amount of time and care one would need to take in the migration.
What’s behind my post is a question I have about how MATLAB functionality (in particular, but the same questions could apply for all other languages) maps to equivalent functionality in Julia, because I would like to evaluate the suitability of a migration from one to the other (migration in terms of converting existing code and/or new work). In general a project currently implemented in MATLAB will make use of:
- In every case, core language constructs: array construction and indexing, control flow, data structures, exception handling, etc.
- In many cases, core special-purpose but in-built functionality included in every installation of MATLAB (plotting tools, functions like
randn, and so on.
- In fewer, but often very crucial, cases functionality requiring toolboxes, e.g.
tffrom the control systems toolbox,
flat2llafrom the aerospace toolbox, etc.
- Software engineering related functionality: package management, integration with build systems, testing frameworks, deployment considerations, etc.
The differences page you link to covers at least some of #1, though it doesn’t supply a complete mapping between Julia and the other languages, just those that are ‘noteworthy’ which is of course subjective. Individual Julia package documentation, as good as it often is, covers #2 but more rarely by direct comparison with other languages, and generally much less so for #3 and #4, at least in my limited experience to date.
Part of the reason that I’ve somewhat reluctantly recommended using MATLAB at all, and also recommended purchasing its toolboxes, is that the hourly rate of engineers is high, and engineering managers need them solving problems today, not in a few weeks or months after they’ve replicated all the necessary functionality that their employers could just buy right now. Evidently this same story has been playing out in small engineering teams in thousands of companies (MathWorks’ revenue was $900 million in 2017). If there were not barriers to pooling our efforts–some of which are technological but many of which are more due to the nature of business–then by now you’d have at least seen many or most of the toolboxes be replaced by open source equivalents, and indeed the core language.
But look how far Octave has (not) come in 30 (!) years. That’s why Julia is so interesting – despite it being relatively young it not only has a great core language but there are already many available packages of remarkable quality. Still, it’s not at all clear that the time for it to be a viable option to completely replace MATLAB (or Python or R or…) has come. In part that’s simply because to make that determination one has to do a lot of online searching while at the same time things are rapidly changing.
What I’ve been thinking about doing, though haven’t yet found the time to do, is to create some kind of resource that lessens the need for this extensive and ongoing searching by crowdsourcing what would be effectively, a centralized repository containing the results of these searches. The reason I asked the question about the Discourse category was I wonder if such a resource might already be in the works somewhere and I wouldn’t want to duplicate efforts but rather combine them, and there didn’t seem to be an existing category for something like that.
To be concrete what I’ve been thinking about is something like a wiki, or maybe just a github repo, that in some organized fashion captures this kind of information. So e.g. if someone uses a lot of the Optimization Toolbox then they can look at a section for that and see what functions have an equivalent, with links to the package(s) where the functions are found. I’d be very happy to start this, assuming there isn’t instead a similar effort already which I should just contribute to instead.
The closest thing is the Usage category with the First Steps subcategory. It might make sense to adda a subcategory about moving from a different language, but it is still about getting up to speed. We could have a permanently pinned post in usage that is a wiki about moving from different languages
It doesn’t look like my profile can create wiki posts, but if I’m not mistaken wiki posts on Discourse can have multiple pages which I think will be required to capture the amount of information I’d expect will be needed. I think I’ll start with a GitHub wiki. Once the structure is set up I’ll link to it here.
I think it could still be worthwhile having the subcategory. How do new subcategories get created?