Fork me on GitHub

Hi, can anyone recommend articles/books dealing with design decisions on how to divide a software system into different applications/services? I’m facing such a decision for the first time at work and am looking for tips and ideas on which factors I can/should take into account. Would be great to read about some methods and examples.


You can try #architecture as well.


Thanks, will post there too.


I read years ago to understand why everyone was talking about Microservices, it delves into DDD/Bounded Contexts


It's a well written book.


Lot's of concerns there. Personnaly I find it helpfull the think in -illities to find the best solution. Like deployability, evolvability, scalibility, testability, how does extracting some code to a deplyable unit affect those, and which of those are more important.


I will look at it, thanks!


Is there a inter-language benchmark competition where anyone can participate? And where Clojure is one of the supported languages?


my point Is more important a language with a good abstraction, that allow you to test/select/swap a module/funcion/datastructure to find the fast one for your use-case, then a language that is "fast by default"


That's a fair point. I just want to do this for fun though. Optimizing Clojure code has become my favourite pass time.


I don't do Clojure at work. All of this is my hobby.


I build but Clojure is already the best. That being said, happy for any pr. Still waiting for subscriptions to hit the rust GraphQL server to add rust.

Alex Miller (Clojure team)17:02:36

there is and I spent a lot of time making the Clojure solutions there good

Alex Miller (Clojure team)17:02:44

and then one day the maintainer deleted it


I Googled and found the history of that. Is there another?

Alex Miller (Clojure team)17:02:53

I’ve had some conversations with him. I respect his desire to spend his time how he wants.


I am sure he has spent many many hours fielding requests from various people to replace which benchmark program is used, or to remove ones because they don't follow the game rules (I have asked about a few programs myself years ago, when actively writing programs for the site for Clojure, and trying to understand how other programs worked -- he often responded in a timely fashion).


His advice is sound: If you want a web site that publishes results for a particular set of languages, create one.


That site does not publish the Clojure versions any more. I dug up a copy of the latest Clojure versions of the programs and put a copy here:

👍 8

That's cool. They are great as references.

Alex Miller (Clojure team)19:02:37

the versions that were posted that I worked on are all at

👍 8
Alex Miller (Clojure team)19:02:28

iirc, a lot of the "how to run" stuff in there is likely to be old and/or kind of bespoke

Alex Miller (Clojure team)19:02:18

if you want to see a lot of funky clojure perf tricks, they're all in there :)


Yeah, mainly interested in the funky tricks, 🙂

Alex Miller (Clojure team)19:02:35

fix reflection, fix boxing, use primitives, use deftype/definterface, use array packing when you can't pass enough primitives, primitive constants, etc

Alex Miller (Clojure team)19:02:08

but for most of the places I did the tricks, in real life, I would just write the damn loop in Java

Alex Miller (Clojure team)19:02:12

a lot of my interim revisions and notes are squirrelled away in the archive directory

Alex Miller (Clojure team)19:02:03

pidigits is probably the worst hack, although I merely polished that one - it uses clojure.asm (NOT a public api) to just write, compile, and load bytecode directly

👏 4

The pidigits one sounds like cheating to me, 🙂

Alex Miller (Clojure team)19:02:46

iirc there was really only one reason to do so, something to do with marking native methods, which I made a ticket for but not sure ever got fixed.

Alex Miller (Clojure team)19:02:00

oh, that's totally cheating the spirit


I did not get the array packing trick.

Alex Miller (Clojure team)19:02:29

you can only pass 4 primitives in a function with primitive type hints

Alex Miller (Clojure team)19:02:41

for the rare case you need more, you can pack them in a mutable Java array

Alex Miller (Clojure team)19:02:09

in general, mutable Java arrays are the swiss army knife of Clojure hacks :)


Oh, cool trick. 👍

Alex Miller (Clojure team)19:02:59

assuming you're single-threaded, they are very memory efficient, very fast, stateful references

Alex Miller (Clojure team)19:02:40

and hotspot can do wonders....


my point Is more important a language with a good abstraction, that allow you to test/select/swap a module/funcion/datastructure to find the fast one for your use-case, then a language that is "fast by default"


This is way off topic, I guess, but my wife recently received an email claiming that they had hacked her computer, and giving a cryptocurrency account to transfer money into if you wanted them not to publish videos they took of you via your computer's camera. They were even helpful enough to give links to why your anti-virus software didn't catch them. It looks bogus to me, since some of the things they are claiming she did, she never did. Seems pretty clever, though, in that it might be a kind of phishing that might get people to part with some of their money, for nothing but sending the right email.

😮 4