Skip to content

Commit

Permalink
wip wip
Browse files Browse the repository at this point in the history
  • Loading branch information
mk committed Jul 12, 2023
1 parent c9426b9 commit ed701f5
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 21 deletions.
44 changes: 31 additions & 13 deletions src/nextjournal/clerk/eval.clj
Original file line number Diff line number Diff line change
Expand Up @@ -123,19 +123,19 @@
([store ns name] (record-interned-symbol store ns name) (core-intern ns name))
([store ns name val] (record-interned-symbol store ns name) (core-intern ns name val)))

(defn ^:private eval+cache! [{:keys [form var ns-effect? no-cache? freezable?] :as form-info} hash digest-file]
(prn :eval+cache form freezable?)
(defn ^:private eval+cache! [{:keys [form var session-var ns-effect? no-cache? freezable?] :as form-info} hash digest-file]
(prn :eval+cache form var session-var)
(try
(let [!interned-vars (atom #{})
{:keys [result]} (time-ms (binding [config/*in-clerk* true]
(assert form "form must be set")
(with-redefs [clojure.core/intern (partial intern+record !interned-vars)]
(eval form))))
result (if (and (nil? result) var (= 'defonce (first form)))
(find-var var)
(find-var session-var)
result)
var-value (cond-> result (and var (var? result)) deref)
var-from-def? (and var (var? result) (= var (symbol result)))
var-from-def? (and var (var? result) (= session-var (symbol result)))
no-cache? (or ns-effect?
no-cache?
(boolean (seq @!interned-vars))
Expand All @@ -150,7 +150,7 @@
(fn? var-value) nil
:else hash)
result (if var-from-def?
(var-from-def var)
(var-from-def session-var)
result)]
(cond-> (wrapped-with-metadata result blob-id)
(seq @!interned-vars)
Expand Down Expand Up @@ -184,20 +184,21 @@
(select-keys (keys v/viewer-opts-normalization))
v/normalize-viewer-opts
maybe-eval-viewers)]
#_(prn :cached? (cond no-cache? :no-cache
cached-result? (if cached-result-in-memory
:in-memory
:in-cas)
cas-hash :no-cas-file
:else :no-digest-file)
:hash hash :cas-hash cas-hash :form form :var var :ns-effect? ns-effect?)
(prn :cached? (cond no-cache? :no-cache
cached-result? (if cached-result-in-memory
:in-memory
:in-cas)
cas-hash :no-cas-file
:else :no-digest-file)
:hash hash :cas-hash cas-hash :form form :var var :ns-effect? ns-effect?)
(fs/create-dirs config/cache-dir)
(cond-> (or (when (and cached-result? cached-result-in-memory)
(wrapped-with-metadata (:nextjournal/value cached-result-in-memory) hash))
(when (and cached-result? freezable?)
(lookup-cached-result (session/in-session-ns doc var) hash cas-hash))
(eval+cache! (-> form-info
(update :var (partial session/in-session-ns doc))
#_(update :var (partial session/in-session-ns doc))
(assoc :session-var (session/in-session-ns doc var))
(assoc :form form))
hash
digest-file))
Expand Down Expand Up @@ -303,3 +304,20 @@

#_(eval-string "(+ 39 3)")

(defn eval-string-in-session [code-string session]
(eval-doc (assoc (parser/parse-clojure-string {:doc? true} code-string) :session session)))

(let [code-string "(ns my-session)
^:nextjournal.clerk/sync
(defonce !offset (atom 0))
@!offset
(defn get-offset [] @!offset)
(get-offset)"
{:keys [blocks]} (eval-string-in-session code-string :foo)]




(let [get-values (fn [blocks] (into [] (map (comp :nextjournal/value :result blocks)) [2 4]))
!offset (-> blocks second :result :nextjournal/value :nextjournal.clerk/var-from-def deref)]
(get-values blocks)))
5 changes: 3 additions & 2 deletions src/nextjournal/clerk/webserver.clj
Original file line number Diff line number Diff line change
Expand Up @@ -368,5 +368,6 @@
#_(serve! {:port 7777})
#_(serve! {:port 7777 :host "0.0.0.0"})

#_(binding [*session* "a11"]
(nextjournal.clerk/recompute!))

(map :result
(:blocks @(get-doc! 754506985)))
23 changes: 17 additions & 6 deletions test/nextjournal/clerk/eval_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -214,16 +214,19 @@
(remove-ns 'my-session)
(remove-ns (session/session-ns-name {:ns (create-ns 'my-session)
:session :foo}))
(let [{:keys [blocks]} (eval-string-in-session "(ns my-session)
(let [code-string "(ns my-session)
^:nextjournal.clerk/sync
(defonce !offset (atom 0))
(defn get-offset [] @!offset)"
:foo)]
@!offset
(defn get-offset [] @!offset)
(get-offset)"
{:keys [blocks]} (eval-string-in-session code-string :foo)]

(testing "var-from-def is correctly assigned"
(is (-> blocks
peek
(get 3)
:result
viewer/->value
:nextjournal/value
viewer/var-from-def?)))


Expand All @@ -237,7 +240,15 @@

(testing "session should have fresh atom"
(is (not= @(resolve 'my-session/!offset)
(-> blocks second :result viewer/->value :nextjournal.clerk/var-from-def deref))))))
(-> blocks second :result :nextjournal/value :nextjournal.clerk/var-from-def deref))))


(testing "has correct values"
(let [get-values (fn [blocks] (into [] (map (comp :nextjournal/value :result blocks)) [2 4]))
!offset (-> blocks second :result :nextjournal/value :nextjournal.clerk/var-from-def deref)]
(is (= [0 0] (get-values blocks)))
(swap! !offset inc)
(is (= [1 1] (get-values (:blocks (eval-string-in-session code-string :foo)))))))))

(clerk/defcached my-expansive-thing
(do (Thread/sleep 1 #_10000) 42))
Expand Down

0 comments on commit ed701f5

Please sign in to comment.