... without cons,
without arbitrary precision integers, fixed precision integers, rationals and complex numbers,
without image-based development,
without the conditions-restart system,
without CLOS,
etc.
It's interesting to note, since Janet is a bytecode interpreter, that we've have had a full Common Lisp implementation for years (CLISP) that provides all the features above (plus many many others) with a download size (1.8MB) just slightly bigge than to Janet's.
Just in case -
))))))))))))))))))))))))))))))))))))))
https://janet-lang.org/api/index.html
that does not mention list in meaningful ways. It seems to prefer to work with other data structures (like arrays) - which is okay, but then I won't call it a List Processor dialect.
is there a pratical difference in the way you write programs or is more of theory/implemetation detail?
Janet on the other hand just uses tuples, which are easier to pack densely into memory so usually have better cache performance on reads (clever lisp implementations can sometimes can make lists fit densely in memory, but usually they take about twice as much memory as a tuple).
splicing is the like the spread operator in JavaScript or the splat operator in Ruby. This turns out to be very useful in a language without cons for manipulating tuples in macros, even though it is not as efficient as a cons.