Issue with Clojure 1.8.0-alpha2 Tuples


When trying our core.rrb-vector with the latest Clojure 1.8.0-alpha2 I see the following error:

Exception in thread "main" java.lang.IllegalArgumentException: No implementation of method: :slicev of protocol: #'clojure.core.rrb-vector.protocols/PSliceableVector found for class: clojure.lang.Tuple$T0, compilingmikera/timeline/examples.clj:12:1)
at clojure.lang.Compiler.load(
at clojure.lang.RT.loadResourceScript(
at clojure.lang.RT.loadResourceScript(
at clojure.lang.RT.load(
at clojure.lang.RT.load(
at clojure.core$load$fn__5448.invoke(core.clj:5866)
at clojure.core$load.doInvoke(core.clj:5865)
at clojure.lang.RestFn.invoke(
at clojure.core$load_one.invoke(core.clj:5671)
at clojure.core$load_lib$fn__5397.invoke(core.clj:5711)
at clojure.core$load_lib.doInvoke(core.clj:5710)
at clojure.lang.RestFn.applyTo(
at clojure.core$apply.invoke(core.clj:632)
at clojure.core$load_libs.doInvoke(core.clj:5749)
at clojure.lang.RestFn.applyTo(
at clojure.core$apply.invoke(core.clj:632)
at clojure.core$require.doInvoke(core.clj:5832)
at clojure.lang.RestFn.invoke(
at com.theoryinpractise.clojure.testrunner$eval41$iter_4246$fn47$fn_48.invoke(run-test181131806783576232.clj:22)
at com.theoryinpractise.clojure.testrunner$eval41$iter_4246$fn_47.invoke(run-test181131806783576232.clj:21)
at clojure.lang.LazySeq.sval(
at clojure.lang.LazySeq.seq(
at clojure.lang.RT.seq(
at clojure.core$seq__4128.invoke(core.clj:137)
at clojure.core$dorun.invoke(core.clj:3009)
at com.theoryinpractise.clojure.testrunner$eval41.invoke(run-test181131806783576232.clj:21)
at clojure.lang.Compiler.eval(
at clojure.lang.Compiler.load(
at clojure.lang.Compiler.loadFile(
at clojure.main$load_script.invoke(main.clj:275)
at clojure.main$script_opt.invoke(main.clj:337)
at clojure.main$main.doInvoke(main.clj:421)
at clojure.lang.RestFn.invoke(
at clojure.lang.Var.invoke(
at clojure.lang.AFn.applyToHelper(
at clojure.lang.Var.applyTo(
at clojure.main.main(
Caused by: java.lang.IllegalArgumentException: No implementation of method: :slicev of protocol: #'clojure.core.rrb-vector.protocols/PSliceableVector found for class: clojure.lang.Tuple$T0
at clojure.core$_cache_protocol_fn.invoke(core_deftype.clj:556)
at clojure.core.rrb_vector.protocols$eval965$fn_966$G956_975.invoke(protocols.clj:6)
at clojure.core.rrb_vector$subvec.invoke(rrb_vector.clj:71)
at mikera.timeline.impl.Timeline.add_event(impl.clj:82)
at mikera.timeline$log.invoke(timeline.clj:64)
at mikera.timeline$log.invoke(timeline.clj:61)
at clojure.lang.Atom.swap(
at clojure.core$swap_BANG_.invoke(core.clj:2239)
at mikera.timeline.examples$eval1620.invoke(examples.clj:15)
at clojure.lang.Compiler.eval(
at clojure.lang.Compiler.load(
... 36 more

I believe the cause of this is the new Tuple types. core-rrb-vector should ideally be able to handle this like any other IPersistentVector instance, but it does not currently seem to be able to do so.




Andy Fingerhut
September 18, 2019, 7:09 PM

Closing this issue as "Won't fix" for the reasons described in an earlier comment – the reasons that the issue was created appear only to have been relevant for a few alpha releases of Clojure, and never became part of an official Clojure release.

Andy Fingerhut
August 13, 2019, 9:36 PM

Clojure 1.8.0-alpha2 had classes T0, T1, T2, and a few more for ‘small vectors’, as a hoped-for speed/memory optimization being examined at that time. Those classes were removed before Clojure 1.9.0 was released, and have not been reintroduced, at least up through Clojure 1.10.1.

In Clojure 1.9.0 through 1.10.1, there is still a Tuple class, but it has no constructors, only static methods that can return objects of class clojure.lang.PersistentVector, which core.rrb-vector should handle just fine.

Thus it seems that the reasons for creating this issue are no longer relevant for anything except a short-lived set of Clojure 1.8 alpha versions, and it seems safe to close this issue.

Won't Fix


Andy Fingerhut


Mike Anderson