[HN Gopher] Clojure needs a Rails
       ___________________________________________________________________
        
       Clojure needs a Rails
        
       Author : janetacarr
       Score  : 146 points
       Date   : 2022-07-30 16:57 UTC (6 hours ago)
        
 (HTM) web link (blog.janetacarr.com)
 (TXT) w3m dump (blog.janetacarr.com)
        
       | phtrivier wrote:
       | And clojure is actually in a better position than other niche
       | languages because _at least_ you have the option of calling the
       | boring and maintained java library to ship _something_ (it might
       | be something non lispy, maybe a bit less efficient and
       | maintainable but at least you solved the business issue.)
       | 
       | Try doing that in some other languages were your underlying
       | platform has even less libraries than a JVM...
        
         | janetacarr wrote:
         | Interesting insight. I've never tried to call Erlang libraries
         | from Elixir, but I'm not sure I'd want to either :)
        
           | tyre wrote:
           | It's very easy, as someone who went from Ruby to Elixir and
           | had little understanding (to start) about Erlang.
           | 
           | It might be more natural than going down to Java because
           | you're mostly dealing with immutable data and Elixir is very
           | consciously building on top of Erlang. In comparison, Clojure
           | has always struck me as wanting to build on top of JVM but
           | being an entirely different thing.
        
           | vendiddy wrote:
           | It's surprisingly seamless to call Erlang libs from Elixir.
        
             | kartoshechka wrote:
             | because you write erlang with some fancy macros :)
        
             | phtrivier wrote:
             | Oh don't get me wrong, it _is_ transparent to call an
             | Erlang library from elixir.
             | 
             | It's just that there are even _less_ library to call :P
        
           | shakow wrote:
           | I did it for some zip stuff that was already implemented in
           | the Erlang stdlib, it was surprisingly easy. I assume the
           | very small numbers of types in Elixir helps with that.
        
         | [deleted]
        
         | roguas wrote:
         | Yes, you get the eco system. But to what extend, the very thing
         | mentioned in article rails-like framework is not really
         | accessible right? I am ok with clojure not backing web
         | framework, but also this one place where interop with
         | springboot would be nice is not there (right?).
        
       | vemv wrote:
       | I also thought "Clojure needs a Rails" some 5 years ago. Nowadays
       | (multiple, real-world Clojure jobs later) I don't.
       | 
       | I also learned that trying to second-guess why developers spend
       | their time in certain libraries and not in other endeavors (like
       | frameworks) comes across as pretty disrespectful and actually
       | ignorant (considering that those people are very often more
       | skilled/experienced than most of us).
       | 
       | (Good related read: Open Source Is Not About You)
       | 
       | So I'd recommend to anyone, open your mind, be ready to have some
       | preconceptions changed, and contribute a significant deal to
       | (Clojure) OSS to truly appreciate what we have. And write more
       | interop ;)
        
       | jayceedenton wrote:
       | In my experience Clojure teams use high quality Java and
       | JavaScript libraries all the time. It's more often than not a
       | piece of cake.
       | 
       | 'Clojure needs a rails' has come up perennially for that last 10
       | years. I don't disagree, as I think convergence on one web
       | solution rather than a constant churn would have great benefits.
       | The idea that you can't use sysdig, or whatever, because there is
       | no Clojure library, is nonsense. Interop is good and Clojure is
       | nicer than Java for writing Java :)
       | 
       | Also, you can overload functions with further aritiss in
       | protocols just fine. Nothing to do with variadics.
        
         | janetacarr wrote:
         | I never said it can't be done. I did write this in a hurry, so
         | I may have muddled my central thesis.
         | 
         | I'm arguing two things:
         | 
         | First, Clojure has missing or rotting libraries, requiring re-
         | implementing logic we've all done at least once because people
         | are fixated building the Rails for Clojure.
         | 
         | Second, that the business case for using Clojure becomes weaker
         | because the lack of open-source efforts on this front (due to
         | the 'Rails Vacuum') causes either interal library building
         | (extra time) or, more likely, interop. Interop, to _some_
         | management, sounds an awful lot like using Java, but with very
         | expensive Clojure developers to do it.
        
           | huahaiy wrote:
           | What are the "missing or rotting libraries"? Maybe a few
           | examples might be helpful. In my over 10 years of using
           | Clojure in production, I am not sure I have "re-implemented"
           | a lot of logic that are not already covered by some Clojure
           | libraries. Such examples are rare.
           | 
           | Sure, I have used Java interop for working with Stripe, but
           | that's because it is futile to maintain a 3rd party Clojure
           | library if Stripe decided not to do it themselves. These
           | proprietary APIs are constantly changing. It is perfectly OK
           | to do Java interop in these cases. Any niche language will
           | have the same problem, and Clojure interop with Java is quite
           | pleasant to use, compared with using Java itself.
           | 
           | As far as I can tell, using ring and related things are
           | fairly standard on the server side, and re-frame and related
           | things are fairly standard on the client side, so I am
           | honestly not sure what is missing for Web development in
           | Clojure, as Web development is the most common use case of
           | Clojure.
           | 
           | I am honestly confused.
        
           | jacobobryant wrote:
           | It seems unlikely to me that efforts to build web frameworks
           | are causing a decrease in time spent building wrapper
           | libraries. Developer time (particularly, open-source
           | developer time) isn't a homogeneous commodity; people tend to
           | work on things that they personally need. Anecdotally I can
           | say that if I were to cease development of my own Clojure web
           | framework, I would not immediately start writing a Syslog
           | library instead :).
        
       | justinhj wrote:
       | I see exactly the same thing in the Scala community. Your first
       | instinct when you need a library is to find a pure Scala one,
       | when many times there are far superior (in terms of maturity,
       | stability and documentation) in the Java word. Sometimes it makes
       | sense to write an intermediate wrapper but not always.
        
       | hombre_fatal wrote:
       | I think this is just a cultural thing where the ecosystem prefers
       | to compose things together. The Node ecosystem also hasn't
       | centralized around a Rails. People tend to just use Express.
       | 
       | Also, the syslog server example doesn't seem like something a
       | Rails would solve.
       | 
       | > can we please just get together at the next Conj conference
       | decide what our "Rails" is going to be?
       | 
       | I think these days we, OP included, tend to use "Rails" to not
       | just mean a monolithic framework, but also one that monopolizes
       | the ecosystem which is one thing that made Rails good.
       | 
       | But since it's been tried before in the Clojure and Node
       | ecosystems, maybe people just don't care for it.
        
       | antupis wrote:
       | I think what Clojure needs is to be best at some very practical
       | real world usecase so kinda what Rails was 2007 or Python and ML
       | were 2013.
        
       | janetacarr wrote:
       | Since it keeps coming up, I'd like to clarify that I'm not
       | advocating for a port of Rails or some kind of analog. I should
       | have chosen a better post title.
       | 
       | I have never used Rails.
       | 
       | I'm arguing Clojure has missing or rotting libraries, requiring
       | us to re-implement logic we've all done at least once because
       | people are fixated building web frameworks, and I think it's
       | motivated by people trying to build the Rails for Clojure. I
       | really can't think of any other reason for people to build so
       | many web frameworks at this point.
       | 
       | The Rails for Clojure is an idea, one the community rallies
       | around, one where people won't reinvent the wheel over and over
       | again, so that we can have a lot more non-web packages for
       | Clojure.
       | 
       | I'm quite literally saying, the effort could be better spent
       | elsewhere.
        
       | slifin wrote:
       | Clojure typically doesn't attract the kind of developers who want
       | to work on "boring" things
       | 
       | So there is an imbalance there
       | 
       | On one hand I'm kind of happy there's no one true way in Clojure
       | to do web dev, because as I think Rich said, it's not a solved
       | problem
       | 
       | So if we couple too heavily to one opinion on web dev then it's
       | going to fail us as a community on a big scale and be hard to
       | move away from
       | 
       | Sets of libraries are typically easier to swap out
       | 
       | In reality I think most Clojure businesses end up on reagent or
       | and reframe and they are the defacto ways of doing web dev
       | 
       | For "solved" problems like stripe calls it would be nice if we
       | had more people working on maintaining libraries but as a
       | Clojurian myself I know I wouldn't do that myself so I only have
       | me and people like me to blame
        
         | keithasaurus wrote:
         | > Clojure typically doesn't attract the kind of developers who
         | want to work on "boring" things
         | 
         | I kind of have the opposite opinion. I worked on a large
         | Clojure codebase for several years. There was so much effort
         | put into building tooling and libraries in Clojure because the
         | ecosystem isn't huge, (and some of its bigger pieces are just a
         | misadventure, ie spec). It was really frustrating to me because
         | I felt like we were spending 50% of our time writing inferior
         | versions of code that Python, Ruby, or even JavaScript already
         | had as libraries. I'd have preferred that time to be spent on
         | interesting things like business concerns. Of course, you can
         | use java interop, but it's much more natural in Scala and
         | Kotlin.
        
           | huahaiy wrote:
           | Care to mention a few examples of missing libraries that you
           | spent 50% of time writing on the job?
           | 
           | I can hardly recall a case where I could not find a Clojure
           | libraries for. The only exception would be wrappers for
           | proprietary APIs, such as Stripe.
        
             | keithasaurus wrote:
             | I have a little trouble remembering all the details, and
             | I'm not sure I can speak to where things are now. Maybe
             | it's more helpful to mention where I thought we got off-
             | the-rails with building our own stuff?
             | 
             | - unit tests with ephemeral dbs
             | 
             | - db migrations
             | 
             | - ORM library
             | 
             | Many of these things exist in Java and in retrospect, were
             | probably the way to go. One other pain point was that
             | Clojure libraries would stop being updated, lag too far
             | behind the java libs, or lack features. I remember this
             | being the case with Google Cloud and AWS, and I think
             | Elastic Search. I remember a number of times just
             | completely swapping out the Clojure wrapper lib for the
             | java lib.
        
         | capableweb wrote:
         | > Clojure typically doesn't attract the kind of developers who
         | want to work on "boring" things
         | 
         | I'm quite the opposite. I love Clojure, just because it is
         | "boring". Maybe not "boring" as in well-known, but "boring" as
         | in the core language and it's runtime doesn't change and is
         | stable, like really stable. I've upgraded projects using
         | "ancient" Clojure versions (released +5 years ago) and not
         | having to almost do any changes, as both the language, the
         | runtime and most libraries are so stable over time. It simply
         | just works. If people want to introduce breaking changes, they
         | tend to prefer to create entirely new libraries instead.
        
         | thom wrote:
         | I don't understand this at all. Clojure's all over the place in
         | banks and fintech startups and they're all boring as hell.
         | People don't spend a lot of time on random proprietary wrappers
         | because they don't provide a lot of leverage, not because
         | they're 'boring'.
        
           | eternalban wrote:
           | This is the second appearance of "boring" in this thread.
           | There is also "boring" libraries. Somewhere someone should-
           | be/is writing a thesis on _the psychology of programming and
           | programming languages_.
        
         | janetacarr wrote:
         | I agree. Boring is tough to work on.
         | 
         | I thought about touching on this in the article. Re-frame and
         | reagent have become the default for Clojurescript development,
         | but I have no idea how.
        
           | seancorfield wrote:
           | Could you elaborate on that? I don't do ClojureScript, but
           | I've dabbled with it on and off since 2013 (I've been doing
           | Clojure in production for over eleven years). When I first
           | started looking at ClojureScript, Om was "the thing" and
           | Reagent was the new kid. I built a prototype at work with Om
           | and then rebuilt it with Reagent and found the latter much
           | more pleasant and idiomatic to work with.
           | 
           | Last year, I dipped back into ClojureScript and built some
           | simple projects with re-frame and I really liked it. I can
           | definitely see why re-frame has become so popular.
        
       | ttymck wrote:
       | At some point, do we have to consider that the problem might be
       | Clojure itself? Does LISP lend itself to "Rails" -- a Rails that
       | people want to work with? I ask, genuinely, as a near-total
       | outsider.
       | 
       | The comparison to Elixir got me really thinking. I appreciate
       | your "call to action", but community consensus gathering wasn't
       | necessary for Phoenix to emerge as an option-of-choice, it gained
       | traction because it is _good_.
       | 
       | Surely there are large organizations using full stack Clojure,
       | similar to the Lawrence World-Journal. Is there something about
       | LISP that makes it hard for them to abstract their "framework"
       | bits into an open source package?
        
         | jayceedenton wrote:
         | > Is there something about LISP that makes it hard for them to
         | abstract their "framework" bits into an open source package?
         | 
         | No. I don't know what else to tell you.
        
           | ttymck wrote:
           | That's fair, I didn't intend to sound entitled, but "let's
           | all decide what Rails-like to use" doesn't seem to be working
           | for Clojurists, so I was hoping that poking at other avenues
           | might spark some productive conversation.
        
         | mark_l_watson wrote:
         | It might be that simply committing strongly to a language, any
         | language, has benefits? Years ago, a long term consulting
         | customer hired me on a short fire-drill job. He had also hired
         | some Clojure celebrities like Stuart Sierra and Stuart
         | Holloway. They were incredible productive and fast. It was a
         | very long time ago, but as far a I remember they had a small
         | set up libraries they used. BTW, I was hired for a few hours a
         | week to help with dev ops, not code.
         | 
         | EDIT: I am currently working (part time) with an all in Common
         | Lisp company. It is really nice to see a group of people who
         | all love a programming language using it. As much as I like
         | virtually ALL Lisp languages, I do sometimes feel guilty not
         | just using Python when there are much better libraries
         | available (e.g., machine learning, linked data, etc.). When a
         | programming language has 1000x as many developers you simply
         | get a richer ecosystem.
        
         | jmcgough wrote:
         | "community consensus gathering wasn't necessary for Phoenix to
         | emerge as an option-of-choice, it gained traction because it is
         | _good_"
         | 
         | I think it also because there's two camps of elixir devs -
         | those who came from Ruby and those who came from Erlang. The
         | Rubyists have a fairly easy time being productive quickly with
         | Phoenix because it (at a glance) is very similar to Rails. From
         | there you learn about supervisor trees, genserver, etc.
        
         | duncan-donuts wrote:
         | The something is probably more philosophical within lisp
         | communities. I'm relatively new to lisp (writing clojure/cl for
         | about a year) and from what I've seen people prefer to bolt on
         | small things instead of big frameworks. The full stack
         | frameworks exist but they're hardly frameworks. They're closer
         | to project templates than anything.
        
       | davedx wrote:
       | I don't think API wrapper libraries add that much value and I
       | usually only use them if it's absolutely necessary. Most APIs are
       | just REST calls...
        
         | janetacarr wrote:
         | This is mostly true tbh.
         | 
         | But API wrappers handling things like retries, pagination,
         | client-side business logic, and coercion from JSON. Having to
         | account for all of that for two API calls is somewhat tedious
         | and repetitive, and I'm sure we've all solved those problems at
         | least a dozen times.
        
           | huahaiy wrote:
           | Retries, JSON coercions and so on do have Clojure libraries
           | for them, so I am not sure why you want to solve these
           | problems yourself, let alone a dozen times. Really not sure
           | what your exact point is.
        
         | the_duke wrote:
         | Writing high quality ergonomic API bindings is a surprising
         | amount of work, especially in statically typed languages.
         | 
         | Every API has its quirks, sometimes returns different data, has
         | edge cases for certain calls, has different error reporting
         | patterns, rate limiting, authentication methods, sometimes has
         | intended or unintended breaking changes, ....
         | 
         | Sure, you can usually just manually whip up the code for an
         | endpoint or two in a few minutes , but then you need to
         | continually add endpoins, fix the edge cases, adapt to upstream
         | changes, ...
         | 
         | Good bindings make your life a whole lot easier.
        
       | nickjj wrote:
       | The blog post mentions Elixir and while Elixir has its own mini-
       | Rails with a lot less opinions, you'll still run into the same
       | problems as Clojure around things like wanting a Stripe supported
       | library, or PayPal, or Braintree, or Paddle or a ton of other
       | popular 3rd party SAAS SDKs that exist in Ruby, Python, Node,
       | PHP, Go, etc..
       | 
       | It's one of the reasons I stopped using Elixir. When I reached
       | out to Stripe (and other 3rd party tools) they said the demand
       | wasn't there to justify the dev time to maintain an official
       | library internally. I think this is the reality to expect when
       | using a more niche language. That may be ok if you're ok with
       | that but it's important to know that's what you're getting into
       | when you choose languages like this. It's a personal preference.
        
         | bestinterest wrote:
         | This brings up another point I hope someone tries to solve in
         | programming. Every time a new language comes out we have to
         | recreate millions of baseline libraries and it just sucks. As a
         | dev I want to be able to make use of great libraries oblivious
         | to what they are created with.
         | 
         | GraalVM is trying to solve this with its polygot VM idea
         | https://www.graalvm.org/22.1/reference-manual/polyglot-progr...
        
           | nickjj wrote:
           | > Every time a new language comes out we have to recreate
           | millions of baseline libraries and it just sucks. As a dev I
           | want to be able to make use of great libraries oblivious to
           | what they are created with.
           | 
           | Technically this tool mostly does exist already with the
           | OpenAPI specification if we're talking about REST APIs. If
           | you as the API provider put in the leg work to create a very
           | detailed specification which is a YAML file, you can generate
           | programming language specific SDKs out of it as long as the
           | language has an OpenAPI library to consume this spec in an
           | accurate way.
           | 
           | Stripe has publicly mentioned[0] they mostly use this spec to
           | generate their SDKs (even as of a few years ago), but I guess
           | auto-generated code still requires some developer time and
           | there's a quality assurance level of "hey we're dedicated to
           | internally supporting this". It's a huge deal having a
           | provider internally support your language's SDK.
           | 
           | [0]: https://github.com/stripe/stripe-
           | python/issues/694#issuecomm...
        
         | jrochkind1 wrote:
         | Honestly, as a rubyist, I more and more often run into new
         | "SDKs" that don't have an official _ruby_ version supported!
         | Ruby is no longer always considered popular enough to get an
         | SDK from a vendor.
         | 
         | I think the fundamental truth here is that so much of writing
         | software these days is having open source to rely on. That
         | applies to things like an SDK for a vendor API, but also
         | applies to things like consolidating community effort on _one_
         | approach to back-end web app -- instead of having a bunch of
         | not really mature options, and also so effort can be
         | consolidated on building additional things that work with that
         | popular tool.
         | 
         | I don't think these two areas are actually related like the OP
         | does -- if we can just reach consensus on a web framework, then
         | somehow we'll get things like a Stripe SDK, I'm not sure about
         | that.... but I think the general challenge of "how do we get a
         | sustainable, supported, mature/polished open source ecosystem
         | of software that we can use that works together" is kind
         | something we don't really understand, how _does_ that happen
         | (or not) for a new language? I don 't think it's just "well, if
         | we only get popular enough it'll happen on it's own", and of
         | course there is a chicken and egg issue there too.
        
           | nickjj wrote:
           | > I think the general challenge of "how do we get a
           | sustainable, supported, mature/polished open source ecosystem
           | of software that we can use that works together" is kind
           | something we don't really understand
           | 
           | I think one problem is people who tend to flock to niche
           | languages like to write libraries so what happens is you get
           | a random person on the internet who makes a library, then
           | they eventually stop using it personally and the project dies
           | because they were the sole maintainer championing the
           | project. You have this happen in parallel and the next thing
           | you know you have 3-4 libraries that are either missing big
           | features, fall out of date, go into maintenance mode, etc.. I
           | saw this a lot with Elixir's community libraries (Stripe, AWS
           | SDK, pagination, etc.).
           | 
           | There is a chicken / egg aspect to it because I think the fix
           | here is to eventually get popular enough where you have a
           | large enough of a community around the language and ecosystem
           | that the most popular projects for a specific feature get so
           | popular that they can't die because too many people depend on
           | it and then a bunch of folks start to contribute to it and
           | the community informally blesses 1 solution as "the"
           | solution. The chicken / egg problem here is that a lot of
           | people want to use Stripe, not create a library to use
           | Stripe, etc. so it never gets mass adopted.
           | 
           | I think the best way for this to happen is organically.
           | Trying to create a committee with an org with specific
           | contributors trying to invent solutions is going about it in
           | the opposite way. The best libraries tend to be extracted out
           | of real projects and grow to become popular because the
           | person or people behind it have a skillset around not only
           | creating high quality software but also a dedication to
           | create great documentation, can handle support, have lots of
           | tests and generally have created a maintainable code base
           | that makes it easy for others to contribute.
           | 
           | > Ruby is no longer always considered popular enough to get
           | an SDK from a vendor.
           | 
           | Do you have a bunch of examples here? I haven't come across
           | that with the usual libs I use (Stripe, Braintree, PayPal,
           | Sentry, Datadog, Mux, AWS, etc.).
        
       | lolinder wrote:
       | > If we used interop for everything mundane, Clojure would really
       | just be an S-expression shaped husk over Java code. Not a very
       | good solution.
       | 
       | I don't have a lot of experience with Clojure, but speaking as
       | someone who uses Kotlin on the server side, this attitude strikes
       | me as odd. _Most_ of the reason to use a JVM language is to take
       | advantage of the mature and well-maintained Java libraries for
       | basically everything.
       | 
       | If interop is considered a last resort (to the point where you
       | reach for a 3-year-old unofficial Stripe library over the
       | officially maintained Java one), what's the point of running on
       | the JVM at all?
        
         | mark_l_watson wrote:
         | On Twitter, PureDanger had a nice comment, something like: it
         | is better style to directly call into a Java library than to
         | write or use a wrapper.
         | 
         | I am not sure if this really answers your comment, but I really
         | liked his comment because I tend to write wrappers and re-
         | evaluated my habits.
        
           | janetacarr wrote:
           | That's surprising. I listed the interop caveats here because
           | sometimes it feels like a bandage intended to bridge some gap
           | until Clojure matures.
           | 
           | But if Alex said that, then maybe it's not. -\\_(tsu)_/-
        
             | huahaiy wrote:
             | Clojure is intended as a hosted language and embracing the
             | host is the philosophy, so interop with the host is never a
             | bandage.
             | 
             | Again, I am curious where you get all these impressions
             | that are contrary to most people in the community take for
             | granted, such as:
             | 
             | * Clojurians prefer libraries over framework, but you said
             | we spent too much effort in developing "big web framework".
             | 
             | * Clojure is intended to be a hosted language, so seamless
             | interop with the host is the norm, but you thought interop
             | is a bandage until Clojure matures.
             | 
             | It's very interesting.
        
             | mark_l_watson wrote:
             | Janet, I hope I didn't misquote him. I save his tweet, and
             | I am going to look for it.
        
               | mark_l_watson wrote:
               | "Idiomatic Clojure code calls Java libraries directly and
               | doesn't try to wrap everything under the sun to look like
               | Lisp... Where Java isn't broken, Clojure doesn't fix it."
        
               | fmakunbound wrote:
               | Perhaps that stance has changed over time. In Clojure,
               | there's the clojure.string namespace just functions
               | wrapping java.lang.String methods
               | https://clojuredocs.org/clojure.string
        
               | casion wrote:
               | This is much more than "just wrapping". It allows strings
               | to be used more readily with existing Clojure
               | abstractions and/or allows idiomatic use without the need
               | for being on guard to avoid reflection.
               | 
               | Notably, Alex didn't write this library and only has a
               | minor contribution to it.
        
               | moomin wrote:
               | I think the problem is that if you want to write code
               | portable between clj and cljs, you're gonna need a
               | lightweight abstraction. With that said, I'm still not
               | sure how exactly the maintainers feel about portable
               | code, having written a portable http library.
        
               | janetacarr wrote:
               | Thanks for the quote Mark, it's an interesting
               | perspective.
        
           | waffletower wrote:
           | You should take Alex's words contextually, and with a grain
           | of salt. You can easily see his commits in this project, for
           | example: https://github.com/cognitect-labs/aws-api
        
             | joe-user wrote:
             | This library doesn't wrap the AWS SDK, explicitly calls out
             | existing Clojure wrappers that do in the README, and none
             | of his commits seem to conflict with the referenced Tweet.
             | Am I missing something?
        
             | mark_l_watson wrote:
             | Thanks, point taken!
        
           | [deleted]
        
           | stingraycharles wrote:
           | When I started out with Clojure, I was using wrappers
           | everywhere, but after about a year or so realised that they
           | added very little value, hurt performance, and made the code
           | less simple. On top of that, wrapper libraries were often not
           | complete in functionality.
           | 
           | The pivotal moment for me with this was when dealing with
           | Kafka, just using the "raw" Java library ended up being so
           | incredibly much simpler than any of the wrapper libraries.
        
             | code_biologist wrote:
             | It's been more than a decade since I've used Clojure so I
             | say this with a big grain of salt.
             | 
             | Where there weren't good wrappers, just a few functions
             | "wrapping" Java libraries for my project's needs always
             | felt lightweight and lispy. The little internal APIs I made
             | almost always passed around the library's raw Java objects,
             | but with more Clojure idiomatic ways to construct them, or
             | slapping some seq on the library outputs.
        
         | brightball wrote:
         | One point to running on the JVM is that you can leverage all of
         | the existing Java app server infrastructure in your company for
         | deployment.
         | 
         | That stuff removes 90% of the arguments against using another
         | language in a Java shop.
        
         | hibikir wrote:
         | It Kotlin it makes a lot more sense to use Java libraries,
         | because for most purposes, the interfaces you'd write in Kotlin
         | and the ones in Java are not all that different, other than
         | coroutines. From Scala or Clojure, the differences in interface
         | design are far larger. You are going from languages where
         | mutable state is an optimization you want to hide, to libraries
         | full of setters that return void. A land of monads, and maybe
         | macros vs imperative programming. This makes the ergonomics of
         | many mature java libraries just too much of a bother to use
         | directly. There are cases where the effort to rewrite is
         | bonkers (say, ApachePOI), and others where wrapping is sensible
         | (see a variety of json serialization libraries which support
         | different parsing backends, some of which will be straight
         | java), but there are many libraries that are sensible from
         | Kotlin, but are worse than a rewrite if you are using an FP
         | language.
         | 
         | Still, I think you are undervaluing the JVM itself, which is
         | almost magical when it comes to production observability. It'd
         | be a whole lot of work to come anywhere near that tooling
         | support for ops if you were avoiding the JVM. Scala, for
         | instance, can also transpile into Javascript if you feel like
         | it, and there's a native project that compiles to LLVM, but the
         | JVM has the vast majority of the use cases, and it's not due to
         | the libraries.
        
           | lolinder wrote:
           | Yeah, I get that. Even in Kotlin there definitely a number of
           | places where I prefer the Kotlin library to the Java, and I
           | can see that it would happen more often in Clojure.
           | 
           | That said, the example in the article is the Stripe API, and
           | I cannot see a good reason not to just use the official Java
           | one. I've used it a ton, and it's as simple as can be--you
           | pass a map in and get back an object. If that's a problem,
           | either Clojure has a way worse interop story than necessary
           | or the author is suffering from a variant of not-invented-
           | here syndrome.
        
             | golemiprague wrote:
        
         | googlryas wrote:
         | One problem with interop is you import the design/ergonomic
         | considerations that may come from other languages, while
         | neglecting what is uniquely powerful about your own language.
        
       | thom wrote:
       | I think the thing people most struggle with in Clojure is that it
       | looks like it should be an incredibly pure, deeply opinionated
       | language but it's actually extremely pragmatic. There is never
       | going to be a long lived, vertically integrated, do everything
       | framework for Clojure. If it was going to happen it would have
       | already. Rails took off because burnt out enterprise Java
       | developers wanted to quit and have fun again. Clojure happened
       | because enterprise Java developers wanted to do enterprise Java
       | better.
        
         | roguas wrote:
         | This is true, clojure is not super opinionated as people tend
         | to think. Its nice, as you get to ramp up easily. There seems
         | to be a steady path where you start with writing "java" in lisp
         | and end up with pure functions and 1 reduce + something to
         | trigger side-effects. I have worked with 4 codebases and they
         | differed vastly.
        
       | egypturnash wrote:
       | Suzi just needs to find an excuse to spend a couple years
       | building a serious thing _entirely in Clojure_ , no matter what.
       | And then to disentangle all of the logic particular to her thing
       | from the application framework she's built for this (or the
       | existing one she used as a starting point), as well as
       | disentangle anything that she thinks should be an external
       | library, and release it all for free.
       | 
       | Suzi may need to wait to do this until after her current gig has
       | won the Startup Lottery. Or perhaps she may need to quit her
       | current gig and figure out how to get a bunch of other Clojure-
       | lovers to pay her rent while she does this. Good luck.
        
         | janetacarr wrote:
         | One can dream ;)
        
           | egypturnash wrote:
           | Good luck! Getting this post on the front of Hacker News is
           | probably a step in the direction of finding a way to pay your
           | bills while spending a year or two building Canals For
           | Clojure to the point where it attracts other people to build
           | libraries and plugins for it.
        
       | fmakunbound wrote:
       | This might be what happens when the community seems to follow
       | "composable libraries over frameworks". You still have to do the
       | composing, and it's not obvious how to do that.
        
       | rubyist5eva wrote:
       | Stop trying to make Rails in things that can't be rails. Rails is
       | Rails uniquely because it is RUBY on Rails. It plays uniquely
       | into Rubys strengths, that's what makes it what it is.
        
       | dustingetz wrote:
       | clojure is about simple composition not magic, so any solution
       | starts by solving frontend/backend data sync in a composable way.
       | Absent that you are just in the tarpit so most commercial shops
       | might as well be in the typescript tarpit with everyone else and
       | benefit from the larger ecosystem.
        
       | polote wrote:
       | If you need a Rails, why not directly use Rails? For what kind of
       | web application Clojure is better than python or Ruby or nodejs?
        
         | LesZedCB wrote:
         | its not object oriented, for one.
         | 
         | i work in rails, and my main hobby lang is clojure. i hate the
         | thinking patterns of OO more and more every day.
        
       | wirrbel wrote:
       | I developed for fun in Clojure and ClojureScript probably for 3
       | years, it was tremendous fun and got me into Lisps. In many ways
       | Clojure does still hit the sweet spots from a language design
       | perspective for me.
       | 
       | I have revisited Clojure every now and then after and IMHO its in
       | a weird state, too popular and successful to completely die, but
       | also limited to reach wider adoption.
       | 
       | When revisiting old projects I have seen countless of Clojure
       | dependencies having died in the meantime. I have replaced utility
       | libraries with more recent utility libraries sometimes several
       | times. Very annoying. Paradoxically the core API is really stable
       | to a degree that bugs aren't fixed that are a behaviour userland
       | code might rely on.
       | 
       | But its overall I think more of a symptom than a cause for
       | frictions when developing Clojure. Community management is bad,
       | even worse that RH nourishes this elitist aura around himself.
       | Then the JVM integration is of course the blessing that led to
       | Clojure's initial success but is at the same time limiting. The
       | Java community by majority seems to gravitate towards Scala
       | (weird scala version incompatibilities incoming, Scala DLL Hell)
       | and Kotlin.
       | 
       | So overall Clojure is in a strange situation. For picking it up
       | on-the-job its not the responsible choice probably for most
       | situations I work in. For my private tinkering the JVM dependency
       | feels just a little too heavyweight. I don't see that Clojure
       | will hit an inflection point of adoption in any way in the future
       | that would make it a viable candidate for me to use at work.
       | 
       | I really would hope that a Clojure-on-guile or Clojure-on-racket
       | implementation becomes ready at some point that would make me
       | want to switch from Scheme to Clojure for the toy projects at
       | least.
        
         | cr__ wrote:
         | > Community management is bad, even worse that RH nourishes
         | this elitist aura around himself.
         | 
         | I have never seen Rich say or do anything that matches this
         | description.
        
           | roguas wrote:
           | I think RH emits fun grumpy vibes, the good kind. Seasoned
           | dev who is tired that his way of dealing with programming is
           | not more prevalent. Very down to earth, lets just do it
           | better.
        
             | draw_down wrote:
        
         | huahaiy wrote:
         | "countless of Clojure dependencies having died"?
         | 
         | What exact does it mean by "died"? It does not work any more?
         | Very unlikely.
         | 
         | In the Clojure world, it is the norm that a 5 years old library
         | works as well as a one-week old one.
         | 
         | If you mean "died" by "not updated any more", sure that's the
         | norm in Clojure as well. Some libraries are done, and some
         | authors moved on. But most likely, these libraries can still be
         | used just fine.
         | 
         | My production code base contains plenty of libraries that are
         | not updated for ages, but I consider that a benefit, not a
         | fault.
        
         | lgessler wrote:
         | > Paradoxically the core API is really stable to a degree that
         | bugs aren't fixed that are a behaviour userland code might rely
         | on.
         | 
         | Can you give an example? As a medium user of Clojure I struggle
         | to think of anything in the core that could rightly be
         | considered a "bug" and fits this description.
        
           | wirrbel wrote:
           | Its been a while, I remember some strange behaviour of
           | generic functions on sets* that differed from the behaviour
           | in lists and bug reports about it.
        
         | krn wrote:
         | > When revisiting old projects I have seen countless of Clojure
         | dependencies having died in the meantime. I have replaced
         | utility libraries with more recent utility libraries sometimes
         | several times. Very annoying.
         | 
         | Yes, the "best in class" libraries change every few years in
         | Clojure's universe, but they always bring huge improvements
         | that require completely new APIs.
         | 
         | For instance:
         | 
         | https://github.com/plumatic/schema ->
         | https://github.com/metosin/malli
         | 
         | https://github.com/juxt/bidi ->
         | https://github.com/metosin/reitit
         | 
         | https://github.com/bhauman/lein-figwheel ->
         | https://github.com/thheller/shadow-cljs
         | 
         | https://github.com/stuartsierra/component ->
         | https://github.com/weavejester/integrant
         | 
         | https://github.com/technomancy/leiningen ->
         | https://github.com/practicalli/clojure-deps-edn
         | 
         | > So overall Clojure is in a strange situation. For picking it
         | up on-the-job its not the responsible choice probably for most
         | situations I work in. For my private tinkering the JVM
         | dependency feels just a little too heavyweight. I don't see
         | that Clojure will hit an inflection point of adoption in any
         | way in the future that would make it a viable candidate for me
         | to use at work.
         | 
         | I think about programming languages as tools for different
         | bottlenecks.
         | 
         | - Computational: Rust
         | 
         | - Networking: Go
         | 
         | - Business logic: Clojure / Python
         | 
         | And for many people Python has everything that Clojure is
         | missing: a very low barrier to enter, and a very stable and
         | well-documented ecosystem of frameworks and libraries.
        
           | huahaiy wrote:
           | "very stable" and python in the same sentence? I am not sure
           | about that.
        
             | wirrbel wrote:
             | Do you want to back that up with something else than the
             | Python2-to-3 migration? Python 3.4 was released in 2014 and
             | ever since stability was never an issue for me.
        
               | huahaiy wrote:
               | Of course. I have plenty of cases when working django,
               | flask, and tensorflow code stop working after bumping the
               | dependency versions.
               | 
               | In fact, it is rare that I do not need to change code
               | after I upgrade python dependencies. Most likely I have
               | to change my code.
        
             | krn wrote:
             | What I meant, is frameworks like Django, Flask, and
             | PyTorch. Also, libraries like Pandas, SciPy, and NumPy.
             | That's what Clojure is missing the most for an average
             | software engineer: simple and easy choices, that can remain
             | relevant for decades.
        
               | huahaiy wrote:
               | So what you mean by "stable" is in the names only, but
               | not in substance.
               | 
               | What I mean by stable, is that my code remains working
               | after I upgrade the dependencies, which is definitely NOT
               | the case for python frameworks, but it is mostly the case
               | for Clojure libraries.
               | 
               | In Clojure, Web related things have remained relevant for
               | a long time as well. For example, I do not anticipate
               | that the standard things such as Ring, Reagent, Re-frame,
               | etc. are going to change any time soon.
               | 
               | If you have not used Clojure, you just have not
               | experienced what a stable ecosystem looks like. You have
               | too used to changing your own code just because of a
               | dependency bump. This is very rare in the Clojure world,
               | but a norm outside.
        
               | krn wrote:
               | Yes, these are two different meanings of "stable".
               | 
               | In Clojure, "stable" means that your code remains working
               | after the upgrades of its dependencies.
               | 
               | In Python, "stable" means that the dependencies
               | themselves remain upgraded.
               | 
               | I am not suggesting that one thing is better than the
               | other. What I meant, is that one thing is more
               | _attractive_ than the other for an average developer.
               | 
               | Currently, there are very few Clojure libraries from a
               | decade ago that are still being actively maintained
               | today.
        
               | huahaiy wrote:
               | Clojure itself is not much more than a decade years old.
               | Even that, there are quite many libraries that have
               | stayed all these year, e.g. the standard things I
               | mentioned, such as Ring, Reagent, etc.
               | 
               | As I have already mentioned, "actively maintained" is not
               | a requirement for many Clojure libraries. Many are just
               | done, as in "nothing needs to be changed".
               | 
               | As long as they are still working, why do you want to
               | update them? As I mentioned, many production code bases
               | in Clojure contain libraries that have not been updated
               | for ages, but they still work. Why fixing things that are
               | not broken?
        
         | casion wrote:
         | > Community management is bad, even worse that RH nourishes
         | this elitist aura around himself.
         | 
         | That's a weird take, considering it's consistently called out
         | as one of the most positive aspects of Clojure on surveys.
        
           | wirrbel wrote:
           | I assume this is on community management. I am not taking
           | part in Clojure surveys so its fairly obvious to me why my
           | opinion is not reflected in the community surveys.
           | 
           | I got to admit that maybe community management might have
           | improved in the last few years.
        
       | weavejester wrote:
       | What would a 'Clojure on Rails' framework look like? I think
       | that's the primary reason why such a framework has yet to find
       | traction; there's no single, obvious way to go about it.
       | 
       | The efforts made so far in this space have taken many different
       | approaches, because they're all experiments. Explorations of what
       | an idiomatic Clojure web framework might potentially look like.
       | Clojure has been around for over a decade now, and it's fairly
       | mature as a language; but it's ideology is young in comparison to
       | more established paradigms like OOP.
       | 
       | To make matters more complex, Rails came to prominence in an era
       | where web applications were mostly of one type: server-side HTML
       | with a sprinkling of JavaScript. Nowadays there tends to be more
       | options, e.g. a web application may consist of a single HTML
       | shim, with a thick React client that talks to a GraphQL back end.
       | 
       | So on the one hand we have a language that's still exploring its
       | identity; on the other we have a rapidly changing idea of what a
       | web application should be.
       | 
       | My _guess_ is that an idiomatic Clojure web service would look
       | like a client-accessible relational database with a strong
       | security model and datalog queries, along with some system for
       | adding in side-effectful hooks to respond to data change. In
       | other words, something rather different in design to Rails.
        
         | suprfnk wrote:
         | Something like Phoenix? Elixir is a newer language, with a lot
         | of similarities to Clojure. Phoenix even made the most loved
         | web framework in the Stack Overflow 2022 survey.
         | 
         | Why did they converge on something so, apparently, great, in
         | such a low amount of time? And why is this so hard for Clojure?
         | 
         | Not taking sides or trying to be negative, just honestly
         | curious what the driving factor is.
        
           | weavejester wrote:
           | I haven't used Elixir enough to be particularly confident in
           | an opinion about it. However, Phoenix _appears_ to have a
           | similar design to many other MVC frameworks, and if a
           | conventional design works for a language, there 's less need
           | to experiment. Initial development can converge around
           | something that's tried and tested.
           | 
           | A conventional framework doesn't fit Clojure particularly
           | well, so the community has been forced to tread new ground to
           | figure out what works with the language.
        
             | [deleted]
        
             | [deleted]
        
             | bcrosby95 wrote:
             | Phoenix looks like rails because many people moved from
             | ruby to elixir. Jose Valim was a part of the rails core
             | team.
             | 
             | At the core of Phoenix is independent libraries, macros,
             | and a robust distributed design. It's just packaged in a
             | familiar interface.
             | 
             | Elixir would give Clojure a run for it's money when it
             | comes to unique considerations.
        
         | newlisp wrote:
         | _along with some system for adding in side-effectful hooks to
         | respond to data change_
         | 
         | Curious, can you elaborate on what you mean by this?
        
         | janetacarr wrote:
         | Thanks for the reply James.
         | 
         | I agree with everything you said.
         | 
         | To clarify, I'm not advocating to re-create Rails for Clojure,
         | rather, I'm arguing open-source efforts are too focused on the
         | search for Clojure's Big Web Framework TM. However, I do like
         | your guess as to what a Clojure Web service might look like.
        
           | huahaiy wrote:
           | Your observation is simply not true. To the contrary, the
           | consensus of the community seems to be that there's no need
           | for a rails-like framework for Clojure. Most of Clojurians
           | are satisfied with what we have in the Web front, and are not
           | worrying about the lack of "big Web framework" at all. I
           | don't know where you got your impression from.
        
             | bcrosby95 wrote:
             | This is kinda like when go developers said the go community
             | doesn't want generics. The people that really want these
             | things will self select out of your community.
        
             | janetacarr wrote:
             | I got that impression from the relentless amount of web
             | frameworks for Clojure that keep popping up. Anytime I see
             | Clojure on the front page of HN, it's about some new
             | Clojure web framework, so this post is a protest of that in
             | a sense.
             | 
             | The big web framework is an idea, one where people won't
             | reinvent the wheel over and over again, so that we can have
             | a lot more non-web packages for Clojure. I'm quite
             | literally saying, the effort could be better spent
             | elsewhere.
        
               | seancorfield wrote:
               | I must admit, I do not understand why (some) people seem
               | to get so excited about the latest "Web Framework" for
               | Clojure, over and over again.
               | 
               | Yes, there seem to be a lot of them but they are mostly
               | failures -- they rarely get any traction, and the
               | creators often quickly move on (several to other tech
               | altogether).
               | 
               | I don't think those people would have directed their
               | efforts into other things -- libraries -- to any degree
               | that would mitigate some of the other points in your
               | article. People tend to work on what interests them and
               | if someone wants to design and build a web framework,
               | persuading them not to isn't going to encourage them to
               | work on a "more useful" library I suspect.
               | 
               | I think the abandoned API library problem is real but
               | partly because they were wrong-headed in the first place:
               | Clojure is designed as a hosted language, specifically to
               | take advantage of the vast, mature ecosystem that already
               | exists on the JVM. When we got started with Clojure at
               | work over a decade ago, it was common to see "all-
               | Clojure" as a mindset and reject interop as a solution. I
               | think that has changed a lot over the years and people
               | now leverage interop and Java libraries as a "first
               | solution" these days, perhaps with a thin wrapper around
               | those libraries just to provide a more fluid, more
               | functional approach.
               | 
               | At work, we've certainly taken a conscious decision to
               | switch away from "all-Clojure" where there are mature
               | Java libraries that are reasonable to use via interop
               | (unless, of course, the "all-Clojure" equivalent is very
               | well-maintained and really adds a lot of value).
        
               | huahaiy wrote:
               | I don't think the HN mentions of Clojure is
               | representative of what the Clojure community thinks. If
               | you are talking about the frontpage of HN, it is even
               | less representative.
               | 
               | The Clojurians slack, Clojure Reddits and Clojurverse are
               | more representative, and you can hardly see anything
               | about Web frameworks in those places.
        
       | avanai wrote:
       | I think this article vastly undersells the value of Java(script)
       | interop. The ability to call out to a well-maintained library in
       | two of the most widely-used languages in the industry is one of
       | the major selling points of Clojure as a pragmatic LISP, versus
       | e.g. Racket or CL. The reason why there are so many half-baked
       | wrappers around popular Java libraries is that it's reasonably
       | trivial to write one yourself on demand, so that's what people
       | do.
        
       | waffletower wrote:
       | Clojure libraries target microservices with a precision that no
       | other language ecosystem has. In essence, Clojure web services
       | developers rail against Rails and other bloated, unnecessarily
       | complected (https://www.infoq.com/presentations/Simple-Made-
       | Easy/) frameworks of the 90s. As a Clojurist I too rail against
       | Rails. I don't think that expansive model fits the problem space.
       | I have had painful experiences in the past maintaining Rails
       | projects wondering why they didn't know of DRY. If there is a
       | essence within Rails that you feel could be distilled into a lean
       | Clojure model, build it out in a library and share it.
        
         | janetacarr wrote:
         | My central thesis seems to be getting lost here.
         | 
         | I'm not advocating for a Clojure Rails because I love Rails.
         | I've never used Rails to be honest. I'm arguing open-source
         | efforts are repeatedly being spent on trying to build the next
         | web framework/library/toolkit (Rails) for Clojure and not much
         | else, so it would be great if there was one, so we can get on
         | with filling the gaps in the Clojure ecosystem.
        
           | huahaiy wrote:
           | "open-source efforts are repeatedly being spent on trying to
           | build the next web framework/library/toolkit (Rails) for
           | Clojure and not much else", really?
           | 
           | That's contrary to what most of us know. There are some
           | efforts in the Web front, but not much. At least, the
           | community is not paying much attention to these efforts.
           | 
           | Let's look at the list of community funded projects, e.g.
           | those in Clojure Together: the only Web related projects
           | funded were clj-http in 2018, ring, re-frame and reagent in
           | 2020. None of these are Web frameworks, and the rest of the
           | funded projects are not Web related at all.
        
         | aantix wrote:
         | Keeping things DRY is about the discipline of the developer.
         | 
         | It's nothing specific to the language or framework.
        
       | ben_jones wrote:
       | Im sorry I couldn't get past a hypothetical Org allowing a single
       | developer to yolo-yeet bespoke languages, frameworks, tooling,
       | into internal-critical-business-project after internal-critical-
       | business-project.
       | 
       | If your Org behaves like the above you could have the best Rails-
       | Closure framework in the world but you're still destined for
       | implosion.
        
       | troutwine wrote:
       | It's an interesting argument. However, I'm not sure about it.
       | Consider Rust doesn't have a Rails per se but the ecosystem it is
       | thriving. It seems more like an indication that the Clojure
       | community of developers is either focused on things other than
       | the article is concerned with, or its period of popularity has
       | waned and the libraries that do exist from that time are slowly
       | rotting. I think about Erlang before Elixir. In its niche Erlang
       | had a very good set of libraries, primarily centered around lower
       | level network communication type things. But for integration with
       | popular APIs etc. not so much. After Elixir and an influx of new
       | people the off-the-shelf library situation got significantly
       | better. I don't think that's because they were doing Rails type
       | things necessarily but more because there was a more diverse pool
       | of developer community, whereas the Erlang community was slowly
       | shrinking through attrition.
       | 
       | If you want Clojure to thrive again you'll have to stop the
       | attrition of its developer community. Maybe that's by building a
       | Rails but even your example in-article where Go is more suitable
       | isn't really a web type problem. What problems can Clojure solve
       | that other languages can't, in a way that is worth the effort for
       | someone new to the ecosystem?
        
         | janetacarr wrote:
         | I think you've answered you're own question here, in a sense.
         | 
         | Erlang was created by Ericson for use in telecom systems. (OTP
         | stands for Open Telecom Platform) which gives credence to the
         | idea that Erlang didn't need a Rails. Once Elixir came along,
         | being a bit more general purpose, people started building those
         | things.
         | 
         | Clojure, from the beginning, was intended to be a general
         | purpose language, not a web language. So I think it would be
         | fine to expect Clojure to be able to solve non-web type
         | problems. Maybe the community has attrition, but I don't think
         | so. The Clojurians slack seems bigger than it ever was, more
         | companies are using Clojure than I've ever seen.
         | 
         | edit: general not generate
        
           | troutwine wrote:
           | Minor quibble, OTP _used_ to stand for Open Telecom Platform
           | but that acronym was removed in the push to open-source.
           | Ericson had hoped to sell the Open Telecom Platform to other
           | telecoms but that didn't work out, hence the modern
           | Erlang/OTP. Anyhow, Erlang's niche was and is fault-tolerant
           | middleware, yeah, the kind of thing you see deep in the
           | bowels of systems. The community built up a sizable bulk of
           | code to support the kind of middleware you'd find in
           | Enterprise-y type places in the early 2000s and then slowly
           | started to fall off, leaving an ecosystem that slowly bit-
           | rotted in much the same way you describe in your article.
           | That, specifically, is what I'm referring to as the off-the-
           | shelf rot problem. Perhaps I could have been more clear.
           | 
           | I agree with the argument that Clojure was intended to be a
           | general purpose kind of language, but I think you article
           | also suggests that -- unless you're tied to a JVM model _and_
           | you refuse to use Java -- that Clojure gets out-competed by
           | languages like Go in that kind of work. It's not clear to me
           | how or why building a Rails kind of thing for Clojure would
           | reverse this situation. I think, also, the size of an online
           | community and tally of companies can be misleading. Erlang's
           | IRC and company use was at an all-time high even while the
           | actual pool of developers had reached its peak and was
           | declining, slowly but surely. It's argument from analogy,
           | sure, but what you're describing in the article for Clojure
           | looks damn familiar from my time with Erlang, pre-Elixir.
        
         | Macha wrote:
         | I think the lack of a Rails or other flagship framework has
         | arguably hurt Rust if you compare it's trajectory to that of
         | Go. Go had Docker and Kubernetes as early flag bearers to
         | indicate it's a "real language", while Rust has only really had
         | the critical mass to start getting treated as one in the last
         | two years.
        
           | troutwine wrote:
           | Ah yeah, very fair if we're talking "Rails" as a signifier of
           | a big project that gives a language and ecosystem is
           | "flavor". For what it's worth, I imagine Go has a broader
           | remit than Rust even today. Go is a very good update on the
           | pain points of Python for domains where integration with
           | existing C libraries can be a little wonky, resource
           | consumption isn't a major concern. Rust puts resource
           | consumption and fitting into existing systems projects as a
           | first class design concern, which is great for me because
           | that's the kind of thing I work on, but I do admit it makes
           | for a more challenging language to use.
        
       | liveoneggs wrote:
       | This comes up a lot and, I think, Laravel provides a great model
       | for competing with rails. Stripe integration -
       | https://laravel.com/docs/9.x/billing
        
       | blain_the_train wrote:
       | MVC don't help with strip payment integrations.
        
       | georgeoliver wrote:
       | >If we used interop for everything mundane, Clojure would really
       | just be an S-expression shaped husk over Java code. Not a very
       | good solution.
       | 
       | IMO some programmers pursue purity (no pun intended) over
       | pragmatism, at their own expense. I understand the appeal, it's
       | like hand planing a board with your vintage No. 8 instead of
       | sending it through the Powermatic.
        
         | janetacarr wrote:
         | I understand this. Contrary to what I wrote, I do use interop
         | to get work done when I have to, but it's certainly not an
         | inviting solution.
        
         | seabird wrote:
         | It's a lot more like buying a board planing robot cell,
         | replacing the robot with a human operator because you couldn't
         | get a teach pendant for it, replacing the automated part
         | loading/unloading because you're now running parts that your
         | fixtures can't handle, and ultimately replacing your low-cycle-
         | time planer with a Powermatic because the vendor went under and
         | you can't get any spare parts. Now you just have a Powermatic
         | with a human operator and a distant memory of your initial
         | machine.
         | 
         | You (at least should be) picking oddball stuff like Clojure
         | because the unique advantages outweigh the problems. If you're
         | just using it as a wrapper over another language that doesn't
         | provide those advantages, you're taking the balls off the bull,
         | and you probably should have just used Java, C#, Go, etc.
        
       | draw_down wrote:
        
       ___________________________________________________________________
       (page generated 2022-07-30 23:00 UTC)