this post was submitted on 03 Aug 2023
143 points (97.4% liked)

Asklemmy

43946 readers
532 users here now

A loosely moderated place to ask open-ended questions

Search asklemmy ๐Ÿ”

If your post meets the following criteria, it's welcome here!

  1. Open-ended question
  2. Not offensive: at this point, we do not have the bandwidth to moderate overtly political discussions. Assume best intent and be excellent to each other.
  3. Not regarding using or support for Lemmy: context, see the list of support communities and tools for finding communities below
  4. Not ad nauseam inducing: please make sure it is a question that would be new to most members
  5. An actual topic of discussion

Looking for support?

Looking for a community?

~Icon~ ~by~ ~@Double_[email protected]~

founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 4 points 1 year ago* (last edited 1 year ago)

Oh my favorite is Crystal. It's a statically compiled dialect of ruby.

It supports:

  • Most of the ruby goodness: custom DSLs, patching classes/mixins (monkey patching instances is not supported)
  • Compile time type checking (but it also uses duck typing)
  • Coroutines / fibers that work across multiple threads (multi-thread support is still experimental, but from my experience works well)
  • Possible to create small self-contained binaries (like go-Lang apps).

As much as I love the expressiveness of crystal, there are a few cons:

  • It's slow to compile. Due to the dynamic nature of the language, the compiler needs to parse a lot of files (think C/C++) before it creates a binary.
  • The number of libraries is very immature at the moment. Crystal is a young language and is missing support for things like aws.
  • The library management mechism (called "shards" akin to ruby gems) is not great (in my opinion). There are helpful tools to create the scaffolding, but if you're pretty much stuck with the defined structure. For example you cannot have a single git repo that provides a library and an application that uses it.

Other than that, the type checking but with ruby-like syntax is awesome!

edit: fixed formatting