Catch up on stories from the past week (and beyond) at the Slashdot story archive

 



Forgot your password?
typodupeerror
×
Programming Open Source

Julia 1.0 Released After a Six-Year Wait (insidehpc.com) 131

An anonymous reader quotes InsideHPC: Today Julia Computing announced the Julia 1.0 programming language release, "the most important Julia milestone since Julia was introduced in February 2012." As the first complete, reliable, stable and forward-compatible Julia release, version 1.0 is the fastest, simplest and most productive open-source programming language for scientific, numeric and mathematical computing. "With today's Julia 1.0 release, Julia now provides the language stability that commercial customers require together with the unique combination of lightning speed and high productivity that gives Julia its competitive advantage compared with Python, R, C++ and Java."
The Register reports: Created by Jeff Bezanson, Stefan Karpinski, Viral Shah, and Alan Edelman, the language was designed to excel at data science, machine learning, and scientific computing.... Six years ago, Julia's creators framed their goals thus:

"We want a language that's open source, with a liberal license. We want the speed of C with the dynamism of Ruby. We want a language that's homoiconic, with true macros like Lisp, but with obvious, familiar mathematical notation like Matlab. We want something as usable for general programming as Python, as easy for statistics as R, as natural for string processing as Perl, as powerful for linear algebra as Matlab, as good at gluing programs together as the shell. Something that is dirt simple to learn, yet keeps the most serious hackers happy. We want it interactive and we want it compiled...."

In a julialang.org post announcing the milestone, the minders of the language claim to have achieved some of their goals.

This discussion has been archived. No new comments can be posted.

Julia 1.0 Released After a Six-Year Wait

