[HN Gopher] Gleam 0.14 - type-safe language for the Erlang VM
       ___________________________________________________________________
        
       Gleam 0.14 - type-safe language for the Erlang VM
        
       Author : lpil
       Score  : 121 points
       Date   : 2021-02-18 21:16 UTC (1 hours ago)
        
 (HTM) web link (gleam.run)
 (TXT) w3m dump (gleam.run)
        
       | macintux wrote:
       | My list of alternative languages for the Erlang VM:
       | 
       | https://gist.github.com/macintux/6349828#alternative-languag...
        
       | dnautics wrote:
       | it's cool that gleam emits typespecs. After tooling around
       | implementing type analysis in Elixir, I do have a personal take
       | that dialyzer typespecs are broken, maybe we should convene a
       | group in the erlef to coordinate towards improving the
       | typesystem.
        
         | lpil wrote:
         | The limitations of Dialyzer and typespecs were a big motivator
         | for creating Gleam. They were not reliable or fast enough for
         | my taste.
         | 
         | There is some work being done towards better types for Erlang,
         | as well as sharing types between languages on the BEAM. I'm
         | excited to see what comes in future.
        
           | rubyn00bie wrote:
           | Do you have any links where I could read up on the work being
           | done for type sharing? Sounds awesome to me.
        
             | dnautics wrote:
             | I don't know if this counts as "publishing" but I've made
             | several videos on my personal gripes (warning, super wonky,
             | super BEAM-specific), with accompanying code for a type
             | system that 'fixes' the problems.
             | 
             | https://www.youtube.com/watch?v=_XSRsYSwNpQ
             | 
             | https://youtu.be/VynXxiXPmG8
             | 
             | https://youtu.be/2ooSWOCBTPQ
             | 
             | https://youtu.be/qv-GR4sEsd4
        
               | lpil wrote:
               | This is the first time I've come across your work! Very
               | cool stuff.
        
               | dnautics wrote:
               | thanks! work on my typechecker has slowed recently due to
               | excitement with nerves + zig, and then nx + zig, so my
               | plan is to do a bit more work with the typesystem
               | starting next week.
        
             | lpil wrote:
             | I don't think anything has been published yet. It's very
             | much in the early ideas stage, but there's a couple private
             | mailing lists with some discussion going on.
        
         | jaegerpicker wrote:
         | Agreed, I loved working in Elixir but hated the typespecs. Felt
         | like it was a lot of work for only a little benefit. It's not
         | typing that I don't like but the way it's implemented in Elixir
         | felt like it was very hard to get correct quickly. Very fiddly
         | and time consuming. About the 10th time Dialyzer broke the
         | build for no easily discernible reason, I wanted to scrap it.
        
           | dnautics wrote:
           | I wouldn't go so far as to say they aren't useful. I find
           | dialyzer is not awful at finding mistakes that I make.
           | 
           | I have thought about this a _lot_ (I 'm writing a static
           | typechecking library for Elixir) and really the problem is
           | the dialyzer typesystem. Almost all of the problems stem from
           | the root fact that there isn't a granular concept of how to
           | treat functions in the type system. What does `(int, int) ->
           | int` mean? Dialyzer does not have a good answer for that
           | question.
           | 
           | Mind you I am not a "PL theory" type of guy, I do have a math
           | degree, but my PhD is in the sciences, so I am more
           | approaching this issue from a "discovering what would be
           | truly useful" perspective more than "applying an existing
           | typesystem to the BEAM", which is I think in line with the
           | traditional pragmatism of the BEAM ecosystem.
        
             | lpil wrote:
             | > What does `(int, int) -> int` mean?
             | 
             | This is an interesting question. Do you have any thoughts
             | on what a better answer to that question might mean? Or
             | languages you think do better here? Thank you
        
               | dnautics wrote:
               | Here's my thought:
               | 
               | let's go with a simpler one: int -> int
               | 
               | "I guarantee that if you send me an int then i will
               | return you an int without crashing"
               | 
               | In elixirland: `IO.inspect/1` would satisfy this, as
               | would `Kernel.-/1`. The interesting thing is that `any ->
               | int` is then a _subtype_ of `int - > int` and we need a
               | new type `_ -> int` which is "any one-arity function that
               | emits int".
               | 
               | Then types become a statement of "resistance to crashing"
               | in the BEAM vm, which I think is the useful thing that
               | people are looking for.
               | 
               | I don't have answers to everything; I don't know how to
               | deal with a function that generates random numbers from 1
               | to 20 and crashes on 13, for example.
               | 
               | We should have a discussion about this! I'll reach out on
               | another channel.
        
       | dang wrote:
       | If curious see also
       | 
       |  _Gleam: A statically typed language for the Erlang VM_ -
       | https://news.ycombinator.com/item?id=22902462 - April 2020 (109
       | comments)
       | 
       |  _An interview with the creator of Gleam: an ML like language for
       | the Erlang VM_ - https://news.ycombinator.com/item?id=19547418 -
       | April 2019 (0 comments)
        
       ___________________________________________________________________
       (page generated 2021-02-18 23:00 UTC)