6 ms·
A rather useless listing. I don't see the point of including three dynamically typed languages with similar usage scenarios. Until Julia is battle-tested, I'd s
by stewbrew 13y ago
A rather useless listing. I don't see the point of including three dynamically typed languages with similar usage scenarios. Until Julia is battle-tested, I'd suggest to also include C++ or Java (Scala) in the toolbox. You should also be aware that you can use C++ & Java from R, R from Julia or Clojure etc. Being able to use some Java Library thus is no argument exclusively in favour of Clojure.
- nextos 13y agoI know the listing is quite useless. But I wanted to hear people's opinions on which language to use for data analysis in 2014. I'm quite fluent in R. I love some parts of the language, the breadth of packages available, and ggplot. But it's really slow and not general purpose, so I always preprocess data in Ruby. Clojure is a fantastic language, but it's data analysis story is thin. The matrix libraries are still being worked out. Incanter, which contains most basic stats routines, seems abandoned. Yet, some people like the Flightcaster guys use it, so there might be ways to work around this. Julia looks great, but I'm worried by the lack of emphasis in functional programming. Having a multi-paradigm language is great. Some things are difficult to implement outside an imperative mindset e.g., a Gibbs sampler. But functional should be the preferred option if possible. Maybe this is a wrong impression of mine. Python has all the libraries, but I've never really liked the language, and it's still quite slow.
- gajomi 13y agoI think I can understand what you mean about worrying about the lack of emphasis of functional programming in Julia, in the sense that it certainly isn't emphasized explicitly, but I wonder if your concern is more specific than that? In Julia functions are first class objects and can dispatch on subtypes of Function. There are several immutable types available. There seems to be a convention (at least within the standard library) of adding ! postfix to indicate function as having side effects. You have projects like JUMP (https://jump.readthedocs.org/en/latest/jump.html https://jump.readthedocs.org/en/latest/jump.html), which explicit revolve around declarative programming DSLs. All these things together suggest to me that Julia is supportive of functional programming. But I am only slowly wading into Julia, so I am mostly speaking from a theoretical perspective. Perhaps you can clue me in?
- nextos 13y agoWell, my comment stems from a very superficial overview of the language and some libraries. Perhaps I'm wrong. But I haven't seen any heavy usage of high-order functions or lazy data structures, and this worries me. I don't just want a fast MATLAB replacement. I want a fully-fledged multi-paradigm programming language.
- StefanKarpinski 13y agoYou're right that there isn't a particularly strong emphasis on lazy data structures or higher-order programming in Julia's base library. They are, however, both well supported and higher-order functions in particular are used in many places; Julia uses Ruby-style do blocks all over the place, and a lot of macros desugar to functional constructs. However, Julia's primary paradigm is multiple dispatch. For more details on that, you can check out this presentation I gave at Strange Loop this year: http://nbviewer.ipython.org/gist/StefanKarpinski/b8fe9dbb36c1427b9f22 http://nbviewer.ipython.org/gist/StefanKarpinski/b8fe9dbb36c... Functional style isn't something to embrace for its own sake. Lazy data structures, in particular, while elegant, require a very sophisticated compiler in order to have even remotely decent performance. Even with a sufficiently clever compiler, the performance characteristics of the resulting code tend to be extremely opaque and difficult to reason about. That said, sometimes it's a nice way to express things and it's quite possible to implement lazy data structures in Julia: see, for example, the Lazy [1] and LazySequences [2] packages. [1] https://github.com/one-more-minute/Lazy.jl https://github.com/one-more-minute/Lazy.jl [2] https://github.com/dcjones/LazySequences.jl https://github.com/dcjones/LazySequences.jl