Comments Filter:
  • by 110010001000 ( 697113 ) on Saturday August 11, 2018 @12:37PM (#57107490) Homepage Journal
    This is really impressive from the technical standpoint, but I am wondering if they have a Code of Conduct for the language?
    • by Tough Love ( 215404 ) on Saturday August 11, 2018 @12:53PM (#57107558)

      I am wondering if they have a Code of Conduct for the language?

      This language is polite and respectful.

    • This is really impressive from the technical standpoint, but I am wondering if they have a Code of Conduct for the language?

      The main requirement in the code of conduct is that you must be willing to accept and respect homoiconic activity.

    • a Code of Conduct for the language?

      They used to have one, and strings were only allowed to use valid, legal, properly enumerated Unicode. But they abandoned that because it didn't really allow for remediation.

      Now they simply flag offensive strings, and leave it up to the application programmer to remediate.

      So if you're using Julia you will need to write your own code that conducts invalid Unicode to the appropriate remedial function. Or not.

  • Therefore it's slow like Java and Python. That's not a bad thing if your app is I/o bound or quick development time is more of a priority.

    But it failed it's goal of overtaking Java and Python if it's JIT compiled as you might as well use them instead

    • by Tough Love ( 215404 ) on Saturday August 11, 2018 @12:57PM (#57107568)

      Didn't RTFM? Julia has several backends including LLVM. Performance is more than respectable. [julialang.org] In particular, puts Python to shame and close to Java + JIT but without the JIT lag, load time and memory footprint annoyance.

      • It does look respectable but that graph isn't the full story, is it? In my field we use a lot of Python and MATLAB (also some R). Python can be sped up with Cython (often dramatically). MATLAB makes it easy to integrate C or C++ via MEX files. If you were using one of those languages and really needed to speed up the sorts of things being profiled in the Julia benchmarks then you have a simple way of doing it. Usually you're just optimising an inner loop and can leave the rest of the code unchanged. In prac

    • by SQL Error ( 16383 ) on Saturday August 11, 2018 @12:58PM (#57107574)

      It's natively compiled, just not statically compiled.

      If compiles optimised versions of your functions as needed. So you can define a function that works on any supported numeric type, and when you call it with doubles, it will compile and cache a version of the code optimised specifically for doubles.

      As a result, it is very fast for numeric code, without having to create separate function definitions for each supported type.

      • I think that's called a "specializing compiler", like Psco/PyPy but not JIT. I don't juch like JITs, actually. A good fit for LISP but not much else.

      • by johanw ( 1001493 )

        You mean it has a template library? C++ has that for as long as I can remember.

        • by Megol ( 3135005 )

          Templates are fine (for some definition of fine) for static type systems where types can be decided and code specialized at compile time.
          Julia is however dynamic and uses different mechanism.

        • No, it doesn't use a template library. Or in a sense, all your code is templates.

    • It is a lot more like Perl; it runs fast, and you can write it fast too. But reading it is going to take time.

      That tradeoff isn't going to go away, it is baked into the range of problems we want to solve with the same tool. The less verbose the language is, the more of the complexity is hidden. That makes it expert-friendly, but it also makes collaboration more difficult.

      I prefer the Ruby solution; it can't do everything. Lots of stuff that is hard you would write in C instead. And it has an excellent C int

    • by nadass ( 3963991 )

      Except this is a HPC programming language, not a one-size-fits-all HTML5-style standard.

      • by Junta ( 36770 ) on Saturday August 11, 2018 @01:21PM (#57107668)

        Roughly, one should think of this more as a 'next gen fortran' than 'oh this will replace all your programming'.

        Python with numpy has been respectable, but there's room for a language built from the ground up around technical computing.

      • by Desler ( 1608317 )

        We want something as usable for general programming as Python, as easy for statistics as R, as natural for string processing as Perl, as powerful for linear algebra as Matlab, as good at gluing programs together as the shell.

        Sounds like a one-size-fits-all attempt to me.

        • by Junta ( 36770 )

          I say the larger content seems to be clearly oriented around scientific computing.

          There is a fair amount of ill-advised 'marketing' sort of propaganda that is misleading in their pages however, which is unfortunate as I think the core goal and how they go about it seems respectable enough.

  • by Megol ( 3135005 ) on Saturday August 11, 2018 @01:01PM (#57107590)

    Otherwise claiming "Julia is the only high-level language that has run at petascale" is a bit of an exaggeration.

  • First impression (Score:5, Interesting)

    by Tough Love ( 215404 ) on Saturday August 11, 2018 @01:06PM (#57107610)

    My first impression of Julia was favorable. I fired up the command line interpreter and typed in 2 + 2. Prints out 4, just like Python. Then typed in 2**4:

    julia> 2**4
    ERROR: syntax: use "^" instead of "**"

    Wow, I like that. I managed to define a function, f(n) = n * n, without reading the manual but didn't get much further without reading the docs docs. But great start, I already see this as a reasonable alternative to what I usually use Python for: a desktop calculator.

    Initial impression matters. Now, with a postive one, I will go deeper and see if Julia is really what I should be coding one-offs in, instead of Python or Go.

  • Woot! (Score:2, Insightful)

    by Anonymous Coward

    I want a tool that puts nails in like a hammer, screws screws like a screwdriver, lifts steel like a crane, cuts wood like a saw, digs dirt like a backhoe, shoots animals like a gun, stabs children like a knife...

    • Re: (Score:2, Funny)

      by Tough Love ( 215404 )

      Here, take these handcuffs.

    • It is called your imagination, and you're already using it!

    • by Anonymous Coward

      You mean like a backhor with a quick attachment system? They make attachments for sawing wood/trees, screwing augers, putting in large nails (mainly for soil reinforcement), lifting stuff, digging. You might need duct tape to attach a knife, but it would still be stabby.

  • Cheat sheet (Score:5, Informative)

    by Tough Love ( 215404 ) on Saturday August 11, 2018 @01:19PM (#57107658)

    Cheat sheet [github.io]

  • by Tough Love ( 215404 ) on Saturday August 11, 2018 @01:31PM (#57107712)

    Good or bad? Hard to say, but I would rather have these things than not. It is currently the fashion to leave out classes and provide similar functionality with interfaces or equivalent, but I find that a sticking point. Let's see how it goes.

    There are situations where goto is far preferable to fiddling with local logic variables and such. Sure, goto can be tricky to implement with respect to local scope and such, but leaving it out to avoid work... doubtful. Leaving out goto for purity reasons... beyond doubtful.

    • by dlakelan ( 43245 ) <dlakelan&street-artists,org> on Saturday August 11, 2018 @01:44PM (#57107742) Homepage

      Classes are definitely included in the language. Specifically they're included by strong typing and type-specialized functions. A type specialized function is a "class method" that dispatches on more than just the first (usually implicit) argument.

      Goto is implemented via the @goto macro.

      • by Tough Love ( 215404 ) on Saturday August 11, 2018 @01:57PM (#57107776)

        Classes are definitely included in the language.

        Julia has no classes [github.io]

        It does have compound types and extensible types (subtypes). Instead of class methods it has parametric polymorphism, a flavor of generics somewhat resembling interfaces. While this seems nice and natural as far as it goes, I am not sure how far it goes. Jury is out.

        I absolutely hate the case conventions for identifiers. Why does every language of the month need to come with at least one blatantly stupid, avoidable idiocy guaranteed to trigger a large proportion of its intended audience? This is a minor thing but not something I could ever used to. A prime candidate for "sorry that was dumb, let's just fix it now before it festers".

        At least, no significant indents, thanks for that.

        • Re: (Score:3, Interesting)

          by Aighearach ( 97333 )

          Why does every language of the month need to come with at least one blatantly stupid, avoidable idiocy guaranteed to trigger a large proportion of its intended audience?

          Because having neckbearded snowflakes whining about their tender technical opinions doesn't actually help the language designers with any part of what they're doing. It doesn't solve technical problems, it doesn't encourage adoption, it doesn't even produce useful criticisms. If you make sure to include some aesthetics from different camps and mix them together in an innocuous way, you can make nearly everybody go "ewwww" a little bit, and then the ones who freak out will escort themselves out the door. It

          • Because having neckbearded snowflakes blah blah dribble woof...

            Wow, great job contributing to the conversation. Your dog beats you or what?

            • Well, I understand that you take those words personally, and so are offended, but what else did your comment add? My comment was clearly directed at anybody reading, and attempted to explain the matter.

              Your reply doesn't contain any substantive content at all; it isn't even directed at the general readership, but instead seems to be a personal response. And yet, it contains no information that could be useful to me. You didn't even think to include anything more than, "I'm triggered by the word neckbeard."

              • I understand that you take those words personally, and so are offended

                You conflate others "being offended" with you "being offensive".

    • by Misagon ( 1135 ) on Saturday August 11, 2018 @01:58PM (#57107778)

      The instances where goto is useful can often be boiled down to a few different cases.
      IMHO it would be better to have specific language support for those cases than a generic statement. Having a generic goto (or even only a break label-statement) would encourage it to be used for things that it wasn't intended for, and such code would not be as readable.

      * Breaking out of nested loops. Something like break label or multibreak number.
      * Clause after a loop has reached its end and not broken. Python reuses else for this.
      * Error handling: A type of exception handling. It could be simplified by using labels instead of throwing and catching objects of specific types.

      • Julia has a goto macro, I like the idea but have not yet tried it. If it works (I don't see why it should not) then nice solution.

        • Well, surprise, the @goto macro has oddball limitations, never mind the ugly punctuation. Just give me a real goto without the awkward half measure please, thanks.

          • You can't have an unrestricted goto and also good support for distributed computing. Did nobody tell you that they're ambitious, and they want their language to be usable on hard problems?

            You can't have a Real Goto with a portable language anyways; the language must restrict it to the lowest common denominator, because different CPUs have different types of JMP variants available. Not even C can give you a generic version that is unrestricted.

            • You can't have an unrestricted goto and also good support for distributed computing.

              Nice handwave. I suppose you win whatever argument this is by having your own private defintion of "unrestricted". And even then you are most probably full of crap.

      • by Anonymous Coward

        You missed out finite state machines

      • by Anonymous Coward

        > Having a generic goto (or even only a break label-statement) would encourage it to be used for things that it wasn't intended for, and such code would not be as readable.

        Goto is not the problem. When you see a goto it is perfectly clear what happens. The problem is the label. When reading code and there is a label then, suddenly, the flow of control is broken. It is no longer clear what the control flow is. The label indicates that processing may arbitrarily appear at that point and it will require an

    • Until branches of mathematics starts using classes and gotos in their theorems, they probably aren't useful in a language for doing mathematics.
      • Until branches of mathematics starts using classes and gotos in their theorems, they probably aren't useful in a language for doing mathematics.

        I know, right? That's why Julia doesn't have exceptions, modules, macros or coroutines. Oh wait.

        • As other people have pointed out, Julia already has things specific to it that fit the role of classes, that have mathematical analogues, without being like classes. And given that you have all those other features, like coroutines which are a better form of goto, why are you whining?
          • As other people have pointed out, Julia already has things specific to it that fit the role of classes, that have mathematical analogues, without being like classes

            How insightful. Yes Julia has things that are somewhat like shitty classes.

            features, like coroutines which are a better form of goto, why are you whining?

            Why are you an ass? Civil discourse does not use words like "whining". And if you think that coroutines are a form of goto then you are stupid too.

            • How about you learn to break out of needing classes for everything? Just because you're a shitty programmer who can't make head or tail of a different kind of programming doesn't mean all languages need to cater for the lowest common denominator. Not everything needs to be "object oriented" so idiots like you can understand it.

              If you don't think coroutines aren't a form of goto, then maybe consider you need to learn more. goto is a limited and poor form of flow control for "jumping" in an out of certain
            • Yes Julia has things that are somewhat like shitty classes.

              NBG set theory has classes. Java, C++, C#, and everything else descended from Simula has shitty things that are kind of like classes but not really.

              Haskell typeclasses and C++ "concepts" (which aren't in the language yet) are much closer to mathematical classes.

  • Plotting is Broken (Score:2, Interesting)

    by Anonymous Coward

    For a technical computing language, One of the major overnights was plotting. It is a mess. There were about 6 different plotting libraries, each with different interface. The most popular was to install python and use Matplotlib.

    There has been an attempt to wrap all of them up into plots.jl but you end up with something that never quite covers what you need.

    It also uses array indexa starting from 1......

    • Yes it does have 1-based indexing. But then it's a language made by mathematicians, and like most of them (Fortran, Matlab, Octave, R, Maple, Mathematica) they usually index from 1. There are pros and cons, but ultimately it's just down to personal preference (personally I prefer 1-based indexing).

      However Julia does support arbitrary starting indices, whether it's from 0, or say you wanted to index by year and start from 1960. It's not something I've tried, but I watched a presentation on it once and it see

  • Until it has a third party module for every conceivable thing you might want to do, I'm not dropping Python. I'll pop back in 10 years and check it out :)
    • Julia isn't a replacement for Python. Julia is a replacement for Fortran.

      Numpy is a poor replacement for Fortran.

  • "We want a language that's open source with a liberal license..."

    I'm not a programmer, and I can easily prove that if necessary.

    Are there programming languages with restrictive licenses? What sorts of jobs would you be unable to do because of those licenses?

    • They're just language designers, why should they be expected to have narrowly parsed understanding of the words they use?! LOL

      Java would be an example of a language with restrictive IP conditions that is limiting its adoption. You can still do smart phone apps, and internal tools you're not distributing outside the company.

    • The "language" consists of the compiler (the contents of src/), most of the standard library (base/), and some utilities (most of the rest of the files in this repository).

      https://github.com/JuliaLang/j... [github.com]

      Probably someone watching Oracle asserting ownership of the Java base classes. Use was allowed, but not alterations or compatible implementations.

  • by ezakimak ( 160186 ) on Saturday August 11, 2018 @02:35PM (#57107920)

    A leprechaun riding atop a unicorn handing out buckets of gold.

    If they pull it all off in a single language, more power to them.

  • by ooloorie ( 4394035 ) on Saturday August 11, 2018 @04:25PM (#57108490)

    The multithreading support in Julia 1.0 still says "experimental". So does it have usable threads or not? How good is the thread implementation? Comparable to Java? To C++? Are the standard data structures thread safe? How many spurious locks are there?

  • I would like to hear from people who switched from the more mainstream numpy and tensorflow for linear algebra.. to Julia.
    What were your experiences? Was the worflow much more productive? What were the other gains?

"The one charm of marriage is that it makes a life of deception a neccessity." - Oscar Wilde

Working...