JSOS compared to other languages and libraries
What features does JSOS have compared to other multimethod offerings out there?
JS+JSOS versus other languages
Feature | JSOS | CLOS | Clojure | Julia |
---|---|---|---|---|
Multiple dispatch | ✔ | ✔ | ✔ | ✔ |
Custom dispatch function | ✔ | ✘ | ✔ | ✘ |
Qualifiers (around, ...) | ✔ | ✔ | ✘ | ✘ |
Call-next-method | ✔ | ✔ | ✘ | ✘ |
Method combinators | ✔ | ✔ | ✘ | ✘ |
Prefer-method | ✔ | ✘ | ✔ | ✘ |
Dispatch on types | ✔ | ✘ | ✘ | ✔ |
Dispatch on classes | ✔ | ✔ | N/A | N/A |
Dispatch on values | ✔ | only eql | ✘ | ✘ |
Dispatch on predicates | ✔ | ✘ | ✘ | ✘ |
Dispatch on traits | ✔ | N/A | N/A | N/A |
Dispatch on keywords | N/A | ✘ | ✔ | N/A |
Custom hierarchies | ✘ | ✘ | ✔ | ✘ |
11/13 | 5/13 | 5/13 | 2/13 |
JSOS versus other JS libraries
JSOS | arrows | mm.js1 | multimethod.js | |
---|---|---|---|---|
Last commit | 2025 | 2021 | never | 2014 |
Dependencies | none | 4 | none | 1 |
License | MIT-0 | ISC | ? | MIT |
Language flavor | ES 2020 | TypeScript | ES 5 | ES 5 |
--- | ||||
Uses ES6 modules? | ✔ | ✔2 | ✘ | ✘ |
Multiple dispatch | ✔ | ✔ | ✔ | ✘4 |
Custom dispatch function | ✔ | ✔ | ✘ | ✔ |
Qualifiers (around, ...) | ✔ | ✘ | ✔ | ✘ |
Call-next-method | ✔ | ✘ | ✔ | ✘ |
Method combinators | ✔ | ✘ | ✘ | ✘ |
Prefer-method | ✔ | ✘ | ✘ | ✔ |
Dispatch on types | ✔ | ✔ | ✔ | ✘ |
Dispatch on classes | ✔ | ✔ | ✔ | N/A |
Dispatch on values | ✔ | ✔ | ✘ | ✘ |
Dispatch on predicates | ✔ | ✔ | ✘ | ✘ |
Dispatch on traits | ✔ | N/A | N/A | N/A |
Has a type system | ✔ | ✘ | ✔3 | ✘ |
'Any' / placeholder arg | ✔ | ✔ | ✘ | ✘ |
13/13 | 8/13 | 5/13 | 3/13 |
See also
-
mm.js doesn't have a repository or issue tracker, it's just a single-file library released in a blog post dating back to 2014 ↩
-
arrows/multimethod is written in TypeScript, so it can be exported to ES6 modules as well ↩
-
mm.js has "classes" (not ES6 classes) and integrates JS types as classes. So you could say it has a type system, but a very basic one ↩
-
multimethod.js only dispatches on one argument, so it's rather limited ↩