speculative

https://github.com/borkdude/speculative
borkdude 2018-10-21T08:35:36.000100Z

@slipset that’s useful if you want to do something like this: https://clojurians.slack.com/archives/CDJGJ3QVA/p1540070302000100

borkdude 2018-10-21T08:40:52.000100Z

Maybe we should make a decision that we’re focusing only on :args specs to be correct so errors can be caught during dev and not :ret and :fn? In that case you don’t need the :binary, :trinary, but if we think this might be useful to core one day, then it’s probably better to write full specs.

mfikes 2018-10-21T11:42:08.000100Z

Ahh, interesting, I guess you could make the :val field optional in this regex: (s/cat :f fn? :val any? :coll ::reduceable-coll)

mfikes 2018-10-21T11:53:20.000100Z

Maybe that spec could be

(s/cat :f fn? :val (s/? any?) :coll ::reduceable-coll)

mfikes 2018-10-21T11:55:39.000100Z

I'll put together a PR with that simplification.

borkdude 2018-10-21T12:16:05.000100Z

I fixed the tests in clj + cljs in this branch: https://github.com/slipset/speculative/pull/18

borkdude 2018-10-21T12:16:36.000100Z

and got rid of some boilerplate using macrovich. It turned out the with-instrumentation macro was useful after all, because (s/instrument) doesn’t work properly in JS it seems

borkdude 2018-10-21T12:18:12.000100Z

so the JS tests didn’t seem to do anything when the specs were offended 😉

mfikes 2018-10-21T12:19:22.000100Z

By the way, I nearly have CI sorted for ClojureScript and self-hosted ClojureScript (with Planck). I'm still fighting with an issue where the CI ubuntu box is different than the stock 18.10, thus causing a shared library issue with PPA builds.

slipset 2018-10-21T13:13:09.000100Z

Hmm, (merge-with +) is just stupid isn’t it?

slipset 2018-10-21T13:14:14.000100Z

What’s the purpose of that? I agree that speculative should allow for it, since clojure.core does, but it still doesn’t make sense.

slipset 2018-10-21T13:14:57.000100Z

Another fun thing with speculative is that it creates a tool for generatively testing clojure.core functions.

slipset 2018-10-21T13:15:23.000100Z

I was just thinking about wether speculative should include generative tests for clojure.core or if that is another lib.

slipset 2018-10-21T13:15:45.000100Z

I would imagine it’s another lib.

borkdude 2018-10-21T13:16:13.000100Z

That’s what I was getting at with https://clojurians.slack.com/archives/CDJGJ3QVA/p1540111252000100. We either make specs for error assertions, or for testing core. Maybe the first is something people would like, the second is more for the core team to use.

borkdude 2018-10-21T13:16:47.000100Z

Testing core is not something Joe the clojure developer does on a daily basis 😉

slipset 2018-10-21T13:18:52.000100Z

I’d be aming for error assertions, but that doesn’t stop us from using speculative to exercise the functions in core.

borkdude 2018-10-21T13:19:22.000100Z

About the PR: it works on self hosted, normal cljs and clj now.

slipset 2018-10-21T13:19:34.000100Z

Nice. merging

borkdude 2018-10-21T13:20:23.000100Z

@slipset yeah, but then I’m all for having separate cases for arities, so you can leverage that inside :fn. E.g. map should only return a transducer when called with one arg, in all other cases, it’s a sequential.

borkdude 2018-10-21T13:21:02.000100Z

so when map would return a transducer when called with two args, it’s an error. now it would just be ok

borkdude 2018-10-21T13:21:25.000100Z

gotta go

slipset 2018-10-21T13:21:56.000100Z

Thanks for the help! This has been a lot of fun!

slipset 2018-10-21T14:58:09.000100Z

Got a challenge for you 🙂

slipset 2018-10-21T15:00:47.000100Z

I must be doing something wrong here since this spec fails for (/ 1 0)

mfikes 2018-10-21T15:04:18.000100Z

