myrmidon
a year ago
Julia is a really nice language. It was one of the first modern languages I've used were "buildsystem"/package management was properly/deeply integrated from the start (like rust with cargo)-- contrast with Python, JS or C++, where there are several completely different libraries/tools to manage this with bad interoperability (and your own dependencies might only support a subset). I think in hindsight that this is a really desirable development in general.
I also feel that Julia managed to achieve "forward interoperability" between libraries that is almost unparalleled in my experience: It is often possible to just pass data structures across library boundaries, and in MANY other languages this is absolutely not the case; consider e.g. C++, where you might have like five different "Matrix" classes/types between GUI library, linear algebra package, image processing toolkit etc., and the code you write has to convert those types at every boundary by hand.
The one thing the language is bad at (but this also improved a lot over time!) is the suitability as conventional scripting language, where you run some source code through a cold-started interpreter (you get somewhat railroaded into having an open interpreter instance, that you then run your scripts on instead).
anal_reactor
a year ago
> I also feel that Julia managed to achieve "forward interoperability" between libraries that is almost unparalleled in my experience: It is often possible to just pass data structures across library boundarie
Never coded in Julia, how does this work?
myrmidon
a year ago
Caveat: This is in my view not just a technical achievement, it also works because some library authors play nice. And because things where standardized from the get-go, instead of evolving organically/provided much later by users.
I think the main thing that Julia gets right is that there are de-facto standardized interfaces for a lot of things that are actually followed/used.
E.g. in C++ on the other hand, you have a bunch of libraries that bring their own primitives, like all the Matrix classes-- their is no interface for those, and even if their was, it would be a pita to write C++ code that was able to work with a bunch of difference primitives here. So the problem is not only that it would be a lot of work to write C++ code to be "primitive-agnostic" (=> you would basically have to soak your codebase in templates), there are not even common expectations for you to build upon (like: does a matrix class provide rowncnt()? or rowCount()? or size(1)?, or nrow()? => if there is no common ground not even extensive template magic is gonna save your day).
Julia also makes it super easy to write type-agnostic code in general ("dynamically typed"), which is simply not the default and/or extra effort in many other languages.
phi-go
a year ago
There is a talk on how this is possible due to multiple dispatch: https://www.youtube.com/watch?v=kc9HwsxE1OY
pjmlp
a year ago
Perl started that with CPAN.