These are chat archives for mozart/mozart2

17th
Apr 2015
Didrik Nordström
@betamos
Apr 17 2015 07:42
I have already implement basic data types, if statements, procedures/calls and also extended it with the "thread"-statement (parallel concurrency) and "ByNeed" (lazy/demand-driven execution). C# with .NET is interesting in a couple of ways as an interpreter platform of the kernel language. First it is garbage collected which obviously makes implementation easier. Secondly it allows a high number of asynchronous "tasks", which are very lightweight threads, ideal for representing execution on multiple semantic stacks, in particular with lazy execution, where most of the threads are waiting.
Didrik Nordström
@betamos
Apr 17 2015 07:51
I have a couple of questions:
  1. (Language design) Why does the record type have both atoms, booleans and integers as "features"? Why not e.g. only atoms (in ascending order)?
  2. (Implementation) What data structure is used in the single-assignment store, and why? In my implementation, I have an object called Variable, which can be bound to other variables such that it creates a doubly-linked (undirected) graph. Upon determination, the whole graph is dfs:ed as to set all variables to the same value.
  3. (Implementation) What data structure is used for the environment? I'm using a key-value map, from Identifier => Variable. My largest performance bottleneck currently seems to be the environment, since procedures copies the entire environment and adds the argument variables to it.