Skip Navigation

Exploring Gleam, a type-safe language on the BEAM!

7
Hacker News @lemmy.smeargle.fans bot @lemmy.smeargle.fans
BOT
Exploring Gleam, a type-safe language on the BEAM
7 comments
  • I mean that's pretty neat, but I'm reminded of that time a MongoDB user found an SQL-based database and wrote a lengthy article about all of the revolutionary features. Feels the same every time a Javascript dev discovers a programming language with actual typing.

    Seems cool, but also.. normal? That's how languages should all work?

  • Sounds cool. The types like Haskell's data types or Rust's enums compared with proper pattern matching are pretty much a requirement for a good language imo. And the process/message passing is interesting.

  • Gleam is cool. I wrote some services with it to see if I wanted to use it for more projects. It seemed like a good option because it would be easy to teach.

    Things I like:

    • fast build times (I only tested small apps though, under 2000 LOC)
    • strong static types
    • runs on the BEAM
    • easy to learn
    • pattern matching
    • immutable + structural sharing
    • currying (with parameter holes)

    Things I don't like:

    • no re-exports
    • it's possible to have name collisions between packages; authors have a gentleman's agreement to always create a top-level module with the same name as the package
    • some standard library APIs seem missing or immature (it's still pre-1.0)
    • it can be hard to get good performance out of idiomatic code for specific tasks (see immutability)
    • no format strings; best you can do is "Hello, " <> name. It starts to get cumbersome
    • parsing/serialization is all quite manual boilerplate; there's nothing quite like serde
    • no field/argument punning
    • no method syntax; you just have to scan the docs to figure out what functions can be used with a given type
    • you can't define the same variant name twice in the same module; I believe this is a limitation in how the types are translated to Erlang records
    • you can't call functions in pattern matching if guards
    • you can't have dependency cycles between modules in the same package
    • hard to write FFI correctly; you lose all the comfort of types
  • NGL, this looks kinda terrible

You've viewed 7 comments.