One issue @slipset is that it is legal to divide by zero in ClojureScript.

mfikes 2018-10-21T15:05:26.000100Z

In fact, it is legal to divide by negative zero as well. 😎

(/ (/ ##-Inf))

mfikes 2018-10-21T15:09:09.000100Z

Oh, I see you are currently focusing on the Clojure test... in that case you might need to use

(apply / [1 0])
to get around direct linking.

mfikes 2018-10-21T15:09:25.000100Z

(I found you need to do the same for the count tests.)

mfikes 2018-10-21T15:11:59.000100Z

And with ClojureScript some things are macro-functions.

slipset 2018-10-21T15:24:57.000100Z

Aha!

slipset 2018-10-21T15:26:33.000100Z

But that would mean that a Spec for / wouldnt have much value?

mfikes 2018-10-21T15:33:06.000100Z

For ClojureScript, we could spec the macro and the function. Perhaps if we are clever we could avoid duplication.

borkdude 2018-10-21T15:41:26.000100Z

Cleaned up the test utils into one .cljc file now

borkdude 2018-10-21T16:21:56.000100Z

Thanks for merging. @mfikes I’m not sure why, but to make plk work with the macros in test-utils, I had to add this: https://github.com/slipset/speculative/blob/master/test/speculative/core_test.cljc#L9 although it worked without in “normal” cljs.

mfikes 2018-10-21T16:25:58.000100Z

That seems to match the sample here, but I'm not familiar with the subtleties https://github.com/cgrand/macrovich#sample

borkdude 2018-10-21T16:27:00.000100Z

yeah, that sample doesn’t use the macro in a different namespace though. but it works. I think it’s because I use the macros/case which is needed at runtime in plk because of self hosting

slipset 2018-10-21T16:27:52.000100Z

@mfikes: the direct linking stuff (which is an area of great ignorance for me), if the test needs to be written as (apply / [1 0]), would a spec for / have any value for Joe Enduser?

borkdude 2018-10-21T16:28:05.000100Z

maybe if I would fully qualify it in the macro, then it would work without the require

borkdude 2018-10-21T16:29:13.000100Z

yup, that works

borkdude 2018-10-21T16:38:28.000100Z

@slipset hope you’re not getting tired of the PRs 😉

slipset 2018-10-21T16:38:38.000100Z

I’m loving it 🙂

borkdude 2018-10-21T16:47:55.000100Z

Going to try speculative on a big project I’m working on…. hope it doesn’t explode

borkdude 2018-10-21T16:48:11.000100Z

ah it did 😉

borkdude 2018-10-21T16:49:26.000100Z

hmm, I think it didn’t pick up the latest snapshot, installing locally

borkdude 2018-10-21T16:51:45.000100Z

exploded with:

clojure.lang.ExceptionInfo: Call to #'clojure.core/merge did not conform to spec.
           clojure.spec.alpha/args: nil
        clojure.spec.alpha/failure: :instrument
             clojure.spec.alpha/fn: clojure.core/merge
       clojure.spec.alpha/problems: [{:path [], :pred clojure.core/coll?, :val nil, :via [], :in []}]
           clojure.spec.alpha/spec: #object[clojure.spec.alpha$every_impl$reify__2254 0x74f0ba3e "clojure.spec.alpha$every_impl$reify__2254@74f0ba3e"]
          clojure.spec.alpha/value: nil
    clojure.spec.test.alpha/caller: {:file "util.clj", :line 238, :var-scope yada.util/eval47062}
clojure.lang.ExceptionInfo: Call to #'clojure.core/merge did not conform to spec.
           clojure.spec.alpha/args: nil
        clojure.spec.alpha/failure: :instrument
             clojure.spec.alpha/fn: clojure.core/merge
       clojure.spec.alpha/problems: [{:path [], :pred clojure.core/coll?, :val nil, :via [], :in []}]
           clojure.spec.alpha/spec: #object[clojure.spec.alpha$every_impl$reify__2254 0x74f0ba3e "clojure.spec.alpha$every_impl$reify__2254@74f0ba3e"]
          clojure.spec.alpha/value: nil
    clojure.spec.test.alpha/caller: {:file "util.clj", :line 238, :var-scope yada.util/eval47062}
                              line: 238

borkdude 2018-10-21T16:53:12.000100Z

going to look at this later, cooking right now

borkdude 2018-10-21T16:59:07.000100Z

ah, it fails on (merge) which is valid in clojure

borkdude 2018-10-21T16:59:34.000100Z

also map? doesn’t seem right to me, it should be associative probably

mfikes 2018-10-21T16:59:42.000200Z

Right. We could copy the bit from merge-with

borkdude 2018-10-21T17:01:09.000200Z

although it’s a bit non-sensical: (merge [0 1 3] []) works

mfikes 2018-10-21T17:01:12.000100Z

associative? would allow vectors. But perhaps records are ok?

slipset 2018-10-21T17:02:34.000100Z

But, reading the yada code. Does that actually make sense? To have a call to (merge) just like that?

borkdude 2018-10-21T17:02:35.000100Z

although this errors: (merge {0 :a} [[0 :b]]). Not sure what is the right answer. cooking again

borkdude 2018-10-21T17:02:48.000100Z

It happens in the wild and it doesn’t error, so we should allow it

borkdude 2018-10-21T17:03:00.000100Z

I guess

slipset 2018-10-21T17:03:14.000100Z

True, but I guess a pr against yada would make sense 🙂

borkdude 2018-10-21T17:03:21.000100Z

😄

borkdude 2018-10-21T17:04:09.000100Z

we could try to run our specs against some public code bases. maybe there’s 4clojure answers or something?

mfikes 2018-10-21T17:04:30.000100Z

You could be applying merge to a list of maps which happens to be empty

slipset 2018-10-21T17:04:45.000100Z

yes.

slipset 2018-10-21T17:05:07.000100Z

That’s actually a valid point. I’ve seen a Clojure ticket on that topic.

slipset 2018-10-21T17:05:22.000100Z

Some fns allow this, while others dont.

borkdude 2018-10-21T17:05:40.000100Z

yes, I was just thinking the same, (apply merge nil)

slipset 2018-10-21T17:05:59.000100Z

https://github.com/juxt/yada/pull/246

mfikes 2018-10-21T17:13:11.000200Z

Nice... the first true fruit of the speculative project. 🙂

mfikes 2018-10-21T17:13:48.000100Z

(Even though (merge) is legit, speculative's current spec caught that.)

mfikes 2018-10-21T17:15:33.000100Z

Running speculative through 4clojure should be trivial with https://github.com/mfikes/coal-mine

mfikes 2018-10-21T17:18:31.000100Z

You tend to see some bizarre code in 4clojure, given it is written by people learning the language 🙂

mfikes 2018-10-21T17:21:47.000100Z

I'll put together a couple of aliases that we could use to drive speculative through coal-mine, to see if you like them.

mfikes 2018-10-21T17:23:01.000100Z

We need not even commit them, clj is probably flexible enough to compose speculative and coal-mine right on the command line.

slipset 2018-10-21T17:23:11.000100Z

Here’s another challenge for you Mike:

slipset 2018-10-21T17:23:14.000100Z

19:21 $ ./run_tests.sh

Running tests in #{"test"}

Testing speculative.core-test

Ran 16 tests containing 56 assertions.
0 failures, 0 errors.

Testing speculative.core-test

ERROR in (merge-test) (RangeError:NaN:NaN)
expected: (nil? (merge))
  actual: #object[RangeError RangeError: Maximum call stack size exceeded]

Ran 16 tests containing 55 assertions.
0 failures, 1 errors.

Testing speculative.core-test
git pu
ERROR in (merge-test) (cljs$core$IFn$_invoke$arity$2@cljs/core.js:336:219)
expected: (nil? (merge))
  actual: #object[RangeError RangeError: Maximum call stack size exceeded.]
s
Ran 16 tests containing 55 assertions.
0 failures, 1 errors.

slipset 2018-10-21T17:23:42.000200Z

given the code in https://github.com/slipset/speculative/tree/26_allow_for_merge

slipset 2018-10-21T17:24:30.000100Z

So basically, it works as expected in Clojure, but for some reason bombs in Clojurescript

mfikes 2018-10-21T17:25:17.000100Z

Smells like a bug in ClojureScript... might be worth changing the ClojureScript dep in deps.edn temporarily to point at ClojureScript master's git SHA

slipset 2018-10-21T17:26:45.000100Z

BTW, what’s happened to Clojurescript? Is it abandoned? Latest commit 26 days ago!?!?!

mfikes 2018-10-21T17:27:22.000200Z

It is currently in a quiet mode for release. There is one last change that David has been wanting to do.

slipset 2018-10-21T17:29:29.000100Z

oh, the fact that deps.edn doesn’t handle git:.. urls 😕

slipset 2018-10-21T17:30:46.000100Z

still fails with “6eedd0a08c49f7b0d4dcb30977b2fb38c90577bd”

mfikes 2018-10-21T17:38:34.000100Z

deps.edn handles git: urls, but perhaps that causes extra authentication to occur? Hrm.

slipset 2018-10-21T17:38:56.000100Z

yes, it was something with the authentication.

mfikes 2018-10-21T17:39:00.000100Z

Anyway, if broken on master, perhaps a minimal repro is possible in JIRA

slipset 2018-10-21T17:41:11.000100Z

I tried a minimal repro without speculative, and of course it passes 😕

slipset 2018-10-21T17:43:43.000100Z

Interesting, also wrote a missing test for (merge-with +) which also fails…

slipset 2018-10-21T17:49:50.000100Z

{:message "Call to #'cljs.core/merge-with did not conform to spec.",
 :data {:cljs.spec.alpha/problems [{:path [],
                                    :pred (cljs.core/fn [%] (cljs.core/or (cljs.core/nil? %)
                                                                          (cljs.core/sequential? %))),
                                    :val #object[cljs$core$_PLUS_],
                                    :via [], :in []}],
        :cljs.spec.alpha/spec #object[cljs.spec.alpha.t_cljs$spec$alpha19571],
        :cljs.spec.alpha/value #object[cljs$core$_PLUS_],
        :cljs.spec.alpha/fn cljs.core/merge-with,
        :cljs.spec.alpha/args #object[cljs$core$_PLUS_],
        :cljs.spec.alpha/failure :instrument}}

slipset 2018-10-21T17:50:34.000100Z

for

slipset 2018-10-21T17:50:40.000100Z

(s/fdef clojure.core/merge-with
  :args (s/cat :f ifn? :maps (s/* (s/nilable map?)))
  :ret (s/nilable map?))

mfikes 2018-10-21T17:57:34.000100Z

It's a bit verbose, but we can run speculative through coal-mine (4clojure) via something like this https://github.com/mfikes/speculative/commit/3606e5d15627483ffde1da2e3aed76a453342533

slipset 2018-10-21T18:01:16.000100Z

nice!

slipset 2018-10-21T18:01:19.000100Z

PR welcome 😉

mfikes 2018-10-21T18:01:57.000100Z

I'll let it run on my larger box and see what happens. (You have to be prepared to sacrifice a kilowatt.)

mfikes 2018-10-21T18:12:58.000100Z

@slipset I wonder if that (merge-with +) spec issue above is related to https://dev.clojure.org/jira/browse/CLJS-2793

slipset 2018-10-21T18:13:54.000100Z

interesting

mfikes 2018-10-21T18:15:09.000100Z

It is probably worth its own JIRA just in case it is a different root cause

slipset 2018-10-21T18:16:59.000100Z

I can’t seem to create a minimal repro though.

slipset 2018-10-21T18:20:35.000200Z

oh, getting there now:

slipset 2018-10-21T18:20:58.000100Z

(ns fail-test
  (:require  [clojure.test :as t :refer [deftest is testing]]
             [clojure.spec.test.alpha :as stest]
             [clojure.spec.alpha :as s]))

(s/fdef clojure.core/merge-with
  :args (s/cat :f ifn?)
  :ret (s/nilable map?))

(stest/instrument `clojure.core/merge-with)

(deftest foo
  (is (nil? (merge-with identity))))

slipset 2018-10-21T18:21:30.000100Z

fails with

slipset 2018-10-21T18:21:36.000100Z

20:18 $ clj -A:cljstests
WARNING: Use of undeclared Var test.runner/fail-test at line 30 cljs-test-runner-out/gen/test-runner.cljs

Testing fail-test

ERROR in (foo) (Error:NaN:NaN)
expected: (nil? (merge-with +))
  actual: #error {:message "Call to #'cljs.core/merge-with did not conform to spec.", :data {:cljs.spec.alpha/problems [{:path [], :pred (cljs.core/fn [%] (cljs.core/or (cljs.core/nil? %) (cljs.core/sequential? %))), :val #object[cljs$core$_PLUS_], :via [], :in []}], :cljs.spec.alpha/spec #object[cljs.spec.alpha.t_cljs$spec$alpha12632], :cljs.spec.alpha/value #object[cljs$core$_PLUS_], :cljs.spec.alpha/fn cljs.core/merge-with, :cljs.spec.alpha/args #object[cljs$core$_PLUS_], :cljs.spec.alpha/failure :instrument}}

/Users/erik/Documents/github.com/fail/cljs-test-runner-out/cljs/spec/test/alpha.js:133
throw cljs.core.ex_info.call(null,["Call to ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(v__$1)," did not conform to spec."].join(''),ed);
^
Error: Call to #'cljs.core/merge-with did not conform to spec.
    at new cljs$core$ExceptionInfo (/Users/erik/Documents/github.com/fail/cljs-test-runner-out/cljs/core.js:36762:10)
    at Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$3 (/Users/erik/Documents/github.com/fail/cljs-test-runner-out/cljs/core.js:36823:9)
    at Function.cljs.core.ex_info.cljs$core$IFn$_invoke$arity$2 (/Users/erik/Documents/github.com/fail/cljs-test-runner-out/cljs/core.js:36819:26)
    at cljs$core$ex_info (/Users/erik/Documents/github.com/fail/cljs-test-runner-out/cljs/core.js:36805:26)
    at /Users/erik/Documents/github.com/fail/cljs-test-runner-out/cljs/spec/test/alpha.js:133:25
    at G__12915__delegate (/Users/erik/Documents/github.com/fail/cljs-test-runner-out/cljs/spec/test/alpha.js:190:15)
    at G__12915 (/Users/erik/Documents/github.com/fail/cljs-test-runner-out/cljs/spec/test/alpha.js:212:27)
    at Function.cljs.core.MetaFn.cljs$core$IFn$_invoke$arity$3 (/Users/erik/Documents/github.com/fail/cljs-test-runner-out/cljs/core.js:6860:113)
    at G__12995__2 (/Users/erik/Documents/github.com/fail/cljs-test-runner-out/cljs/core.js:14945:45)
    at G__12995 (/Users/erik/Documents/github.com/fail/cljs-test-runner-out/cljs/core.js:14984:20)

mfikes 2018-10-21T18:22:22.000100Z

Oh, I thought it was trivial to repro at the REPL. (I repro'd it in a Planck REPL; let me try a ClojureScript node REPL)

slipset 2018-10-21T18:22:34.000100Z

hang on, I’m calling this with identity

slipset 2018-10-21T18:22:44.000100Z

and the stacktrace says +

slipset 2018-10-21T18:23:17.000100Z

But I guess the (merge) thing is more interesting, as it ends up in a out of memory exception.

borkdude 2018-10-21T18:23:41.000100Z

it could be some other code triggering this, for example the test script that sums the failed and succeeded tests 😉

slipset 2018-10-21T18:23:57.000100Z

Jepps

mfikes 2018-10-21T18:26:40.000100Z

I got a minimal repro for the (merge-with +) issue; I'll drop it in a JIRA.

mfikes 2018-10-21T18:30:43.000100Z

https://dev.clojure.org/jira/browse/CLJS-2942

borkdude 2018-10-21T19:17:55.000100Z

I don’t even get the error that spec reports there

slipset 2018-10-21T19:25:47.000100Z

@mfikes: I got an even better one 🙂

slipset 2018-10-21T19:25:54.000100Z

attaching to the jira

slipset 2018-10-21T19:28:05.000100Z

It’s a much more fun repro with (merge)

borkdude 2018-10-21T20:06:44.000100Z

got rid of the cljs test runner in favor of the simple script that’s also used for planck https://github.com/slipset/speculative/pull/27/commits/35d5d9805983364b96df8f6aaf8d2591e4fb0e00

borkdude 2018-10-21T20:06:54.000100Z

and also forced less deps on our consumers

mfikes 2018-10-21T20:09:21.000100Z

I suspect that Planck could be made to use that test runner as well

slipset 2018-10-21T20:09:54.000100Z

merged

mfikes 2018-10-21T20:10:21.000100Z

Cool. Let me see if I can, via a little conditional code in that namespace, completely eliminate the Planck stuff.

slipset 2018-10-21T20:11:08.000100Z

@borkdude that b0rk circle 😕

mfikes 2018-10-21T20:11:15.000100Z

Oh

slipset 2018-10-21T20:11:21.000100Z

#!/bin/bash -eo pipefail
clojure -R:test:runner:cljstests -Spath
Error building classpath. Specified aliases are undeclared: [:runner]
Exited with code 1

slipset 2018-10-21T20:11:43.000100Z

Probably makes sense since we removed :runner as an alias.

mfikes 2018-10-21T20:13:33.000100Z

I bet we could have a single test runner that spans all 3 targets.

slipset 2018-10-21T20:15:00.000100Z

I’ve always wanted to work on a remote team with devs in US, Europe, and Asia.

slipset 2018-10-21T20:15:14.000100Z

With good devs, you could run a 24/7 operation.

slipset 2018-10-21T20:15:36.000100Z

Problem is (as I’m experiencing now) is that its really easy to sit up too late.

mfikes 2018-10-21T20:23:20.000100Z

I don't think that exiting Node is working with that last commit

mfikes 2018-10-21T20:23:39.000100Z

For me, it hangs, and there is also this https://dev.clojure.org/jira/browse/CLJS-2637

slipset 2018-10-21T20:24:31.000100Z

WIth my latest commit (which fixed the build) or with @borkdude latest?

mfikes 2018-10-21T20:25:20.000100Z

With the Michiel's latest. But perhaps I have a different environmental issue as it seems to work in CI.

mfikes 2018-10-21T20:26:52.000100Z

It hangs if you actually have a test failure. You won't see it if all tests pass.

borkdude 2018-10-21T20:31:04.000100Z

oh yes,

(when-not false #_(cljs.test/successful? m)
    (exit 1))
hangs for me as well 🙂

mfikes 2018-10-21T20:32:31.000100Z

That is real odd. Hrm. Tach also exits Node that way https://github.com/mfikes/tach/blob/master/src/leiningen/tach.clj#L49

borkdude 2018-10-21T20:33:01.000100Z

reproducable:

$ clj -A:test -m cljs.main -re node
ClojureScript 1.10.339
cljs.user=> (.exit js/process 1)

mfikes 2018-10-21T20:34:01.000100Z

If I had to guess, Node may in fact be exiting, but the JVM side doesn't know that this occurred.

mfikes 2018-10-21T20:35:38.000100Z

Speaking of that, it would also need to somehow affect the JVM exit code.

mfikes 2018-10-21T20:36:27.000100Z

Right

mfikes 2018-10-21T20:36:57.000100Z

Maybe we can use Nashorn

mfikes 2018-10-21T20:37:52.000100Z

Trying an experiment with that now...

borkdude 2018-10-21T20:38:58.000100Z

maybe we shouldn’t be using -re but -t?

mfikes 2018-10-21T20:48:10.000100Z

Switching to Nashorn would do it https://github.com/slipset/speculative/pull/28/commits/d56d88cc2ec1de26bba695cfe3a1b5da49e9fb45

mfikes 2018-10-21T20:48:38.000100Z

With respect to -t, -re node implies -t node (or -t nodejs, I can't recall)

borkdude 2018-10-21T20:54:50.000100Z

ok thanks for the fix!

borkdude 2018-10-21T21:00:42.000100Z

@slipset I’m from Europe btw. Only @mfikes is from the USA. I guess he can do the other 12 hours of the day 😉

borkdude 2018-10-21T21:02:05.000100Z

I now have this in my build.boot file for the “big” project:

(require '[speculative.core])
(require '[clojure.spec.test.alpha :as stest])
(stest/instrument)
(stest/unstrument `merge)
Startup is really slow now, like I suspected with these core specs…

mfikes 2018-10-21T21:02:08.000100Z

I’m in Virginia (East Coast)

borkdude 2018-10-21T21:02:23.000100Z

but it runs now 🙂

borkdude 2018-10-21T21:05:52.000100Z

I’m surprised it really works now 😄 if I call (juxt 1) I get an error. but my laptop’s fan is spinning, it’s really an extra toll on performance

borkdude 2018-10-21T21:06:45.000100Z

can we find a way of only checking direct usage of core functions and not indirect? this is what I hoped would happen with clojure being compiled with direct linking, but apparently not

mfikes 2018-10-21T21:07:01.000100Z

Yeah, for every core fn call, it will do a boatload if extra checking

borkdude 2018-10-21T21:07:48.000100Z

is clojure itself AOT-compiled when you consume it via a jar?

mfikes 2018-10-21T21:07:48.000200Z

Right, you’d want spec checking to be disabled “inside” core

slipset 2018-10-21T21:08:43.000100Z

@borkdude I know you’re from Europe. My point was just that working with people in EU/US is tiring (because it’s too easy to always be on). Imagine what it’d be like if we had a fourth person in, say Singapore or soemthing.

borkdude 2018-10-21T21:08:45.000100Z

I guess it makes sense to only turn on instrumentation when your program has finished starting

borkdude 2018-10-21T21:09:22.000100Z

yeah

mfikes 2018-10-21T21:10:25.000100Z

I had a similar problem working with people on the West Coast... they keep working once I was ready to stop, have dinner, family time, etc

slipset 2018-10-21T21:10:51.000100Z

And they arrive so late at work!

borkdude 2018-10-21T21:11:05.000100Z

I’m working for a US company, but luckily my team is in Europe

borkdude 2018-10-21T21:15:06.000100Z

yeah, instrumenting as late as possible just before you’re ready to hit the REPL is what you want with speculative

borkdude 2018-10-21T21:16:12.000100Z

I’m using boot. It’s all running in one JVM. So when I instrument, my clojurescript will probably be compiled with instrumented clojure, which also slows things down

slipset 2018-10-21T21:19:39.000100Z

Anyways, thanks a lot for all the efforts. I’m off to bed.

borkdude 2018-10-21T21:19:53.000100Z

good night!

borkdude 2018-10-21T21:24:11.000100Z

yikes, (fn*) is valid in RC1

borkdude 2018-10-21T21:24:43.000100Z

oh it was valid in 1.8.0 as well phew

borkdude 2018-10-21T21:27:51.000100Z

probably better to ignore things not in this list anyway: https://clojure.github.io/clojure/clojure.core-api.html