diff --git a/deps.edn b/deps.edn index 0a30b667..a645274c 100644 --- a/deps.edn +++ b/deps.edn @@ -10,6 +10,7 @@ "feature-selmer" "feature-logging" "feature-priority-map" + "feature-rrb-vector" "feature-jdbc" "pods/src" "babashka.nrepl/src" @@ -46,7 +47,8 @@ com.taoensso/timbre {:mvn/version "5.2.1"} org.clojure/tools.logging {:mvn/version "1.1.0"} org.clojure/data.priority-map {:mvn/version "1.1.0"} - insn/insn {:mvn/version "0.5.2"}} + insn/insn {:mvn/version "0.5.2"} + org.clojure/core.rrb-vector {:mvn/version "0.1.2"}} :aliases {:babashka/dev {:main-opts ["-m" "babashka.main"]} :profile diff --git a/feature-rrb-vector/babashka/impl/rrb_vector.clj b/feature-rrb-vector/babashka/impl/rrb_vector.clj new file mode 100644 index 00000000..955e5d7b --- /dev/null +++ b/feature-rrb-vector/babashka/impl/rrb_vector.clj @@ -0,0 +1,7 @@ +(ns babashka.impl.rrb-vector + (:require [clojure.core.rrb-vector :as rrb] + [sci.core :as sci])) + +(def rrbns (sci/create-ns 'clojure.core.rrb-vector)) + +(def rrb-vector-namespace {'catvec (sci/copy-var rrb/catvec rrbns)}) diff --git a/project.clj b/project.clj index 95df34c5..4373c91a 100644 --- a/project.clj +++ b/project.clj @@ -70,6 +70,8 @@ [org.clojure/tools.logging "1.1.0"]]} :feature/priority-map {:source-paths ["feature-priority-map"] :dependencies [[org.clojure/data.priority-map "1.1.0"]]} + :feature/rrb-vector {:source-paths ["feature-rrb-vector"] + :dependencies [[org.clojure/core.rrb-vector "0.1.2"]]} :test [:feature/xml :feature/lanterna :feature/yaml @@ -87,6 +89,7 @@ :feature/selmer :feature/logging :feature/priority-map + :feature/rrb-vector {:dependencies [[com.clojure-goes-fast/clj-async-profiler "0.5.0"] [com.opentable.components/otj-pg-embedded "0.13.3"]]}] :uberjar {:global-vars {*assert* false} diff --git a/script/compile b/script/compile index 42ab80c2..5e2de169 100755 --- a/script/compile +++ b/script/compile @@ -105,6 +105,7 @@ then export BABASHKA_FEATURE_SELMER="${BABASHKA_FEATURE_SELMER:-false}" export BABASHKA_FEATURE_LOGGING="${BABASHKA_FEATURE_LOGGING:-false}" export BABASHKA_FEATURE_PRIORITY_MAP="${BABASHKA_FEATURE_PRIORITY_MAP:-false}" + export BABASHKA_FEATURE_RRB_VECTOR="${BABASHKA_FEATURE_RRB_VECTOR:-false}" fi "$GRAALVM_HOME/bin/native-image" "${args[@]}" diff --git a/script/uberjar b/script/uberjar index 880aba4e..5bc24c98 100755 --- a/script/uberjar +++ b/script/uberjar @@ -168,6 +168,13 @@ else BABASHKA_LEIN_PROFILES+=",-feature/priority-map" fi +if [ "$BABASHKA_FEATURE_RRB_VECTOR" != "false" ] +then + BABASHKA_LEIN_PROFILES+=",+feature/rrb-vector" +else + BABASHKA_LEIN_PROFILES+=",-feature/rrb-vector" +fi + cp deps.edn resources/META-INF/babashka/deps.edn if [ -z "$BABASHKA_JAR" ]; then diff --git a/script/uberjar.bat b/script/uberjar.bat index 2ae3beb6..65cdd182 100755 --- a/script/uberjar.bat +++ b/script/uberjar.bat @@ -130,6 +130,12 @@ set BABASHKA_LEIN_PROFILES=%BABASHKA_LEIN_PROFILES%,+feature/priority-map set BABASHKA_LEIN_PROFILES=%BABASHKA_LEIN_PROFILES%,-feature/priority-map ) +if not "%BABASHKA_FEATURE_RRB_VECTOR%"=="false" ( +set BABASHKA_LEIN_PROFILES=%BABASHKA_LEIN_PROFILES%,+feature/rrb-vector +) else ( +set BABASHKA_LEIN_PROFILES=%BABASHKA_LEIN_PROFILES%,-feature/rrb-vector +) + call lein with-profiles %BABASHKA_LEIN_PROFILES% bb "(+ 1 2 3)" call lein with-profiles %BABASHKA_LEIN_PROFILES%,+reflection,-uberjar do run diff --git a/src/babashka/impl/classes.clj b/src/babashka/impl/classes.clj index adee9d89..885e068f 100644 --- a/src/babashka/impl/classes.clj +++ b/src/babashka/impl/classes.clj @@ -116,7 +116,8 @@ java.util.Iterator {:methods [{:name "hasNext"} {:name "next"}]} - }) + java.util.TimeZone + {:methods [{:name "getTimeZone"}]}}) (def custom-map (cond-> @@ -439,6 +440,7 @@ ;; list above and then everything reachable via the public class will be ;; visible in the native image. :instance-checks [clojure.lang.AFn + clojure.lang.Agent clojure.lang.AMapEntry ;; for proxy clojure.lang.APersistentMap ;; for proxy clojure.lang.APersistentSet @@ -489,6 +491,8 @@ clojure.lang.Sequential clojure.lang.Seqable clojure.lang.Volatile + java.lang.ExceptionInInitializerError + java.sql.Timestamp java.util.concurrent.atomic.AtomicInteger java.util.concurrent.atomic.AtomicLong java.util.Collection @@ -594,6 +598,7 @@ Comparable java.lang.Comparable Double java.lang.Double Exception java.lang.Exception + ExceptionInInitializerError java.lang.ExceptionInInitializerError IndexOutOfBoundsException java.lang.IndexOutOfBoundsException IllegalArgumentException java.lang.IllegalArgumentException IllegalStateException java.lang.IllegalStateException diff --git a/src/babashka/impl/features.clj b/src/babashka/impl/features.clj index 00eaa26e..271cf136 100644 --- a/src/babashka/impl/features.clj +++ b/src/babashka/impl/features.clj @@ -17,6 +17,7 @@ (def selmer? (not= "false" (System/getenv "BABASHKA_FEATURE_SELMER"))) (def logging? (not= "false" (System/getenv "BABASHKA_FEATURE_LOGGING"))) (def priority-map? (not= "false" (System/getenv "BABASHKA_FEATURE_PRIORITY_MAP"))) +(def rrb-vector? (not= "false" (System/getenv "BABASHKA_FEATURE_RRB_VECTOR"))) ;; excluded by default (def jdbc? (= "true" (System/getenv "BABASHKA_FEATURE_JDBC"))) @@ -76,3 +77,6 @@ (when priority-map? (require '[babashka.impl.priority-map])) + +(when rrb-vector? + (require '[babashka.impl.rrb-vector])) diff --git a/src/babashka/main.clj b/src/babashka/main.clj index add257f6..f90ed560 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -256,7 +256,8 @@ Use bb run --help to show this help output. :feature/spec-alpha %s :feature/selmer %s :feature/logging %s - :feature/priority-map %s}") + :feature/priority-map %s + :feature/rrb-vector %s}") version features/csv? features/java-nio? @@ -276,7 +277,8 @@ Use bb run --help to show this help output. features/spec-alpha? features/selmer? features/logging? - features/priority-map?))) + features/priority-map? + features/rrb-vector?))) (defn read-file [file] (let [f (io/file file)] @@ -442,7 +444,8 @@ Use bb run --help to show this help output. 'clojure.tools.logging.readable @(resolve 'babashka.impl.logging/tools-logging-readable-namespace)) features/priority-map? (assoc 'clojure.data.priority-map - @(resolve 'babashka.impl.priority-map/priority-map-namespace)))) + @(resolve 'babashka.impl.priority-map/priority-map-namespace)) + features/rrb-vector? (assoc 'clojure.core.rrb-vector @(resolve 'babashka.impl.rrb-vector/rrb-vector-namespace)))) (def edn-readers (cond-> {} features/yaml?