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 ↩
