4 ms·
Modern Clojure includes that - it's deps.edn (though I'm good with Leiningen). And ditch Emacs (unless you are already using it/used to it) and try VSCode + Ca
by kimi 4y ago
Modern Clojure includes that - it's deps.edn (though I'm good with Leiningen).
And ditch Emacs (unless you are already using it/used to it) and try VSCode + Calva that runs basically out of the box.
Exceptions... yes.... they are clear when you know what they mean, but it takes time, because they are so long.
Startup... you only start a REPL once, so does not really matter (to me at least). For compiled code, you can try GraalVM, that has zero-ish startup time - because all static initialization is resolved at compile-time.
Just my $.02
Edit: Calva also includes a debugger - never used it, but here it is https://calva.io/debugger/ https://calva.io/debugger/
- funstuff007 4y ago> you only start a REPL once, so does not really matter People say this a lot in Clojure, but don't you worry about global vars that no longer point to what you thought they pointed to? For this reason alone, I almost always load a new Python REPL.
- kimi 4y agoNot sure what you mean here, but... no. You can rebind, of course, but I never found myself in a situation where the REPL was too bad to be used. I usually restart the REPL only when I add a dependency, so it will be fetched without me caring about it.
- phtrivier 4y agoI kept getting in this exact situation when defining tests and wanting to _forget_ a test. And the OC's onboarding experience reminds me of mine. You need some external tutorial / book to get setup. Also, last time I used calva, the only thing I got was kondo complaining they the default test created in a brand new project were using unknown symbols, or something. So I assumed my setup was wrong, and gave up. Clojure is "simple made easy _once you've done all the hard part as a bizuthage_"
- kaba0 4y agoFP languages are quite immune to that. Sure, you can probably do some stupid thing, but that likely never happens. At least that’s my experience with Clojure REPLs and Haskell’s GHCI.
- mjul 4y agoExactly. It ties to the excessive startup overhead. If you rename things and change stuff you must run the tests in a fresh JVM to ensure that everything has been evaluated in a consistent state rather ad hoc evaluation in the REPL. This means running from the command line in addition to your REPL or restarting the REPL regularly.
- frou_dh 4y agoI don't know - the kind of programmer who's always worried about every what-if probably shouldn't choose any dynamic interactive language in the first place. There are plenty of language permutations out there for all sensibilities.
- synthc 4y agoBut programmers should be worried about every what-if scenario, regardless of language.
- funstuff007 4y ago> worried about every what-if I hear you about this, but during prototyping one cannot be excessively concerned with did I change the global state enough such that it's better to just start a new REPL (and have to worry about the associated costs)? And if you ask this question a lot, long running REPLs are not a good idea for development.
- synthc 4y agofor prototyping a long running repl is fine. For validation/testing starting with a clean slate takes away a lot of my worries.
- CraigJPerry 4y agoThere’s a tool called Clerk which among other things resolves this concern about out of sync definitions https://github.com/nextjournal/clerk https://github.com/nextjournal/clerk
- roenxi 4y agodeps.edn isn't solving the same problem as lein. Lein you install it, run "lein" and it starts telling you what to do to get a running Clojure project. Deps you install Clojure and ... no hints how to get to a running project. "touch deps.edn"? Still no hints how you get from here to functioning clojure dependencies. It isn't a YAML file. Isn't JSON. No template. Read the reference page (https://clojure.org/reference/deps_and_cli https://clojure.org/reference/deps_and_cli)? We quickly learn that you can execute a function by invoking "clojure [clj-opt] -X[aliases] [a/fn] [kpath v] kv-map?". Still not much closer to installing a dependency, a lot of people probably give up here. Oh, there is a guide! Read the guide (https://clojure.org/guides/deps_and_cli https://clojure.org/guides/deps_and_cli). Now we get to our first dependency. Lets add a 2nd one! {:deps {com.github.seancorfield/next.jdbc {:mvn/version "1.3.834"}} {clojure.java-time/clojure.java-time {:mvn/version "1.1.0"}}} $ clj Error building classpath. Error reading edn. Map literal must contain an even number of forms (~/deps.edn) This is a pretty plausible on-boarding with deps. Beginners should be using lein, it is a lot more forgiving and doesn't leave people staring at an error message feeling stupid after 10 minutes being confused about what the docs are trying to prepare them for. It'd be good to include something like that in the default distribution so they don't have to figure that fact out by failing a bit with deps.
- dig1 4y agoThis! Leiningen is Maven for Clojure and tools.deps is Ant, for those who used them in Java-land. tools.deps can't build your project without a separate library called tools.build, just like Ant can't pull down dependencies without Ivy. Maven (like Leiningen) bundles all of that in a single tool, plus adds tons of more options. On top of that, you have a plugin for almost anything.
- synthc 4y agodeps.edn is a building block not a finished build tool. You need to import libraries for common tasks like building an uberjar. There are plenty of reasons to start a new REPL: - adding a library - changing the project config - messing up the repl state - starting with a clean slate - switching branches