Immutability in Ruby

By Lorenzo Barasti

What do we mean with 'immutability'?

In object-oriented and functional programming, an immutable object is an object whose state cannot be modified after it is created

What is it good for?

What is it good for?

  • Testability
  • Predictability
  • Debugging

What is it good for?

  • Testability

- factoring out time dependencies
- running tests concurrently
- avoiding afterAll, beforeAll

What is it good for?

  • Parallelization comes more natural
  • More emphasis on your data-flow
  • Readability (?)
  • Performance (??)

Vector is a collection type [...] that addresses the inefficiency for random access on lists. Vectors allow accessing any element of the list in “effectively” constant time.

A real-world example from Scala

what about downsides?

what about downsides?

  • Immutable and mutable data-structures don't play well together
  • Integration with non-functional frameworks can be challenging
  • When dealing with stateful functions extra care must be taken  

References

  • An Introduction to immutability in Ruby by valve - probably the best place to start if you are new to the topic
  • Immutability in Ruby - a very thorough article about the value of immutable data structures from Deveo's blog
  • Immutable Ruby - a brilliant talk by Michael Fairley
  • Hamster - a Ruby library that provides "Efficient, immutable, and thread-safe collection classes for Ruby"
  • Scala Vector - documentation page
  • To abstract or not to abstract? - interesting opinion about the value of abstraction vs efficiency by Mike Perham

THANK YOU for Listening!

Immutability in Ruby

By Lorenzo Barasti

Immutability in Ruby

Why should we care about using immutable objects in our code? What does functional programming have to do with immutability? How do we approach immutability when the frameworks and libraries we use seem to go a different direction?

  • 2,210