Dear Clojure team,
I've created Dunaj [1] to test some big ideas I had, mainly a reducers first approach and using protocols for built-in abstractions. I'm fairly happy with the result, as it is (subjectively) simple to use, and the implementation is more performant than Clojure nearly everywhere. The introduction of batched reductions enabled the creation of data formatters and resources that are very fast and can be used for real world cases.
I did not have enough time to implement each small or big idea separatedly so that it would be easy to merge into Clojure. Current Dunaj is rather a testbed for new ideas rather than something that can be merged into Clojure. If you consider some of Dunaj's features worth of adding into Clojure, please let me know and I'll try to prepare smaller library more focused on a specific feature.
Moreover, I'm not at all happy that I had to fork Clojure and I've tried really hard to minimize the number of changes there. If some of changes I've made have a chance to be included into Clojure, I can create feature tickets with respective patches and feature enhancement wiki pages for more focused discussion.
This is the list of changes I've made in Clojure:
* support for :api declaration in ns, which customizes what gets referred automatically (supersedes :refer-clojure)
* support for qualified specials. Unqualified specials keep working as usual.
* a per ns option to turn off support for unqualified specials
* support for more primitive types in fn args and return values
* iloop macro that does not cast int constants to long automatically
* speed improvements for satisfies?
* map-like deftype instance similar to what defprotocol does now
* ability to create protocol on top of existing interface, or its part
If any of these are in line with Clojure's direction and goals, please let me know and I'll prepare a ticket/patch.
Thanks,
Jozef Wagner