The low-level stuff is already "done" with https://GitHub.com/jetbrains/skija which is a Java API with FFI to Googles skia library, which is used for rendering in Chrome and Firefox amongst other things.
Really? In the podcast they say it's similar to what they used for over a year in production, made available to get feedback from others and that's why it's released as alpha.
Ryan from Relevance here. It is true some of the ideas behind pedestal have been around for a couple years, but always as tweaks and hacks over top of existing frameworks. Every project has had its own unique and most importantly, local, implementation.
Pedestal is a culmination of those efforts into a new set of libraries. Some of the code from other projects inspired what there is today, but an even greater portion was created from scratch to make it more generally applicable. We haven't had the chance to use this incantation of the ideas in production yet, but we wholly intend to. We hope this experience, and that of the community, can help us bring this to beta or fully production ready.
Funny... No latter than yesterday I used something very similar to Lisp macros to add function profiling to Clojure functions. Took very few lines of code, like you'd expect from a Lisp.
Parenthesis serves the purpose of homoiconicity and it looks like Clojure is homoiconic... sexp / lambda expressions / HoF / macros / etc.
You know: "If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck."
Regarding people like you, the "haters gonna hate" type of people, here's what Rich Hickey has to say:
"Life is too short to spend time on such people. Plenty of Lisp experts have recognized Clojure as a Lisp. I don’t expect everyone to prefer Clojure over their favorite Lisp. If it wasn’t different in some ways, there’d be little reason for it to exist."
I'd add that you're commenting on a board created by a real Lisp hacker who created its own Lisp and, if I'm not mistaken, who's now recommending Clojure has the Lisp dialect to learn for Lisp newcomers.
The whole point is that it isn't like duck. The general evaluation rule with few special cases is broken, it is a whole bunch of special cases. Adding data-structures to a Lisp ruins it. It become a mess of a wired syntax, various comprehensions and unnecessary explicit conventions.
The beauty and elegance of a Lisp lies in that there is nothing to remove - a few selected ideas put together - and one common for code and data underlying list structure. This leads to a compact, readable code with relatively easily "maps to" machine code, because the memory is flat.
I don't care what Rich Hickey said. For me he is much better salesman, than engineer. He is very clever at selling, no doubt. But the whole Java scam is about clever selling of unnecessary complications from the very first days.
Moreover, those Lisp experts I have learned from didn't even mention Clojure.)
In Clojure the data structures work consistently across the language, which to me is one of many reasons why Clojure is a better Lisp than Common Lisp (but CL has its place).
> Moreover, those Lisp experts I have learned from didn't even mention Clojure.
On the contrary, Clojure is and has since its inception been praised and often adopted by prominent users of Scheme and Common Lisp (the list is too long, but for example the late Daniel Weinreb declared Clojure the future of Lisp). The Clojure conference in Portland this last few days is a perfect example of the cross-fertilization between the Racket/Scheme logic programming subcultures and the Clojure logic programming subcultures.
Come on. Arrays are absolutely necessary for certain algorithms, so, they are here, so are efficient hash-tables. Structures (records) were standardized, but they are nothing but a bunch of macros. And that is good-enough.)
I'm a virtual student of prof. Brian Harvey (and reader of pg and Norvig).
And there is nothing special in trying to "port" the ideas form the "old" Lisp world to Clojure and present them as a new. Simple trick. All those logic programming buzz is from karen, query language of datatomic is from old expert systems, etc.
> What pain-points of Leiningen and Compojure does this framework aim to solve?
There are no problems with Leiningen solved. It's based on it like other Clojure libs with project templates etc.
With Compojure it's another story, it only gives you a handler function. Pedestal makes a routing table available, enabling reverse routing. The route definition is data based. It's less repetitive to define routes.
> I'm sure its an excellent framework, but there way too much for me to consider using it right now. My concerns:
How difficult would it be to switch out Datomic for PostgreSQL?
Not difficult at all? Have you looked at the datomic tutorial? It does nothing besides setting up a connection and querying the database. What dbs do not support that?
>What if I don't want ClojureScript at this moment?
What happens if I want to switch X with Z or drop ABC?
How hard will it be to minimize and erase all the things I don't want?
Well, you go through and pick the libraries you want to use?
> Why are there so many extra words needed for the routing templates?
It's a comprehensive description of all aspects of the flexible routing dsv, including the programatic inteface to define routes at runtime.
> I've always felt Clojure would get a boost from a Rails-like framework, but I'm concerned that a large, opinionated framework will break the very promise of Clojure: flexibility and easy DSL creation. Once we are faced with something that needs to be reverse-engineered or broken, then this promise is ruined.
It's not rails. We've all seen where that got.
> I'm all for new frameworks and ideas, but its a little funny to think that Noir was dropped, in part, for being too large and complicated.
It's a set of libraries, not a framework.
Also, it doesn't add state for everything everywhere. Instead it takes the current concept of Clojure web apps and takes it to the next level.
In Compojure you define lots of routes, mostly calling separate handling functions, only passing out the routes parameters. That what pedestals routing does by default. That's just one example of many.