HN user

puredanger

4,983 karma
  Name:    Alex Miller
  Tweets:  @puredanger
  Blog:    http://tech.puredanger.com
  Job:     Nubank - Clojure dev
  I made:  Strange Loop conference - https://thestrangeloop.com
  Nachos:  yes, have some
Posts201
Comments418
View on HN
felixbarbalet.com 4mo ago

Simple Made Inevitable: The Economics of Language Choice in the LLM Era

puredanger
3pts0
www.youtube.com 6mo ago

Rich Hickey's opening remarks from Clojure/Conj 2025 [video]

puredanger
6pts0
www.youtube.com 1y ago

ClojureScript from First Principles [video]

puredanger
124pts30
bytes.vadelabs.com 1y ago

Why we built Vade Studio in Clojure

puredanger
163pts144
www.youtube.com 1y ago

"Clojure in live sports television" by Christoph Neumann (Clojure/conj 2024) [video]

puredanger
6pts0
www.youtube.com 4y ago

Clojure (the first talk) – Rich Hickey at LispNYC (2007)

puredanger
9pts0
webyrd.net 4y ago

2022 QuIPS Prize for quines and self-replicating programs

puredanger
1pts0
webyrd.net 4y ago

2022 Mant Prize for reflexive and introspective interpreters and processes

puredanger
1pts0
www.youtube.com 5y ago

“Everything I Have Learned I Have Learned from Someone Else”, David Nolen (2013)

puredanger
1pts0
www.youtube.com 5y ago

“Systems that run forever self-heal and scale” by Joe Armstrong (2013)

puredanger
2pts0
cognitect.com 5y ago

Sponsoring Open Source Developers

puredanger
322pts73
clojure.org 6y ago

A History of Clojure [pdf]

puredanger
627pts374
clojure.org 7y ago

State of Clojure 2019 Survey Results

puredanger
47pts9
thestrangeloop.com 8y ago

Strange Loop 2018 CFP is now open

puredanger
1pts0
blog.datomic.com 8y ago

Datomic Cloud

puredanger
9pts0
thestrangeloop.com 9y ago

Strange Loop 2017 schedule

puredanger
4pts0
blog.cognitect.com 9y ago

Improving on Types: Specing a Java Library with Clojure

puredanger
5pts0
www.surveymonkey.com 9y ago

2016 Clojure Community Survey

puredanger
3pts0
juxt.pro 9y ago

Clojure in the UK: Puppet

puredanger
2pts0
labs.ig.com 9y ago

Lines of Code – does it matter? [Java vs. Clojure]

puredanger
4pts0
magazine.aerospacemanufacturinganddesign.com 9y ago

Updating Diagnostics for Boeing's 737 MAX [Clojure]

puredanger
3pts0
blog.cognitect.com 9y ago

Interactive Development with Clojure.spec

puredanger
3pts0
blog.cognitect.com 9y ago

Clojure spec screencast: Testing

puredanger
2pts0
blog.cognitect.com 10y ago

Clojure spec with Rich Hickey [podcast]

puredanger
7pts0
redmonk.com 12y ago

The RedMonk Programming Language Rankings: January 2014

puredanger
81pts32
www.infoq.com 12y ago

Clojure core.async [video]

puredanger
47pts8
www.infoq.com 12y ago

Gershwin: Stack-based, Concatenative Clojure

puredanger
1pts0
www.infoq.com 12y ago

Javascript... FOR SCIENCE

puredanger
1pts0
blog.datomic.com 12y ago

Datomic Pro Starter Edition

puredanger
111pts57
www.infoq.com 12y ago

"Functional Reactive Programming in Elm" by Evan Czaplicki

puredanger
4pts0

This is very cool, glad to see it! I couldn’t figure out which version of the JVM you used for the core.async tests? Also, you are using old versions of both Clojure and core.async which have both had optimizations in the last year that should help all of these. Some of these tests may also be helped by using io-thread (with JVM virtual threads) instead of go in latest core.async.

