Mal Implementation Stats

Important Caveats:

The data on this graph is very specific to Mal. Do not use this data to directly compare programming languages.

  • Bad takeaway: "Language X is faster than language Y"
  • Good takeway: "The mal impl in language X is faster than the one in language Y for the 'perf 3' microbenchmark"

Here are some reasons (non-exhaustive) why this data should be taken with a grain of salt:

  • The focus of the make-a-lisp process is on learning (either Lisp or the target language). The resulting implementations have a common structure that is intended for understandability and consistency between implementations. They are not structured or intended to have optimal runtime performance or code concision.
  • Mal implementations are created by different authors and the authors have varying levels of experience with the target language and they often created a mal implementation with the goal of learning the target language.
  • While the overall structure of each mal implementation is similar, the implementation details are up to the author.
  • There are hundreds of tests that each implementation must pass before being accepted into the tree. However, the mal language has no formal specification so authors make choices about whether and how to handle edge cases that are not covered by the tests. For example, mal implementations have different levels of runtime error checking.
  • The performance benchmarks are very narrow in focus and these numbers should not be extrapolated casually. For example, the 'perf 3' microbenchmark repeats a macro and data structure manipulation test repeatedly for 10 seconds and counts the number of iterations through the test. Languages with runtime optimization (e.g. JIT) tend to do particularly well at this benchmark (RPython, JVM-based, etc).

Other Notes:

  • Syntax style and type discipline are best effort and based on Wikipedia information and personal experience. There are also other aspects to type discipline (strong, gradual, duck, etc) that are not currently included.
  • The GitHub information was gathered by the GitHut 2.0 project and then translated into a ordinal ranking of implementations relative to each other.
  • The StackOverflow information was generated by a tag count query and then translated into a ordinal ranking of implementations relative to each other.
  • Not all languages have GitHub or StackOverflow data so a gap of 10 ticks is introduced between the ranked languages and the languages with no data.
Color data:
X-Axis data:
Y-Axis data:
Circle size: