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.