Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

dirac + cljs-repl max call stack exceeded?

未关闭
#75 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
25/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
停滞
技术栈
clojure

调研方向

从链接的 gen-cljs dirac-start-browser-repl-max-call-stack-exceeded 分支复现该问题,从 build.boot 第 40 行和 Boot dev 任务开始。运行 boot dev、boot repl -c,然后运行 (start-repl),重新加载 localhost:3000,并检查 clojure.browser.repl 的 bootstrap 栈。确定 Dirac 集成是否导致递归,并恢复可正常工作的 CIDER/Emacs ClojureScript 求值后,即视为完成。

由索引模型根据 Issue 内容生成。

描述

repro needed

Do feel free to shoot this down if this is not an issue with dirac, rather some of the other dependencies, a combination, or a too complex setup to dig into 😄

In an attempt to see how good of a cljs stack I could come up with, I was trying out dirac in combination with a few other tools along with boot; dirac, boot-cljs-devtools, boot-cljs-repl, boot-cljs, boot-http, boot-reload

This branch holds a repro https://github.com/torgeir/gen-cljs/tree/dirac-start-browser-repl-max-call-stack-exceeded.

What I'm seeing is by running boot dev (after adding (dirac)) to fire everything up, and connecting to it in another terminal window with boot repl -c - it connects nicely

➜  gen git:(dirac-start-browser-repl-max-call-stack-exceeded) boot repl -c
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
REPL-y 0.3.7, nREPL 0.2.13
Clojure 1.9.0
Java HotSpot(TM) 64-Bit Server VM 9+181
        Exit: Control+D or (exit) or (quit)
    Commands: (user/help)
        Docs: (doc function-name-here)
              (find-doc "part-of-name-here")
Find by Name: (find-name "part-of-name-here")
      Source: (source function-name-here)
     Javadoc: (javadoc java-object-or-class-here)
    Examples from clojuredocs.org: [clojuredocs or cdoc]
              (user/clojuredocs name-here)
              (user/clojuredocs "ns-here" "name-here")
boot.user=>

but running (start-repl)

boot.user=> (start-repl)
<< started Weasel server on ws://127.0.0.1:63421 >>
<< waiting for client to connect ... Connection is ws://localhost:63421
Writing boot_cljs_repl.cljs...

and reloading the web page at http://localhost:3000 in chrome canary

 connected! >>
#object[RangeError RangeError: Maximum call stack size exceeded]

RangeError: Maximum call stack size exceeded
    at cljs$core$_EQ_ (http://localhost:3000/js/gen.out/cljs/core.js:4484:42)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:273:19)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
To quit, type: :cljs/quit
cljs.user=>

The repl still seems to be working

cljs.user=> (+ 1 2)
3

but the dirac console also complains

VM824:1 Dirac encountered an internal eval problem (:dirac.implant.eval/eval-exception).
RangeError: Maximum call stack size exceeded
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:272:33)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
    at Object.clojure.browser.repl.bootstrap.goog.require [as require__] (http://localhost:3000/js/gen.out/clojure/browser/repl.js:295:16)
While evaluating:
goog.provide('cljs.user');
goog.require('cljs.core');
goog.require('cljs.repl');
goog.require('cljs.pprint');

//# sourceURL=repl://dirac-repl/dirac/228de5b1-1/init.js
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbDpcL1wvZGlyYWMtcmVwbFwvZGlyYWNcLzIyOGRlNWIxLTFcL2luaXQuanMiLCJzb3VyY2VzIjpbImluaXQuY2xqcyJdLCJsaW5lQ291bnQiOjcsIm1hcHBpbmdzIjoiQUFBQSIsIm5hbWVzIjpbXSwic291cmNlc0NvbnRlbnQiOlsiKG5zIGNsanMudXNlciAoOnJlcXVpcmUgW2NsanMucmVwbCA6cmVmZXItbWFjcm9zIFtzb3VyY2UgZG9jIGZpbmQtZG9jIGFwcm9wb3MgZGlyIHBzdF1dIFtjbGpzLnBwcmludCA6cmVmZXIgW3BwcmludF0gOnJlZmVyLW1hY3JvcyBbcHBdXSkpIl19

Is this a problem? I don't know. The issue I am having with it is that my emacs instance is no longer able to run cider-connect followed by (start-repl) and have a working repl inside emacs to evaluate cljs code on the go.


I am running boot with the following ~/.boot/profile.boot in place to have things working inside emacs.

(def v-tools-nrepl "0.2.13")
(def v-cider-nrepl "0.17.0-SNAPSHOT")
(def v-refactor-nrepl "2.4.0-SNAPSHOT")

(deftask cider "CIDER profile"
  []
  (require 'boot.repl)
  (swap! @(resolve 'boot.repl/*default-dependencies*)
         concat `[[org.clojure/tools.nrepl ~v-tools-nrepl]
                  [cider/cider-nrepl ~v-cider-nrepl]
                  [~'refactor-nrepl ~v-refactor-nrepl]
                  ])
  (swap! @(resolve 'boot.repl/*default-middleware*)
         concat '[cider.nrepl/cider-middleware
                  refactor-nrepl.middleware/wrap-refactor
                  ])
  identity)

Without (dirac) in place in the boot dev task, substituting the boot dev mentioned above with boot cider dev and running cider-connect followed by (start-repl) seems to be working nicely and allows me to eval cljs from the emacs instance.

Edit:
With these versions of boot and clojure, on java 9

cat ~/.boot/boot.properties
#http://boot-clj.com
#Fri Jan 26 21:08:58 CET 2018
BOOT_VERSION=2.8.0-SNAPSHOT
BOOT_CLOJURE_VERSION=1.9.0
BOOT_CLOJURE_NAME=org.clojure/clojure

主要语言
Clojure
星标
775
派生
29
PR 合并指标
30 天内没有已合并 PR

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

binaryage/dirac 的其他 Issue

查看 binaryage/dirac 的全部 Issue

相似的 Issue

更多 Clojure Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。