7 ms·
Clojure 1.11 is now available
- jakebasile 5y agoMuch love to all the people that make Clojure such a wonderful language to use. I'm particularly happy with the new keyword args semantics, which solves a long standing pain point.
- Decabytes 5y agoGlad to see Clojure continuing to improve. Racket borrows a lot from Clojure^1,2,3 so its success fuels ours as well. With the other post on here about Java 18 including Pattern Matching, I'm glad that good ideas continue to cross pollinate between different languages. Programming is still a young field compared to other professions, and there is still a lot of good things left to discover! 1. https://docs.racket-lang.org/collections/index.html https://docs.racket-lang.org/collections/index.html 2. https://docs.racket-lang.org/seq/index.html https://docs.racket-lang.org/seq/index.html 3. https://docs.racket-lang.org/threading/index.html https://docs.racket-lang.org/threading/index.html
- agumonkey 5y agoInteresting to see racket and clojure cross pollinating. I wonder what other non mainstream language is part of this game (julia, factor, ..)
- kbuchanan 5y agoIt doesn't just keep on improving, but stays backwards compatible with every new release!
- zitterbewegung 5y agoA lot of clojure has been borrowing from main stream programming languages that lisp users don’t think of using at all which is great.
- bjoli 5y agoThose are third party packages, of which only the threading package is popular.
- Decabytes 5y agoYes but people are still interested in it. For example in the Rhombus Proposal (Formerly Racket2) there is a section on generic collections, with a link to a blog post comparing Racket and Clojure from 2010. 1. https://github.com/racket/rhombus-prototype/blob/master/resources/state-of-rhombus.md https://github.com/racket/rhombus-prototype/blob/master/reso... 2. http://programming-puzzler.blogspot.com/2010/08/racket-vs-clojure.html?m=1 http://programming-puzzler.blogspot.com/2010/08/racket-vs-cl...
- brtmr 5y agoSweet, variadic maps sound really useful, I am always having to take a moment when mixing functions that take keyword arguments vs. option maps. Also, some of those functions added to core show up in my code as convenience functions - Glad I can now just make use of core.
- jdminhbg 5y agoI definitely have random-uuid defined in a half-dozen of my own projects that can go away now.
- timgilbert 5y agoJuxt had a recent blog post covering the new Clojure (iteration) function in depth, which is useful for abstracting over sequences that require some state management to access, such as a paginated API. https://www.juxt.pro/blog/new-clojure-iteration https://www.juxt.pro/blog/new-clojure-iteration
- buzzwords 5y agoI do wonder what has to happen for greater adoption of Clojure.
- joshlemer 5y agoIf you have ideas on how to improve Clojure adoption, there's a #growth channel on the Clojurian slack server.
- jdminhbg 5y agoMaybe a fuller understanding of its applicability to discussions like this one from yesterday? https://news.ycombinator.com/item?id=30753127 https://news.ycombinator.com/item?id=30753127
- deleted 5y ago[deleted]
- newlisp 5y agoCompanies seeing some value in it and pushing it but that won't happen. Most companies today want static typing and don't want to rely on discipline for stuff like maintaining documentation/more tests and having them up to date. If it's true that engineers leave after one/two years then I can't blame them. Whatever cost static typing brings, it's worth it to them. Just look at how typescript usage has exploded.
- mixedCase 5y agoI would never use it under any circumstance of my choosing, since it's a dynamically typed language and I don't have any further need for any more of those at the moment; in fact only looking to cut down on my usage of them. But from my experience working with it on real projects: - Good tutorials, combined with library and build tooling integration for usage with GraalVM. Startup times make it a horrible fit for anything other than long-lived daemons. - Speaking of build systems: more ecosystem coalescing around tools.deps, there's a lot of resources around Leiningen, not too many around the blessed native tooling (I know, I know, it's fairly new for Clojure standards, but it is a problem). - More and better linters for popular libraries. Without good types, you need something to guide you when you're misusing an API; the team where I worked with Clojure lost a lot of time getting Reagent patterns wrong. My final complaint is something that I don't think can't ever be fixed without undoing what makes Clojure, Clojure: REPL-driven development combined with dynamic typing, in the same way as its cousin: debugger-driven development, often leads to write-only code that works but good luck using it or modifying it if you don't have good automated tests to tell you how it's supposed to be used and more importantly how it's not. It doesn't help that tests are de-emphasized by the community precisely because of REPL-driven development. "Just put it on the REPL and see what it does" is not a good way of reasoning about code, and makes it easy and convenient to just pile on more hacks that may or may not break something instead of promoting understanding. "Just write good code and have discipline, you're doomed if you can't do that anyway" does not excuse that other languages have radically different tools and practices that lead to far fewer footguns.
- lbj 5y agoThe contributor list is shrinking :(
- fogus 5y agoThe contributor list is append-only. :)
- mswift42 5y agoThe contributor list is expanding :)
- iLemming 5y agoThe contributor list ain't list at all. It's an immutable collection. I am so happy to see that not one but a couple of those names are my colleagues. They send patches to clojure.core. I send comments to HN :). I'm proud of them, I hope they proud of me too.
- jjtheblunt 5y agothat's a pretty great comment!
- silver-arrow 5y agoSo thankful to be programming in Clojure the past few years. Thank you, Clojure Team, for all you do! My favorite things about using Clojure: 1. Runs on the JVM. Battle tested, tons of libraries, and well engineered. 2. Immutable Data Structures. I wouldn't want to live without this safety ever again. 3. LISP syntax - so simple to remember and just basically code functions! I also find reading Clojure code very simple vs other procedural languages. 4. REPL development. 5. Transducers - not unique to Clojure, but just love them so listed it. Great language.
- haolez 5y agoAbout the syntax. I tend to prefer Scheme because (, [ and { mean the same thing, whether in Clojure they are different constructs. How do you feel about this minor point?
- silver-arrow 5y agoI guess for me, I like having them be different things, like they are in Clojure. But that could certainly be because Clojure is my first and only exposure to a LISP type syntax.
- canadianfella 5y ago
- gmfawcett 5y ago> (, [ and { mean the same thing... That's not a feature of Scheme. It must be a feature of the implementation you use. (Which one?) E.g. in R7RS, [ ] and { } are explicitly reserved for future language extensions. https://standards.scheme.org/official/r7rs.pdf https://standards.scheme.org/official/r7rs.pdf
- haolez 5y agoMy last Lisp project was using Racket, but when it was called PLT Scheme. It's been a long time since then :)
- pjmlp 5y agoNice to see it keeping to improve. Whìch happens to be the favourite alternative JVM language from Brian Goetz, https://youtu.be/GedrGWu16_I https://youtu.be/GedrGWu16_I
- fuzzythinker 5y agoIf you have been filtering out clojure due to dislike of JVM, give it a try with GraalVM either directly [1] or via Babashka [2]. GraalVM will in most cases not only run your code much faster than JVM, but cuts startup time from seconds down to msecs [3][4], not to mention compiling to native with c api or LLVM. With Babashka, it packages a subset of GraalVM so you don't have to install that but is more limited. So if you just want to play around with clojure to see if you like it, Babashka is a great way to start. [1] https://github.com/oracle/graal https://github.com/oracle/graal [2] https://github.com/babashka/babashka https://github.com/babashka/babashka [3] https://arnoldgalovics.com/java-cold-start-aws-lambda-graalvm/ https://arnoldgalovics.com/java-cold-start-aws-lambda-graalv... (large proj - dynamoDB) [4] https://dev.to/wololock/groovy-script-startup-time-from-2-1s-to-0-013s-with-graalvm-1p34 https://dev.to/wololock/groovy-script-startup-time-from-2-1s... (small proj)
- orestis 5y agoA nitpick: Your code will not run faster in GraalVM vs the JVM, it will start faster. If its small scripts where the startup time dominates, then of course it goes faster. For anything long-lived (even in the range of tens of seconds), the JVM has better performance.
- fnordsensei 5y agoTo be fair, it might run faster as well, or not. It seems to vary from case to case.
- hiepph 5y agoI owe a lot to Babashka. Now I can use Clojure for real-job scripting instead of just playing for fun with it. For a one-liner scripting I still use Bash but for a larger script I now use Clojure.
- d_t_w 5y agoThe parse-*, update-keys, update-vals, and random-uuid functions are great additions to core. I look forward to dropping the custom versions from each of my projects!
- epolanski 5y agoEvery person I know that has developed in Clojure has high praise for it. How does it compares to the likes of other statically typed Lisp dialects such as Rackett? I've always wanted to read "Clojure for the brave and true" but there's just enough lisp books (my favorite being "Structure and Interpretation of Computer Programs") I can read without actually wanting to use the language.
- roguas 5y agoI think a lot of people that come from clojure arrive at consensus that you can instrument some typechecking on edges. Define what is valid(input) data and move it through your program. Inside your program it rarely matters(from validity perspective) if something is a list, tuple, lazylist - it is a collection. Things are either single value, collection or associative the semantics around each in code are pretty obvious in most cases. Its always contentious topic, there are no answers.
- masijo 5y agoI use Clojure every day at work and it's my favorite dynamic functional language. That said, I think in large projects like the one I'm working in, a statically typed language would've been better. I know Clojure has spec and other similar libraries but it's just not a replacement for static typing. I love Clojure and would use it for small projects if given the chance but I think there are diminishing returns when you scale up, specially if you deal with a complex data structures which get encoded and decoded to JSON (messes up things like keywords).