4 ms·
This is really a massive release with many cool new features My personal favorite is add-libs You can now write single file demos or minimal examples for issu
by contrarian1234 2y ago
This is really a massive release with many cool new features
My personal favorite is add-libs
You can now write single file demos or minimal examples for issues. Really lowers the friction to share small runnable snippets with people
You can also actually use it to demo Java libraries as well without all the Java boilerplate. Just poke around in the REPL and paste code into a comment on HN or wherever and anyone can replicate your "setup" and get it running exactly the same. No need to clone a repo or anything
- fire_lake 2y agoCool! You should post an example :)
- geokon 2y agoJust tested it: You run `clj` to get a Clojure REPL Then you can for instance paste the following into the REPL (add-libs {'thi.ng/geom {:mvn/version "1.0.0-RC4"}}) (use 'thi.ng.geom.viz.core) (use 'thi.ng.geom.svg.core) (->> {:x-axis (linear-axis {:domain [-10 310] :range [50 550] :major 100 :minor 50 :pos 150}) :y-axis (linear-axis {:domain [0 4] :range [50 150] :visible false}) :data [{:values [[0 100] [10 90] [80 200] [250 300] [150 170] [110 120] [210 280] [180 280] [160 240] [160 170]] :attribs {:stroke-width "10px" :stroke-linecap "round" :stroke "#0af"} :layout svg-stacked-interval-plot}]} (svg-plot2d-cartesian) (svg {:width 600 :height 200}) (serialize) symbol) - the first line downloads a library and adds it to the running session - the second and third line add the library to the REPL's default namespace - the rest of the code makes an axis and plots some random values - the output is then serialized and send out the REPL output You should get a little SVG plot on the output PS: Make sure you have version `1.12` by running with `clj --version`. If not, then (re)run the instructions here to get the latest version: https://clojure.org/guides/install_clojure https://clojure.org/guides/install_clojure
- puredanger 2y agoUsing (add-lib 'thi.ng/geom) is sufficient here - it uses the newest version by default.
- diggan 2y agoParent specified a RC version, does it automatically use the latest RC versions as well? AFAIK, it only uses the latest stable version, but I could be wrong, it happened before.
- geokon 2y agoHere is an example playing with BooFCV's Java API It'll pop up a little window displaying an image (add-libs {'org.boofcv/boofcv-all {:mvn/version "0.35"}}) (import 'boofcv.alg.color.ColorRgb 'boofcv.core.image.ConvertImage 'boofcv.gui.ListDisplayPanel 'boofcv.gui.image.ShowImages 'boofcv.io.UtilIO 'boofcv.io.image.ConvertBufferedImage 'boofcv.io.image.UtilImageIO 'boofcv.struct.image.GrayU8 'boofcv.struct.image.ImageType 'boofcv.struct.image.Planar 'java.awt.image.BufferedImage) (let [image-url "https://kxygk.github.io/web/chengdu.jpg" color (ConvertBufferedImage/convertFrom (UtilImageIO/loadImage image-url) true, (ImageType/pl 3 GrayU8)) weighted (GrayU8. (.width color) (.height color)) gui (ListDisplayPanel.)] (ColorRgb/rgbToGray_Weighted color weighted) (.addImage gui weighted (str (.width color) " " (.height color))) (ShowImages/showWindow gui "RGB222" true))
- didymospl 2y agoDoes anyone remember Groovy? It has @Grab annotation which does essentially the same as add-libs you described. Very conventient for writing scripts.
- kaba0 2y agoYes! Groovy does have quite a few under appreciated cool gems, and it’s a shame that is barely getting any attention nowadays..
- kagevf 2y ago> Does anyone remember Groovy? I recall that Atlassian had some kind of scripting console where you could run Groovy and interact with its API / objects. It was useful for exploring when writing plugins for bamboo or Jira ...
- vips7L 2y agoJbang has a similar feature: https://www.jbang.dev/documentation/guide/latest/dependencies.html https://www.jbang.dev/documentation/guide/latest/dependencie...
- pjmlp 2y agoNote that Java has a REPL now and scripting support, although something like add-libs is still missing from available meta commands.
- medo-bear 2y agoJava's REPL is like a kick in the nuts compared to using one in Common Lisp. How does Clojure's REPL feel like in comparison?
- diggan 2y agoHaven't used neither Java's repl nor Common Lisp (just read about both of them) but at a glance Clojure's repl is much closer to CLs repl than Java's. In fact, I think it's confusing to call the repls of language like Ruby, Java, JavaScript et al "REPL" at all, compared to what lisps offer, as the experience is so different. They're more like "Code evaluators" than anything else. Typically when using repls outside of lisps, you'd type your code into the actual repl window, while in lisp-land you typically connect your editor to the repl and program like usual, selecting stuff to evaluate and so on.
- filoeleven 2y ago> In fact, I think it's confusing to call the repls of language like Ruby, Java, JavaScript et al "REPL" at all Agreed. I always call them “consoles,” since I work largely in JS and that’s what the browser calls it. There’s no way in a console to jump into a module and modify a single function without resetting any state that the module was tracking.
- ajanuary 2y agorepl as a name kind of describes the requirements for something to be a repl - it has a read-evaluate-print loop. It would be more confusing to say that something with a read-evaluate-print loop isn't a repl.
- jdminhbg 2y ago