8 ms·
ClojureDocs – Community-powered documentation and examples for Clojure
- FraaJad 4y agoThere is also JanetDocs for Janet, which is inspired by Clojure. [1]: https://janetdocs.com https://janetdocs.com [2]: https://janet-lang.org https://janet-lang.org
- swlkr 4y agoHey thanks for the shoutout! JanetDocs turned out ok in the end, it's been running on janet for years at this point, no hiccups to speak of really. (Please be nice to the server)
- carlgreene 4y agoI love this site. As a total Clojure-noob, seeing the different code snippets and approaches for solving problems in Clojure has been a huge help!
- alexott 4y agoYou can also look onto this book (still in progress): https://www.manning.com/books/clojure-the-essential-reference https://www.manning.com/books/clojure-the-essential-referenc... - it tries to explain the standard library with examples, etc.
- chrisweekly 4y agoClojure(Script) holds so much appeal for me, checks ~all the boxes... I just wish it were more popular. Curious why it's not.
- lenkite 4y agoThere are some critical reasons for several people. Performance is one of them and lack of support for async/await is another. JS has also significantly become better in the last 5 years while Clojure has remained mostly static.
- Deadron 4y agoThe tooling is far from simplistic to setup and the available options can be overwhelming. Its all the pain of the JS stack but with less easily available help and tooling that produces less helpful error messages.
- CraigJPerry 4y agoI don’t think it’s that $ npx nbb -e (println "Hello, world") Need to install the following packages: nbb Ok to proceed? (y) Hello, world Or more comprehensively: https://clojurescript.org/guides/quick-start https://clojurescript.org/guides/quick-start
- deleted 4y ago[deleted]
- Deadron 4y agoYour example is missing anything actually related to rendering a webpage.
- capableweb 4y agoUnclear what "rendering a webpage" entails exactly. If you want to do frontend development, you can give shadow-cljs a try, the quickstart is pretty quick: https://github.com/thheller/shadow-cljs#quick-start https://github.com/thheller/shadow-cljs#quick-start If you want to just render server-side HTML, something like compojure (HTTP routing) and hiccup (Clojure data -> HTML) is pretty easy and quick to get started with (https://gist.github.com/zehnpaard/2071c3f55ed319aa8528d54d90f557e3 https://gist.github.com/zehnpaard/2071c3f55ed319aa8528d54d90...). If you want to generate HTML files to serve with nginx/whatever, you can just use hiccup and `(spit)` the resulting HTML to files on disk.
- didibus 4y agoI think the tooling nowadays is pretty simple to setup, but the information out there doesn't speak to that new simple way, so everyone starting is following something that pushes them to outdated tooling. Install Java: brew tap homebrew/cask-versions brew install --cask temurin17 Install Clojure: brew install clojure/tools/clojure Type `clj` at the command line and play with Clojure! Now install VSCode and get the Calva plugin for Clojure from the marketplace. That's it. You'll have autocompletion, jump to definition, code formatting and highlighting, linting, support for editor integrated REPL, debugger, etc. Then you can run: clojure -Ttools install io.github.seancorfield/deps-new '{:git/tag "v0.4.9"}' :as new And now you can create new projects from various templates using: clojure -Tnew app :name myusername/mynewapp This creates a new basic application project for example. Open it in VSCode and you can connect a REPL to it and start working.
- BaculumMeumEst 4y agoIt seems really nice to work with but investing in a niche ecosystem that adds another layer of complexity on top of a tall stack is a hard sell for me personally
- didibus 4y agoThat's a good reason. You are working above Java, JavaScript and others, and that's often something that you need to be aware of and the details of those layers leak in a little. It's still worth it for me personally, but I recon the additional challenge. If you try babashka and nbb it won't feel as much of an extra layer, but they're both interpreted, so expect only Ruby like performance out of them. That said, it's a good way to get started if you don't want an extra layer under Clojure.
- BaculumMeumEst 4y agoI actually did learn Clojure on the JVM. I read two and a half Clojure books, built a number of side projects, and I worked as a Java developer for a few years so the JVM wasn’t an issue. But even with all that, building a web app is far easier for me using Python/Flask, even with minimal experience with the language or framework. And if I want to build a web service, I reach for go because it’s faster and the memory footprint is much smaller. I guess maybe if I was working on a super complex project that justified using Clojure to build elaborate abstractions, I would use it, but most of what I work on is pretty straightforward. ClojureScript I’ve avoided because I keep anything frontend-related that I work on as dead simple as humanly possible to avoid churn. And babashka seems neat too but I’m already comfortable with bash, and shellcheck works well. It sucks but I just can’t seem to find a good use case for Clojure, even though I love the tooling and the language.
- didibus 4y agoI don't know that there are good use cases, you just use what you want. For example I use Clojure and its variants for writing command lines, scripts, websites, backend services, Cron jobs, programming exercises/practice, and desktop applications. Sometimes I use it for data analysis and visualization as well. I use it at work and for personal stuff. It's not that it has some awesome superior or full featured framework or feature for any one of those use cases, just that it's overall a language I like to use and which I have more fun with, and it's sufficient at everything you'd need to seriously use it for all those things. I prefer working interactively over a running program, I prefer the flexibility to extend language to my own needs with macros and higher order functions, I like the simplicity of working directly with data instead of ADTs or single use containers like Classes, I prefer structural editing for navigating and modifying source code, I prefer functional programming over OOP, I prefer immutable defaults and value semantics, and I prefer Clojure's well thought out core sequence manipulation functions. My point is that Clojure is well rounded, there's a few things it's not good enough for, but those are rare, stuff like embedded systems, AAA games, high performance audio or video processing, raw number crunching, etc. For everything else Clojure is adequate, so it's just up to what you want to use, if you enjoy Clojure and it brings you joy, you can just use it, you don't need to find a perfect use case that it's uniquely best at.
- dgb23 4y agoI’m torn about ClojureScript. It is a layer of protection against JS madness, and just a plainly better designed language. State management is much less verbose and easier to reason about. But it is hard to justify outside of SPA and for “in between” use cases that for example Next solves very well.
- slotrans 4y agoThe Lisp Curse http://www.winestockwebdesign.com/Essays/Lisp_Curse.html http://www.winestockwebdesign.com/Essays/Lisp_Curse.html
- simongray 4y agoI don't agree that Clojure suffers heavily from the Lisp curse. The prevailing paradigm in Clojure code is the almost exclusive use of the built-in data literals as function input/output (as opposed to using custom datatypes). For this reason, we don't really use frameworks as Clojure libraries are usually quite simple to glue together. The main reasons why it is still fairly niche I would say are - having to learn a new editor paradigm, e.g. paredit and/or parinfer - functional programming - people who think Java/JVM tech is icky - an overall lack of promotion by Cognitect Furthermore, you will need to both like the properties of Lisp as well as the the restrictions of functional programming on top of coexisting with Java on the JVM. This is a fantastic proposition to my ears, but it sounds horrible to some other people.
- Borkdude 4y agoAlso check out: https://github.com/oxalorg/4ever-clojure https://github.com/oxalorg/4ever-clojure - clojure exercises in the browser https://borkdude.github.io/re-find.web/?args=2%20%5B%3Aa%20%3Ab%20%3Aa%20%3Ab%5D&ret=%5B%3Aa%20%3Aa%5D https://borkdude.github.io/re-find.web/?args=2%20%5B%3Aa%20%... - find clojure functions by example
- loevborg 4y agoClojureDocs is great. See also https://cljdoc.org/ https://cljdoc.org/
- user3939382 4y agoIf only Rich Hickey could time machine himself back to when they were about to decide for the first time to integrate JavaScript with the browser and replace it with ClojureScript...
- lobstrosity420 4y agoI don't have a good source for this but supposedly Brendan Eich wanted to embed Scheme into Netscape, what a world that would have been.
- dgb23 4y agoJavaScript was inspired by Scheme and Self. It’s a wolf in sheep’s clothing in that way. But yes, a Scheme would have solved so many issues and churn that we have to deal with. However people are scared by Lisps so there’s that.
- aneil 4y agoSpecifically, some manager at Mozilla was scared of it.
- native_samples 4y agoEr, why? Most of the churn isn't to do with JS as a language.
- uvtc 4y agoI think it's partly due to: people like regular garden-variety arrays and hashmaps, and don't want to use car, cdr, cons. I like my array and hashmap literals.
- agumonkey 4y agoMaybe better everything or maybe a culture of (set! ...). everywhere, just like auto lisp :). Saying this because I believe lost of the web crowd wasn't ready for function oriented programming at the time.
- lobstrosity420 4y agoI'm about a third of the way into Clojure for the Brave and True. Highly recommend for starting out from zero. You can read it for free at https://www.braveclojure.com/clojure-for-the-brave-and-true/ https://www.braveclojure.com/clojure-for-the-brave-and-true/
- olah_1 4y agoI'm not a fan of books like that because it doesn't teach you real-world usage. You can't be thrown into a standard clojure project repo after reading that book.
- lobstrosity420 4y agoI mean you have to start somewhere though
- ngcc_hk 4y agoTotally agreed. Strangely Common Lisp is easier to start than clojure. Only once I can handle the system build up. Quickload, quick project etc. not clojure so far.
- lobstrosity420 4y agoFor me at least installing Leiningen was pretty straightforward. Just download the executable and it sets itself up. Setting up SBCL and Quicklisp was harder but not by a lot. What problems did you encounter setting up Clojure?
- capableweb 4y agoI used this book (+ others obviously) and I think it was the best one around so far, for me at least. It does contain exercises for you to solve specific problems, which is helpful, but otherwise 4clojure comes closest I guess. By the way, what languages have books that makes you go from knowing zero to being able to jump into a standard X-language project repository after reading through the book? Usually it goes from "knowing nothing" -> "knowing a bit, solving small problems" -> "solving bigger problems, maybe contribute to small projects" -> "being able to contribute substantially" -> "being able to own a project and lead it", and I know of no (single) books that takes you across multiple steps. Usually books focuses on one of the steps.
- dgb23 4y agoThis is a great resource, especially because of its killer feature: user provided examples. Some of the more powerful or special purpose utilities in Clojure are much easier to grasp by looking at some examples. The only thing that is potentially better is a very well maintained wiki, like the MDN docs. But that’s a much bigger effort and only few wikis reach that level of quality. Another cool thing about Clojure is that its core library and other parts of the language are quite small and understandable. I had quite a bit of fun reading and skimming the source, trying to understand things etc.
- dan-robertson 4y agoI remember very fondly that the php documentation would often have nice practical examples in the comments below the documentation for each function.
- agumonkey 4y agoYes, for all its warts, PHP.net docs were fun to read due to short convos with user provided code usage. The opposite of javadocs.
- uvtc 4y ago> killer feature: user provided examples I agree. [Janet](https://janet-lang.org/ https://janet-lang.org/) (which, coincidentally, has some superficial similarities to Clojure) has something similar at its [JanetDocs site](https://janetdocs.com/ https://janetdocs.com/).
- tosh 4y agoOne of the best things about PHP years ago was its documentation with user contributed comments. ClojureDocs is that for Clojure. The comments are gold.
- yladiz 4y agoI am a huge fan of ClojureDocs, and in general community supported/open-to-submission style documentation systems, like MDN, and it was a godsend when I was first starting to learn Clojure. However, although I see this as a positive for the community, I also see it as a necessary outcome to the egregiously terrible official docs. I instead wish that the reality was that this wasn't necessary because the official docs were actually useful in any capacity. I look at Racket, Ruby, and Python as good examples of where the official docs work well enough to not really require a community supported version (yes, the docs quality vary between those three but they're pretty good and significantly better than the official Clojure docs).
- heyzk 4y agoI feel the same way! In fact, I wrote the first version of ClojureDocs (on rails) because people kept complaining on the mailing list about the official docs. It seemed like the best way to move community focus on to bigger and better things.