[HN Gopher] From Julia to Rust
       ___________________________________________________________________
        
       From Julia to Rust
        
       Author : miguelraz
       Score  : 62 points
       Date   : 2021-06-05 18:05 UTC (4 hours ago)
        
 (HTM) web link (miguelraz.github.io)
 (TXT) w3m dump (miguelraz.github.io)
        
       | beforeolives wrote:
       | The most fascinating thing about this is that the author's first
       | two programming languages are Julia and Rust.
        
         | miguelraz wrote:
         | It is infrequent! Author here: I knew enough C and Fortran to
         | turn in small assignments for my physics courses, but Julia was
         | the first one where I started developing code.
        
           | zamalek wrote:
           | > Julia was the first one where I started developing code.
           | 
           | This is fantastic! I think that Julia really has unseen
           | potential for the scientific community, and even more unseen
           | potential beyond that (most of Julia conf is scientific).
           | 
           | FP also comprises of some really great habits to pick up
           | early on, I'm still trying to unlearn dumb OOP idioms (which
           | is why I'm targeting Julia as my next language).
        
       | Diggsey wrote:
       | > Rust people keep saying they have no Garbage Collector, when
       | they have a Region Based Garbage Collector.
       | 
       | Rust does not have a region based garbage collector. Memory
       | management in Rust works exactly the same as in does in C++ (ie.
       | destructors are automatically called when variables go out of
       | scope, and those destructors may deallocate memory).
       | 
       | The borrow checker is purely a check: not only does it operate
       | entirely at compile-time, it does not even influence code
       | generation. The only thing the borrow checker can do is prevent
       | code from compiling.
        
         | zamalek wrote:
         | Correctly/academically speaking, a GC emulates infinite
         | memory[1]. It's a misnomer (because the fact/name predated the
         | theory). In the event that you actually have infinite memory,
         | NOOP could be classified as a GC.
         | 
         | Academically speaking, Rust is a managed language. The GC has
         | simply been lifted to compile-time (or runtime in the case of
         | Rc). You never call `alloc` and you never call `free`.
         | 
         | [1]:
         | https://devblogs.microsoft.com/oldnewthing/20100809-00/?p=13...
        
       | hexane360 wrote:
       | As someone who dabbles in both Rust and Julia, I agree there's a
       | lot Julia can learn from Rust. Rust has made a _lot_ of good
       | technical decisions, and I think many of these decisions came
       | from having a team of experienced systems programmers. In
       | comparison, Julia 's decision making process seems much more
       | informal, and snap decisions are sometimes made from the narrow
       | perspective of academic programming rather than carefully
       | considering the goals of the language, future uses, and forwards
       | compatibility.
        
         | [deleted]
        
         | xianwen wrote:
         | I'm very interested in Rust. However, it seems that Rust is not
         | yet able to do symbolic math.
        
           | miguelraz wrote:
           | Author here: I specifically mentioned the `egg` crate because
           | of it's capabilities for symbolic math. You can check a
           | minimal application of arithmetic differentiation and some
           | simplification rules in their repo here:
           | 
           | https://github.com/egraphs-good/egg/blob/main/tests/math.rs
        
           | hexane360 wrote:
           | I'm sure there are some crates out there, but probably
           | nothing very stable.
           | 
           | If there's one thing Rust is not, it's a good "glue"
           | language. It seems to do best in large, densely coupled
           | projects. This is where there's the least cost to defining
           | all your own types, and also where a strong type system
           | provides the most benefit. I think there will always be a
           | place for more dynamic languages that tend to do better at
           | interfaces.
        
         | ForHackernews wrote:
         | I like both languages, but they seem to have extremely
         | different goals and target users to me.
         | 
         | Julia aims to be better than R and Python at statistics and
         | data analysis. It's not there yet, but I could easily see it
         | replacing a great deal of academic use of Numpy and Python in
         | Jupyter notebooks (the 'ju' is Julia).
         | 
         | On the other hand, Rust seems like it's aiming at being a safer
         | alternative to C for low-level systems programming.
         | 
         | I'm sure there's things Julia could learn from Rust, but the
         | design decisions are going to differ wildly because they just
         | aren't trying to do similar things.
        
           | awaythrowact wrote:
           | Fair. But to play devils advocate: one stated goal of Julia
           | is to solve the "two languages" problem where developers
           | prototype in {scripting language} and then reimplement in
           | {system language}. So while Julia is meant to be as easy as
           | Python, it also needs to be as powerful and flexible as Rust
           | (or C or whatever). It's supposed to be the "best of both
           | worlds" and Rust lives in one of those worlds. If developers
           | are better off prototyping in Python jupyter notebooks and
           | then reimplementing in Rust than they are implementing in
           | Julia, then I'd say the comparison is relevant. Maybe it's an
           | unfair standard and Julia can be a "better Python" without
           | needing to be a full replacement of a systems language, but
           | then Julia isn't fully solving the two language problem,
           | right?
        
             | duped wrote:
             | The two language problem exists for a bunch of reasons,
             | some good and some not.
             | 
             | The biggest reason is because some function of the high
             | level language is incompatible with the application domain.
             | Like garbage collection in hot or real-time code or
             | proprietary compilers for processors. Julia does not solve
             | these problems.
             | 
             | Other reasons are practical, like portable executables in
             | Go or Rust (portable in the sense they do not require
             | dependencies on their target systems, usually). Julia does
             | not solve this problem.
             | 
             | Then there are the reasons to use scripting languages over
             | the system languages, like expressive syntax with low
             | cognitive overhead. Julia definitely helps here. But this
             | comes at the cost of execution and startup time. Julia only
             | kind of solves this problem.
             | 
             | So if Julia is trying to make a more performance scripting
             | language then that is admirable. But for most of the
             | projects where I have needed to prototype in a script and
             | implement in a systems language, Julia would not have
             | worked.
             | 
             | Even today I don't have a good reason to use it over MATLAB
             | for day to day work, since I already have the license and
             | their ecosystem is more mature.
        
           | miguelraz wrote:
           | Yes, to explore those differences was the point of the post.
        
       ___________________________________________________________________
       (page generated 2021-06-05 23:00 UTC)