Method Values
12 Feb 2024
Clojure 1.12.0-alpha6 introduced method values to Clojure and this post will explore them in a bit more depth.
The olden days
Clojure functions are first-class values and can easily be passed around, but...
Tales of Developing Clojure
12 Feb 2024
Clojure 1.12.0-alpha6 introduced method values to Clojure and this post will explore them in a bit more depth.
Clojure functions are first-class values and can easily be passed around, but...
18 Jul 2022
In the spirit of the classic “How A Bill Becomes a Law”, I’d like to give some insight into how a Clojure question or JIRA ticket becomes a commit in the 15 Jun 2022 Certain tasks call for breaking up sequential data into segments to work on each segment. In Clojure, we often use functions like 30 Sep 2020 Last week we released a new version of the Clojure tools with support for directly executing a Clojure function that takes a map. There is one good example of this sort of program...
04 Sep 2020 A new prerelease version of clj is now available (1.10.1.672) and it includes some important restructuring of how you use clj. This version has not yet been promoted to “stable” release. You can either install...
28 Jul 2020 A new development version of clj is now available (1.10.1.600) and it includes the first public release of several strands of work that have been ongoing over the last few months (with more to come). 28 Feb 2020 February was here and gone in a flash it seems and it has been a blur of activity. I’ve written several interim posts, so I’m not going to go into a ton of detail, but...
20 Feb 2020 I just published the results from the State of Clojure 2020 Survey, but I also wanted to post some thoughts on the open feedback section at the end. I read through all the responses...
18 Feb 2020 I’ve been working on a write-up for the 2020 State of Clojure survey (sorry that’s taking so long). One feedback comment stuck with me: “A lot of libraries in the Clojure ecosystem (including in clojure.core)...
11 Feb 2020 There was a question on Slack this evening about getting a similar effect to the injections feature of Leiningen in clj. There is no built-in feature for this, but you don’t really need one. The...
24 Jan 2020 Happy new year! I spent a good chunk of the last two weeks wrapping up and releasing the new S3 transporter for tools.deps/clj (supporting access to public and private S3 repos)....
10 Jan 2020 Happy new year! I spent some time with core.async this week, trying to clear up a bunch of old patches and tickets. Many thanks to Kevin Downey, Nicola Mometto, Angus Fletcher, Leon Grapenthin,...
20 Dec 2019 Probably the last update of the year. I had hoped to do it this weekly in 2019. That didn’t quite happen but since this is the 25th update of the year, I average about one...
06 Dec 2019 I’ve fallen off the pace on these journals but here’s an update! Most fresh in my head is some ongoing work on Spec 2. This week I added 06 Oct 2019 Lately we’ve been starting to work on planning for Clojure 1.11. I’ve collected a list of possible features and problem areas and we’re starting to flesh those out a bit more...
10 Aug 2019 I’ve mostly been doing spec 2 work in the last couple weeks. I finally completed the closed check rewrite that I started a while back. When I...
26 Jul 2019 I took a summer break away from these journals due to vacation and just generally working on other stuff, but I’m back! Probably the big thing to talk about is the new Q&A...
07 Jun 2019 Hey all, I’m a little off rhythm as I’ve had some vacation time recently, but now is a good time to check in! Today we released Clojure 1.10.1, which is the...
18 May 2019 We released Clojure 1.10.1-beta3 this week - please give it a whirl. The only change in it is CLJ-2504 which redoes the clojure.main changes to support different error reporting targets. The...
08 May 2019 Stu screened and I updated CLJ-2504 headed for a 1.10.1-beta3. That probably won’t happen till early next week due to travel. This ticket is mostly cleanup on the new error...
28 Apr 2019 We’ve been using a Clojure Confluence wiki (graciously provided by Contegix) for a long time. However, it has not been actively used in quite some time and the older version of...
23 Apr 2019 I read The Curious Case of Clojure Contrib and unfortunately I can’t help but disagree with a lot of it. Yet strangely, I agree almost entirely with its conclusions. I do agree with the...
19 Apr 2019 As I mentioned last week, I’ve been working on adding a new form of closed spec checking and that’s in master for spec 2 now, or at least the first cut...
14 Apr 2019 I’ve been fighting some bronchial stuff this week so didn’t quite get a full week in, but there are a couple things to talk about. This week we released Clojure 1.10.1-beta2,...
07 Apr 2019 This week was spent on some additional updates to the schema/select stuff from last week. The schema and select mini guide has been updated along with the changes. Here’s...
29 Mar 2019 I spent the bulk of the week this week focused on implementing schema support and modifying s/select in spec-alpha2. Rather than leave long-winded stuff here, I tried to summarize in...
23 Mar 2019 The big news this week is the release of Clojure 1.10.1-beta1. This is a tightly scoped release and we are not expecting to add much, if anything, more to it before it’s...
16 Mar 2019 I spent most of the week on spec/select and committed the first version of it. The idea with s/select is to separate the set of attributes allowed in a map from which ones...
08 Mar 2019 As Windows users are painfully aware, we don’t have an official version of 02 Mar 2019 Following up on this from last week, I had the idea that maybe moving all of the code out of the RT static initializer was not necessary. The other big thing...
22 Feb 2019 I wrote about this issue last week and spent a good chunk of this week better understanding the scope of the problem and brainstorming some possible mitigations. Probably the best...
16 Feb 2019 There was a rash of reports this week about significant startup time slowdowns after switching to the latest version of Java 8 and 11. I tried to help on the first couple...
10 Feb 2019 Spent some time last week writing up, editing, and releasing the 2019 State of Clojure survey results. I also wrote in the prior entry some feedback on a number of...
07 Feb 2019 Daniel Compton posted a breakdown and summary of comments from the Clojure survey and I wanted to highlight a few things in response to the comments there. Re spec, we are working on...
02 Feb 2019 Again this week, I spent most of my focus time on spec 2. Here’s a picture I spent a lot of time making: Trying to capture a lot...
28 Jan 2019 Another week spent mostly on spec. In particular, Rich and I had a long talk about the different spec representations and what different parts of the spec API will accept. I updated the...
18 Jan 2019 I spent almost the entire week completing the large chunk of refactoring I’ve been doing in spec-alpha2. At this point, I think everything is put back together. I’ve updated the spec-alpha2 readme...
11 Jan 2019 Way back in 2010, Chas Emerick had the excellent idea to take a survey of Clojure developers and then keep doing it every year. In 2014, we took over doing and reporting...
04 Jan 2019 I got some actual down time over the holidays and mostly stayed away from the keyboard, which was a nice recharge. Between that and the short week this week, I don’t have too much to...
21 Dec 2018 Kicked the week off with a bang, releasing Clojure 1.10. We do small Clojure releases all the time and with every release there are a bunch of mundane tasks - the...
17 Dec 2018 One of the things I spent the most time working on for Clojure 1.10 (along with Rich and Stu) is updated error messages. The thing we spent the most time working through was identifying the...
14 Dec 2018 Trying something new here … writing down some visible things I worked on this week (not everything is visible of course :) and some conversations I was in around the Clojure sphere. This will be...
21 Jun 2018 Clojure has always avoided including reader macros with the goal of making all code readable by all users of Clojure, without requiring optional code. It’s a small constraint, but on balance I think has been...
04 May 2018 This is a work-in-progress / sneak-peek of a new feature in tools.deps.alpha targeted at the problem of dynamically adding libraries while working at the REPL. For example, perhaps you’re working along and discover a...
16 Mar 2016 What are the Clojure collection types? Most Clojurists would say lists, vectors, maps, and sets are all you need. You might add seqs too - they are collection abstractions (views) which can be backed by...
01 May 2015 In the spirit of the classic “How A Bill Becomes a Law”, I’d like to give some insight into how a Clojure JIRA ticket becomes a commit in the Clojure code. 27 Apr 2015 There was a question recently on the Clojure mailing list about when to use multimethods vs protocols vs case vs cond: There are situations where I want to dispatch functions using based on...
27 Jan 2015 There are a number of questions and gotchas that come up over and over in Clojure forums. I thought it might be useful to write some of them up. I initially planned to write them...
18 Jan 2015 I’ve written in the past about making functions in core that generate sequences (specifically 07 Jan 2015 Continuing from the last post, one of the things I’ve worked on for Clojure 1.7 is improving the performance of 06 Jan 2015 There are a few tickets in Clojure 1.7 around the scope and performance of the 02 Jan 2015 Sequences are the key abstraction that connects two of the most important parts of Clojure - immutable persistent collections and the sequence library. Lisp has a deep tradition of list-oriented transformation functions. In Clojure, these...
21 Dec 2014 One fun ticket (CLJ-1603) that I worked on recently involved retrofitting some existing sequence “generator” functions to be directly reducible. Specifically, the clojure.core functions cycle, iterate, and repeat. I’ll just talk about repeat in...
19 Dec 2014 Today’s post is about a compiler change in 1.7.0-alpha4 that reduces compile times on some (not all) projects, as tracked in CLJ-1529. This ticket was filed by the perspicacious Zach Tellman. Zach was...
18 Dec 2014 Continuing from yesterday’s post, I wanted to cover the interpose transducer from CLJ-1601. The sequence version of interpose is a straightforward combination of other existing sequence functions (repeat, interleave, and drop). It’s implemented...
17 Dec 2014 I wanted to talk in this post about implementing some new transducer impls for existing sequence functions which is based on CLJ-1601. If you haven’t checked into transducers yet, it’s probably best if you...
15 Dec 2014 In Java, there are two forms of numbers - primitive and boxed (Object) forms. This distinction may be resolved some day with value types, but for now that’s just the reality of the JVM...
13 Dec 2014 Ticket CLJ-1429 started from a tweet by Anton Logvinenko (@piecalculus) indicating that a heavily used multimethod was showing a cold cache. I have seen this problem in my own code in the...
Efficient partitioning
partition-all
and partition
to break sequential data (or code)...
An example of clj execution
clj exec update
clj exec
Journal 2020.3 - 1.0 libs, survey, brew tap
Clojure survey feedback
1.0 all the things
Customizing your REPL in clj
Journal 2020.2 - s3 transporter, survey
clj s3 transporter
Journal 2020.1 - Clojure survey, core.async
core.async
Journal 2019.25 - dep graphs, s3 transporter, spec 2
Journal 2019.24 - spec and-, tools.deps.graph
Spec 2
s/and-
, which...
Journal 2019.23 - 1.11, spec
Clojure 1.11 planning
Journal 2019.22 - spec updates, tools.deps
Spec 2 - closed spec checking redo
Journal 2019.21 - ask.clojure.org, tools.deps
ask.clojure.org
Journal 2019.20 - Clojure 1.10.1, jira migration
Clojure 1.10.1
Journal 2019.19 - Clojure 1.10.1-beta3, JIRA migration
Clojure 1.10.1-beta3
Journal 2019.18 - Clojure 1.10.1 work, clojure dev
Clojure 1.10.1 work
Journal 2019.17 - confluence, jira, closed specs
Clojure Confluence
The Completely Ordinary Case of Clojure Contrib
Journal 2019.16 - closed spec checking
Closed spec checking
Journal 2019.15 - 1.10.1-beta2, closed schemas
Clojure 1.10.1-beta2
Journal 2019.14 - schema and select
Spec schema and select
Journal 2019.13 - schema and select
Spec schema and select
Journal 2019.12 - Clojure 1.10.1-beta1
Clojure 1.10.1-beta1
Journal 2019.11 - spec/select, clj jiras, tools.deps
spec/select
Journal 2019.10 - clj on windows, stable tests
clj on Windows
clj
for this platform right now. It’s hard for me to believe, but it was a...
Journal 2019.9 - jdk regression, clojure.main, spec
JDK regression
Journal 2019.8 - jdk regression, clojure.main
JDK regression
Journal 2019.7 - jdk regression, spec, sets, tools.deps
JDK regression
Journal 2019.6 - spec
Survey results
Survey comments
Journal 2019.5 - spec
spec
Journal 2019.4 - spec, surveys
spec
Journal 2019.3 - spec, clojure.main errors
spec
Journal 2019.2 - survey, spec
Clojure Survey
Journal 2019.1 - tools.deps
Journal 12/21/2018 - Clojure 1.10, site, tools.deps
Clojure 1.10
Clojure 1.10 error messages
Journal - RC5, illegal access, docs, clojure.test
Default data reader function and tagged literals
add-lib
Inside Clojure's Collection Model
Contributing to Clojure
Polymorphic performance
Clojure Tip - "contains?"
Reducible sequence generators
cycle
, iterate
, and repeat
) directly reducible in CLJ-1603. The approach described there was...
Improving the performance of vec
vec
, which takes a collection and returns a vector. This work is...
Improving the performance of set
set
and vec
functions, which create new sets and vectors from other collections - CLJ-1384,...
Sequences
Creating a reducible repeat
Improving compile times
Creating an interpose transducer
Creating a distinct transducer
Boxed math warnings
Caching multimethod default value dispatch