[Haskell-cafe] Writing an interpreter for a language with mutability

Jeremy Mikkola jeremy128 at gmail.com
Sun Dec 17 21:03:44 UTC 2017


I am quite certain I am not the first to try to do this, but my google-fu
is failing me today.

How does one go about interpreting a language with mutable objects in
Haskell?


The best approach I can think of is to represent the language's memory as a
`Data.Map.Map RefID LanguageObject` where RefID is some type (probably Int)
used as a reference. The LanguageObject structure might contain some values
of type RefID to refer to other objects. Mutating an object involves simply
replacing the value in the map at a given RefID.


I don't like this approach for two reasons:

1. Map lookups aren't very efficient compared with actual references to the
value.

2. I have to re-invent garbage collection, removing objects from the map
when they no longer have incoming references. (Unlike simple interpreters
for languages with immutable values, I can't rely on Haskell's garbage
collector to do the work for me.)


Is there a better approach?


- Jeremy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20171217/6745642b/attachment.html>


More information about the Haskell-Cafe mailing list