Thanks for the feedback! Flow monitor does now support filters on the process state (and more on that it is coming to flow itself soon). If you were able to use monitor, it shows the channel buffer states, I guess that was not sufficient to guess why values weren't flowing?

Note that newer things are always downloaded less because they have been around less time (lots of people continue using old versions).

Maven stats are available to artifact deployers, but they are useless for estimating users or community size as downloads are largely from CI servers constantly downloading artifacts for testing. Download numbers are large and seesaw erratically. Unique IP counts are a little more stable but also inflated beyond relevance by CI.

When you deploy a flow, you choose the workload type (:compute, :io, or :mixed) and the process will be deployed with the appropriate thread type.

Flow is intended for processes with long-running stable topologies. Rich has been thinking about options to "patch" the running topology but it is quite tricky due to the concurrency issues and I'm not sure that will ever be added.

Even though the flow topology is fixed, it's perfectly acceptable for a flow component to use other variable resources and act merely as a coordinator. So you could for example have a process that send data out to an external dynamic thread pool and gets callbacks via a channel.

Clojure's focus on immutable data and pure functions side-step a lot of the trickiest issues with virtual threads. It's often not hard to isolate the I/O parts of your program into flow processes at the edges that can be mapped to the :io pool using virtual threads.

I don't think it would be feasible or wise to structure core.async to use Structured Concurrency, although Structured Concurrency is trying to tackle some of the same problems as flow but in a different way (more akin to data flow style concurrency).

The absolute number of survey respondents is not a good proxy for community size - the survey runs at different times of the year, for different lengths of time, and with different amounts of marketing. The only goal with the survey is to get a representative sample size. We have other sources of data, both public and private, that are better indicators and indicate the community size is likely growing at this time.

Having done substantial work in both Java and Clojure, my experience with abstraction in both is that in Java, making things more abstract almost always involves making the code larger (adding more interfaces, extending existing types to those interfaces, etc) whereas in Clojure making things more abstract typically means they get smaller.

Over time and at scale, this matters quite a lot. Java code grows and grows at a super linear rate as it handles new and changing requirements. This is ultimately not sustainable. Clojure code typically grows at a more linear rate (accretion of attributes in data or operations on data), but has more tools to create abstraction that can actually (if wielded well), be sub linear instead. This kind of change is not free or easy in any language, but in Clojure it is at least possible.

Generally for streams, the equivalent in Clojure with sequences or transducers is much cleaner and simpler so there was not a lot of reason to want them from Clojure. However, it is important to provide interop paths to work with Java libs that make use of them.

The functional interface coercion is implemented with invokedynamic.

It continues to exist and is in use. Lots of work has been done on a successor, but that is stalled while we consider what we want to do on various things.

Try Clojure 2 years ago

The number of parentheses is the same, they're just in a different place. Isn't it tiring to type so many semi-colons and commas all the time?

Try Clojure 2 years ago

Generally, custom seqs (rare) are implemented by leveraging something like `lazy-seq`, so library authors are also not using it.

Yes, it would be good if there were javadoc on more of the impl, but this is just not an issue for the vast majority of devs.

Try Clojure 2 years ago

Clojure 1.12 (which is nearly done) is going to add a bunch of interop support - method values, array class syntax, Clojure fn -> Java functional interface conversion, stream support, etc.

Try Clojure 2 years ago

Maps are unordered, but let bindings are sequential so order matters.

Datomic transactions are not “operations to perform”, they are a set of novel facts to incorporate at a point in time.

Just like a git commit describes a set of modifications, do you or should you want to care about which order or how the adds, updates, and deletes occur in a single git commit? OMG no, that sounds awful.

The really unusual thing is that developers expect intra-transaction ordering to be a thing they accept from any other database. OMG, that sounds awful, how do you live like that.