Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

dirac + cljs-repl max call stack exceeded?

オープン
#75 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
25/100
issue の種類
バグ
明瞭さ
説明が足りない
活発さ
停滞
技術スタック
clojure

調査の方向性

リンクされている gen-cljs dirac-start-browser-repl-max-call-stack-exceeded branch の問題を、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 はありません

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

binaryage/dirac のほかの issue

binaryage/dirac の issue をすべて見る

似ている issue

Clojure の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。