# Design Decisions for Greyhawk
## Why a VM?
In the future, Greyhawk will provide some metaprogramming
functionality. Having a VM makes implementing metaprogramming easier.
## Immutability by Default
When programming, debugging is a large portion of the work required to
finish an application. Mutable state makes debugging exponentially
more difficult: the number of possible modifications that could be
made to an object is effectively infinite, and it's difficult to find
side effects.
In most cases, mutable state is not necessary, nor desired. Having
immutability as the default ensures faster debugging and easier
reasoning about the logic of an application.
## Rigid Syntax
Programming with text comes with a certain level of aesthetic design:
where to put curly brackets, how to indent. Many arguments and
developer hours are focused on which pattern is best, and those rules
are difficult to enforce automatically. Instead, the arguing comes
from the language designers, reducing the amount time used on this
arguably useless topic.