Re: data structure creation time in cljs
I've just updated benchmark dependencies to reflect latest changes in ClojureScript. Keywords are little slower than before but otherwise there are no big differences. JW On Wednesday, November 6, 2013 5:04:26 AM UTC+1, kovasb wrote: FYI, http://wagjo.github.io/benchmark-cljs/ has some interesting cljs perf comparisons for various datastructures, for those who haven't seen it. On Tue, Nov 5, 2013 at 10:38 PM, kovas boguta kovas@gmail.comjavascript: wrote: I'm trying to optimize zippers for clojurescript. My benchmark is implementing the combinator systems from https://www.wolframscience.com/nksonline/page-102 which heavily stress both navigating and modifying the tree. A major hotspot seems to be data structure creation time, which can be between 10 and 200x slower than jvm. I'm using Chrome 30.0.1599.101 . Vectors: (time (dotimes [x 100] ( vector x))) cljs: 2175 msecs clj: 11.414 msecs strangely, apply is faster for cljs : (time (dotimes [x 100] (apply vector [x]))) cljs: 1175 msecs clj: 64.919 msecs into gives about the same result for cljs. Creating a datastructure literal (eg [x]) is about 5x slower in cljs over clj, which I would take, however in the zipper case the number of children can vary dynamically. Lists: (apply list [x]) is about 2x faster than the vector case in cljs, and within about 5x of the jvm speed. Unless there is a better idea, I may try a specialized list-oriented zipper and see how it performs. Records: Creation is about ~10x slower than in clj. What's weird is that creating hashmaps is actually marginally faster than creating records (however, records still have much faster field access, so I'm using a record-based zipper implementation) (defrecord Test [a]) (time (dotimes [x 100] (Test. x))) cljs: 60 msecs clj: 7.00 msecs Is there a trick to speed up vector and/or record creation? Should I look into a custom datastructure? Any ideas welcome. Thanks! -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: recommended: Java: The Good Parts
With Clojure, you can mostly ignore Java's syntax until and unless you want or need to write a Java class to call from Clojure for some reason. But knowing some of the major parts of the standard Java class library (particularly java.lang, java.math, java.util, java.util.concurrent, awt.*, and javax.swing) is useful if you're doing much interop, and the Java classes that are common Clojure literal datatypes have additional operations available through interop (assorted String operations; java.math.BigDecimal.scaleByPowerOfTen(exponent); etc.) Knowing some things about the JVM will also come in handy. On Tue, Nov 5, 2013 at 10:32 PM, JJ johnjacka...@gmail.com wrote: For another option, the http://docs.oracle.com/javase/tutorial/ was good enough for me in getting familiar enough with Java for Clojure. (you don't need most of the stuff there and depending on your experience you can get through the important parts in a week). Of course, I come from C and Ruby so this recommendation may be biased, C syntax makes Java look familiar, and Ruby OOP is useful for Java. On Monday, November 4, 2013 11:03:55 PM UTC-5, Rich Morin wrote: When I first started looking into Clojure, I was dismayed to find that it is deeply entangled with Java (which I had successfully avoided for some decades. You mean I have to learn FP, Lisp, _and_ Java ?!?!? I got some Java books, looked them over, and decided to hope that I could mostly ignore the Java-based parts of Clojure. This was not a great strategy, to be sure, but it was better than diving into piles of Java books (and worse). However, I recently ran across a tiny (200 pp) conceptual guide to Java that seems to have most of the needed information (and a healthy dose of opinionated advice from a highly qualified source). I particularly like the fact that the author tries hard to explain the concepts as well as the details. So, check it out... Java: The Good Parts http://www.amazon.com/dp/0596803737 Jim Waldo, 2010; O'Reilly Media -r -- http://www.cfcl.com/rdm Rich Morin r...@cfcl.com http://www.cfcl.com/rdm/resumeSan Bruno, CA, USA +1 650-873-7841 Software system design, development, and documentation -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Cursive IntelliJ working on multiple Leiningen projects require - refer :as not working
Thanks for looking into this, highly appreciated. On Wednesday, November 6, 2013 7:49:59 AM UTC+1, Colin Fleming wrote: Right, I had a chance to take a look at this - the classpath for the REPL unfortunately doesn't include the source directories of dependent modules. I'll fix that in the next build. There is a workaround. In Settings-Compiler-Clojure Compiler, enable Copy Clojure source files to output path. In Settings-Compiler, if you have Use external build selected then change the resource pattern for Clojure from !?*.clj to ?*.clj. Then you can build your dependent module manually (for example, by right clicking on it in the project tree and selecting Make Module 'your module'. That will copy your Clojure files to the output path and they'll be picked up by the REPL then. On 6 November 2013 10:50, Colin Fleming colin.ma...@gmail.comjavascript: wrote: Hmm, there may be some problem with the classpath there - I'll take a look. On 5 November 2013 23:53, Niels van Klaveren niels.va...@gmail.comjavascript: wrote: The namepace resolution issue vanished after upgrading Cursive and re-opening the project after deleting the IntelliJ artifacts in it. Checkouts namespacing is recognized as well, and checkouts src directories are nicely marked as such. However, when loading the file in the REPL I get a Could not locate menthy/utils_java/jdbc__init.class or menthy/utils_java/jdbc.clj on classpath exception for calls to the checkout project(s). On Tuesday, November 5, 2013 7:51:00 AM UTC+1, Colin Fleming wrote: Hi Niels, I've just released Cursive 0.1.05 which fixes this issue. Documentation for the Leiningen support is herehttp://cursiveclojure.com/userguide/leiningen.html. Basically you should be able to just import your project wholesale and it will automatically work out all the dependencies. Checkout dependencies are also transparently supported for interop with other tools. Let me know if it works for you, and I'd be interested to know more about your namespace resolution problems too. Feel free to drop me a mail at cur...@cursiveclojure.com if you'd rather send it off-list. Thanks, Colin On 2 November 2013 04:44, Niels van Klaveren niels.va...@gmail.comwrote: The release notes mention that working on multiple Leiningen projects has been improved, but how to get it working ? I wondered if there's a preferred way to work on multiple Leiningen projects, so changes in one are reflected in the other. - Leiningen has the option to work with the checkouts directory containing a simlink (linux) / junction link (windows) to the directories in question - CounterClockWise has the option to add the other project to the project build path I got things working by using the checkout directory / junction link method, and in Cursive marking the checkout source directory as a Source Root. Is this the intended way to do it, or is there another way ? Another thing I noticed is that require :as alias and require :refer aren't picked up, and all aliased / referred function calls are marked as cannot resolved be resolved warnings. Any way I can get rid of those ? -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@**googlegroups.com For more options, visit this group at http://groups.google.com/**group/clojure?hl=enhttp://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@**googlegroups.com. For more options, visit https://groups.google.com/**groups/opt_outhttps://groups.google.com/groups/opt_out . -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.comjavascript: Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com javascript: For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com javascript:. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first
grojure 0.10.0
A new version of Grojure is available: https://github.com/gavingroovygrover/grojure It's alpha because the grammar is still changing between versions. You will probably find grojure useful in 2 ways: * as an example of using the Kern combinator parsing library (by Armando Blancas) for a more complex grammar * ideas for syntax to put into your own Clojure-hosted language. Everything specified here is implemented: https://github.com/gavingroovygrover/grojure/blob/master/GRAMMAR.md Gavin Groovy Grover -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: abysmal multicore performance, especially on AMD processors
As a person who has recently been dabbling with clojure for evaluation purposes I wondered if anybody wanted to post some links about parallel clojure apps that have been clear and easy parallelism wins for the types of applications that clojure was designed for. (To contrast the lengthy discussion and analysis of this topic that is *hopefully* the exception and not the rule). Any good links here? Any high profile stuff? -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: abysmal multicore performance, especially on AMD processors
Hi, I believe Clojure's original mission has been giving you tools for handling concurrency[1] in your programs in a sane way. However, with the advent of Reducers[2], the landscape is changing quite a bit. If you're interested in the concurrency vs. parallelism terminology and what language constructs supporting them are available, [3] should give you a very good overview. I understand, I haven't actually answered you're question, but I wasn't sure whether you're referring to concurrency or parallelism. :) Las [1] http://clojure.org/concurrent_programming [2] http://clojure.com/blog/2012/05/08/reducers-a-library-and-model-for-collection-processing.html [3] http://clojure-doc.org/articles/language/concurrency_and_parallelism.html 2013/11/6 Dave Tenny dave.te...@gmail.com As a person who has recently been dabbling with clojure for evaluation purposes I wondered if anybody wanted to post some links about parallel clojure apps that have been clear and easy parallelism wins for the types of applications that clojure was designed for. (To contrast the lengthy discussion and analysis of this topic that is *hopefully* the exception and not the rule). Any good links here? Any high profile stuff? -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- László Török -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: abysmal multicore performance, especially on AMD processors
2013/11/6 Dave Tenny dave.te...@gmail.com (To contrast the lengthy discussion and analysis of this topic that is *hopefully* the exception and not the rule) Some of the comments reveal that part of the problem is in part with JVM memory allocator which has its throughput limits. There are known large commercial systems entirely in Clojure that demonstrate excellent latency (and, likely, throughput). I believe Factual, Runa/Stables Labs and Prismatic posted various numbers here but don't have the links handy. Feel free to start a separate thread to collect some feedback. -- MK http://github.com/michaelklishin http://twitter.com/michaelklishin -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
What font is used for Clojure on clojure.org?
I'm looking for it to incorporate it into a cIDEr logo I'm playing with. -- In Christ, Timmy V. http://blog.twonegatives.com/ http://five.sentenc.es/ -- Spend less time on mail -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: abysmal multicore performance, especially on AMD processors
You should also specify how many cores you plan on devoting to your application. Notice that most of this discussion has been about JVM apps running on machines with 32 cores. Systems like this aren't exactly common in my line of work (where we tend to run greater numbers of smaller servers using virtualization), but perhaps they are in yours. Timothy Baldridge On Wed, Nov 6, 2013 at 8:45 AM, Michael Klishin michael.s.klis...@gmail.com wrote: 2013/11/6 Dave Tenny dave.te...@gmail.com (To contrast the lengthy discussion and analysis of this topic that is *hopefully* the exception and not the rule) Some of the comments reveal that part of the problem is in part with JVM memory allocator which has its throughput limits. There are known large commercial systems entirely in Clojure that demonstrate excellent latency (and, likely, throughput). I believe Factual, Runa/Stables Labs and Prismatic posted various numbers here but don't have the links handy. Feel free to start a separate thread to collect some feedback. -- MK http://github.com/michaelklishin http://twitter.com/michaelklishin -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- “One of the main causes of the fall of the Roman Empire was that–lacking zero–they had no way to indicate successful termination of their C programs.” (Robert Firth) -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: What font is used for Clojure on clojure.org?
Hi Tim, That is Avenir 65 Medium. Cheers, Tom Hickey On Wednesday, November 6, 2013 11:06:24 AM UTC-5, Tim Visher wrote: I'm looking for it to incorporate it into a cIDEr logo I'm playing with. -- In Christ, Timmy V. http://blog.twonegatives.com/ http://five.sentenc.es/ -- Spend less time on mail -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: What font is used for Clojure on clojure.org?
Thanks, Tom! Here's what I did with it: https://github.com/clojure-emacs/cider/issues/399#issuecomment-27878950 On Wed, Nov 6, 2013 at 11:56 AM, Tom Hickey thic...@gmail.com wrote: Hi Tim, That is Avenir 65 Medium. Cheers, Tom Hickey On Wednesday, November 6, 2013 11:06:24 AM UTC-5, Tim Visher wrote: I'm looking for it to incorporate it into a cIDEr logo I'm playing with. -- In Christ, Timmy V. http://blog.twonegatives.com/ http://five.sentenc.es/ -- Spend less time on mail -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
ANN Langohr 1.6.0 is released
Langohr is a small, feature complete Clojure client for RabbitMQ that embraces AMQP 0-9-1 model [1]. 1.6.0 is primarily a bug fix release. Change log: http://blog.clojurewerkz.org/blog/2013/11/05/langohr-1-dot-6-0-is-released/ 1. http://clojurerabbitmq.info -- MK http://github.com/michaelklishin http://twitter.com/michaelklishin -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
ANN: ClojureScript 0.0-2014 - source maps, incremental compilation, and internal changes
ClojureScript, the Clojure compiler that emits JavaScript source code. README and source code: https://github.com/clojure/clojurescript New release version: 0.0-2014 Leiningen dependency information: [org.clojure/clojurescript 0.0-2014] There are a number of significant enhancements in this release. We finally have relative source maps! This should be big for people integrating ClojureScript with existing web based workflows. Under the hood Chas Emerick has improved how the analyzer works making it thread safe. This make the compiler considerably more robust and eliminates some race conditions in the browser REPL support. Incremental compilation is enhanced both with and without source maps. In particular we now tag ClojureScript compiled JavaScript files with the version of the compiler used - this should make transitioning to a new version of the compiler considerably less frustrating - stale files will get compiled. For those people using the compiler internals directly you will likely encounter breakage. If anyone feels inclined to outline a more stable interface to internals please get involved in leading an incremental process towards a stable and flexible API for tool builders. Enhancements: * relative source map paths, all original sources will be copied to :ouput-dir this should make integrating with web workflow much simpler. * runtime obtainable compiler version number, *clojurescript-version* now available at runtime as a string Bug fixes: * CLJS-643: make the ClojureScript compiler (more) idempotent * CLJS-662: CLJS files compiled from JARs get lost from source map * CLJS-661: (try ... (catch :default e ...) ...) * CLJS-627: Add warnings on function arity problems * CLJS-654: Quit repljs on ^D, don't loop on nil * CLJS-659: tag compiled files with compiler version * CLJS-642: deftype/record should not emit goog.provide * CLJS-648: persistent assoc/conj on a transient-created collision node * CLJS-631: Use ana/namespaces for shadowing vars * CLJS-641: js* overflow for large inputs * CLJS-645: parse-ns needs to include 'constants-table as a dep * CLJS-646: single segment namespaces and reify don't work * CLJS-521: pass along entire repl environment when loading dependencies -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: ANN: ClojureScript 0.0-2014 - source maps, incremental compilation, and internal changes
Oh, the speed of incremental compilation is now dependent on tools preserving the complier environment information - Chas Emerick should be cutting a release of lein-cljsbuild that does this when ClojureScript 0.0-2014 hits Maven Central. On Wed, Nov 6, 2013 at 3:09 PM, David Nolen dnolen.li...@gmail.com wrote: ClojureScript, the Clojure compiler that emits JavaScript source code. README and source code: https://github.com/clojure/clojurescript New release version: 0.0-2014 Leiningen dependency information: [org.clojure/clojurescript 0.0-2014] There are a number of significant enhancements in this release. We finally have relative source maps! This should be big for people integrating ClojureScript with existing web based workflows. Under the hood Chas Emerick has improved how the analyzer works making it thread safe. This make the compiler considerably more robust and eliminates some race conditions in the browser REPL support. Incremental compilation is enhanced both with and without source maps. In particular we now tag ClojureScript compiled JavaScript files with the version of the compiler used - this should make transitioning to a new version of the compiler considerably less frustrating - stale files will get compiled. For those people using the compiler internals directly you will likely encounter breakage. If anyone feels inclined to outline a more stable interface to internals please get involved in leading an incremental process towards a stable and flexible API for tool builders. Enhancements: * relative source map paths, all original sources will be copied to :ouput-dir this should make integrating with web workflow much simpler. * runtime obtainable compiler version number, *clojurescript-version* now available at runtime as a string Bug fixes: * CLJS-643: make the ClojureScript compiler (more) idempotent * CLJS-662: CLJS files compiled from JARs get lost from source map * CLJS-661: (try ... (catch :default e ...) ...) * CLJS-627: Add warnings on function arity problems * CLJS-654: Quit repljs on ^D, don't loop on nil * CLJS-659: tag compiled files with compiler version * CLJS-642: deftype/record should not emit goog.provide * CLJS-648: persistent assoc/conj on a transient-created collision node * CLJS-631: Use ana/namespaces for shadowing vars * CLJS-641: js* overflow for large inputs * CLJS-645: parse-ns needs to include 'constants-table as a dep * CLJS-646: single segment namespaces and reify don't work * CLJS-521: pass along entire repl environment when loading dependencies -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Crowdfunding for full-time core.typed development
On Sep 27, 2013, at 09:51, Ambrose Bonnaire-Sergeant wrote: I have started a crowdfunding campaign to support full-time work on Typed Clojure. Please share! http://www.indiegogo.com/projects/typed-clojure With only five (5) days left, the Typed Clojure campaign still needs $47,400 to meet the stretch goal of supporting Ambrose for a full year of development. I think Ambrose is offering Typed Clojure fans a real bargain here and we _definitely_ should take him up on it. If you've been waiting for the right time to contribute, this is it! -r -- http://www.cfcl.com/rdm Rich Morin r...@cfcl.com http://www.cfcl.com/rdm/resumeSan Bruno, CA, USA +1 650-873-7841 Software system design, development, and documentation -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: data structure creation time in cljs
Some good news and some puzzling news. With advanced mode, the various forms of non-literal vector creation clock in around 400msec for 1 million ops on node, which is a 2-to-5x improvement. Now, the puzzling bit: Using time, I get a big fat 0 for certain kinds of operations: (time (dotimes [x 100] (Test. x))) -- big fat 0 Again this is on node, running the script from the command line. There also seems to be some issue with laziness, where some of my big list operations are getting a 0 as well. Is advanced mode somehow optimizing these things away because they don't get used elsewhere in the program? Pretty confusing. On Tue, Nov 5, 2013 at 11:21 PM, David Nolen dnolen.li...@gmail.com wrote: Yes no benchmarking with anything other than advanced please - lots of optimizations kick in only for :advanced, especially around various forms of function invocation, :simple + :static-fns true will also give reasonable results however it'll mess with REPL interactivity. David On Tue, Nov 5, 2013 at 11:13 PM, kovas boguta kovas.bog...@gmail.com wrote: On Tue, Nov 5, 2013 at 11:05 PM, David Nolen dnolen.li...@gmail.com wrote: Also what optimization settings are you using? I guess I should try something other than the browser repl. Will retry with advanced optimizations. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: data structure creation time in cljs
On Wed, Nov 6, 2013 at 7:36 PM, kovas boguta kovas.bog...@gmail.com wrote: There also seems to be some issue with laziness, where some of my big list operations are getting a 0 as well. Alright I managed to figure out my laziness issue, but the thing with records is still a head-scratcher... -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: data structure creation time in cljs
Yes Closure is smart enough to remove code that doesn't do anything. Try with :simple and :static-fns true On Wednesday, November 6, 2013, kovas boguta wrote: On Wed, Nov 6, 2013 at 7:36 PM, kovas boguta kovas.bog...@gmail.comjavascript:; wrote: There also seems to be some issue with laziness, where some of my big list operations are getting a 0 as well. Alright I managed to figure out my laziness issue, but the thing with records is still a head-scratcher... -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.comjavascript:; Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com javascript:; For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com javascript:;. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: [ANN] Jig
Too right. Yes, wrt the multi-project / classpath thing, running isolated test for a particular project is only one aspect. I also have an eye to running a i) browser-connected repl and ii) debugger for a particular project. So those things, along with iii) running tests, make very high, the attractiveness of having that isolation. I'll try to put those in github issues. And also pick at the problem myself when I get some cycles. I think it would add a powerful feature to the tool. Anyways... :) Tim Washington Interruptsoftware.ca http://interruptsoftware.ca/ / Bkeeping.comhttp://bkeeping.com/ On Tue, Nov 5, 2013 at 4:33 AM, Malcolm Sparks malc...@juxt.pro wrote: Hi Tim, The tests in JUXT accounting are using clojure.core.test. I'm fairly sure Midje's :autotest feature does something dynamic to determine the tests to run and that may not work with Jig's classloading approach. For example, if something uses (System/getProperty java.class.path) it will just get the Jig source directories because, for external projects, Jig must load these using a child class-loader. I need to spend some time with Midje to work out what it's doing. Having multiple lein projects loaded in the same JVM, and integrated with each other, is not a common Clojure mode of usage today. However, the Immutant team (and others) have done a lot of the groundwork and I think the various caveats I've listed on Jig's README.md about 'external projects' are going to be ironed out over time as these issues become better understood. I expect that Brian never saw this as a use-case. In the absence of a mailing list right now, please log any issues you see as GitHub issues and I'll do my best to fix them. Thanks again for sending in this really useful feedback. Regards, Malcolm On Monday, 4 November 2013 02:53:47 UTC, frye wrote: Ok, some more feedback for Jig. *A)* Testing - Let's say I have a multi-project jig, with dependencies across projects. There doesn't seem to be a way to run tests (midje :autotest) for a specific project. I tried creating a Midje component (see https://www.refheap.com/20442). But when I *i)* put this into config.edn, and *ii)* thread through my local project component, *iii)*this only prints out the classpath directories under the *jig* project. I'll want to be in the Classpath context of the project that's being passed in. That way, I can :autotest for that project. Or perhaps there's another way to run and autorun tests for a particular project. I noticed that Juxt-Accountinghttps://github.com/juxt/juxt-accountinghas a test suite. *B)* Ok, so there's just that and removing the *config/console.edn* and *config/default.edn* files when writing your jig. *C)* And a raw *git clone g...@github.com:juxt/jig.git*, then *lein repl*, then * (go)*, doesn't give working URLs ( http://:8091/readme , http://:8001/server, etc ) Let me know if you want me to log these as bugs, feature requests, etc. Very excited about the kind of leverage that this project can yield. Loving this tool. Thanks. Tim Washington Interruptsoftware.ca http://interruptsoftware.ca/ / Bkeeping.comhttp://bkeeping.com/ On Sat, Nov 2, 2013 at 8:18 PM, Timothy Washington twas...@gmail.comwrote: Ok, I actually got the compojure example working. I just had to remove the *config/console.edn* and *config/default.edn* files in my jig. They must be disrupting the config that I put in. So that's my only feedback so far. Ok, this is looking really good. Great work :) Tim Washington Interruptsoftware.ca http://interruptsoftware.ca/ / Bkeeping.comhttp://bkeeping.com/ -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to
Re: [ANN] Jig
Hi Tim, It's interesting you're thinking about browser-connected repls. Today I added clojurescript support to Jig, it's pushed to master but I haven't documented the config options yet, but below is an example. Nothing fancy like crossovers yet, it's basically a thin wrapper over ClojureScript's compiler, the config options map directly to the options given to the compiler. :cljs-builder {:jig/component jig.cljs/Builder :jig/project ../my-proj/project.clj :source-path ../my-proj/src-cljs :output-dir ../my-proj/target/js :output-to ../my-proj/target/js/main.js :source-map ../my-proj/target/js/main.js.map :optimizations :simple :pretty-print true ;; :clean-build true } Another built-in component can figure out, given the dependencies, what files to serve and on which server to serve it from. :cljs-server {:jig/component jig.cljs/FileServer :jig/dependencies [:cljs-builder :web] :jig.web/context /js } which depends on some Ring or Pedestal routing and Jetty or other webserver, but you're likely to have that configured already :- :server {:jig/component jig.web.server/Component :io.pedestal.service.http/port 8000 :io.pedestal.service.http/type :jetty } :web {:jig/component jig.web.app/Component :jig/dependencies [:server] :jig/scheme :http :jig/hostname localhost :jig.web/server :server } That's it really. I think Jig makes an ideal platform for building and serving clojurescript, in comparison to Leiningen plugins. Firstly, there's no JVM start-up cost, the point of Jig is to keep the JVM running all the time, so there's no need for the once/auto service that lein-cljsbuild offers. Secondly, serving the resulting Javascript files is straight forward, and built in, so no 'lein ring server' requirement either.. With Leiningen, you either have to build routes to the javascript into your own app, or run lein ring server, but then Leiningen doesn't make it easy to run multiple services concurrently. Thirdly, there's no file-system polling, and services that depend on the clojurescript compilation can be started as soon as the compilation is complete. One thing that lein-cljsbuild does really well is multiple build configs. I've decided to use a single build configuration, to keep implementation easier and a direct mapping to the clojurescript compiler, but of course you can add different builds by just adding (differently configured) components to the Jig config. This would benefit from being able to initialize and start components in parallel, where possible. Unlike cljsbuild, Jig components are started serially, in reverse dependency order. Does anyone know of existing algorithms that can walk a dependency tree in parallel? Feel free to take Jig in different directions though, I'm just letting you know my current thoughts. The single REPL to multiple projects idea might have to be rethought - it seems the prevailing wind is in the direction of multiple REPL connections per editor/IDE. On Thursday, 7 November 2013 01:09:53 UTC, frye wrote: Too right. Yes, wrt the multi-project / classpath thing, running isolated test for a particular project is only one aspect. I also have an eye to running a i) browser-connected repl and ii) debugger for a particular project. So those things, along with iii) running tests, make very high, the attractiveness of having that isolation. I'll try to put those in github issues. And also pick at the problem myself when I get some cycles. I think it would add a powerful feature to the tool. Anyways... :) Tim Washington Interruptsoftware.ca http://interruptsoftware.ca/ / Bkeeping.comhttp://bkeeping.com/ On Tue, Nov 5, 2013 at 4:33 AM, Malcolm Sparks mal...@juxt.projavascript: wrote: Hi Tim, The tests in JUXT accounting are using clojure.core.test. I'm fairly sure Midje's :autotest feature does something dynamic to determine the tests to run and that may not work with Jig's classloading approach. For example, if something uses (System/getProperty java.class.path) it will just get the Jig source directories because, for external projects, Jig must load these using a child class-loader. I need to spend some time with Midje to work out what it's doing. Having multiple lein projects loaded in the same JVM, and integrated with each other, is not a common Clojure mode of usage today. However, the Immutant team (and others) have done a lot of the groundwork and I think the various caveats I've listed on Jig's README.md about 'external projects' are going to be ironed out over time as these issues become better understood. I expect that Brian never saw this as a use-case. In the absence of a mailing list right now, please log any issues you see as GitHub issues and I'll do my best to fix them. Thanks again for sending in this really useful feedback. Regards, Malcolm On Monday, 4 November 2013 02:53:47
[ANN] purnam 0.1.8 - native javascript essentials for clojurescript (documentation out!!!)
I'm really happy that I have finish documenting my new-ish clojurescript library. You can find it here: http://docs.caudate.me/purnam/ - purnam is a *clojurescript* library designed to provide better clojurescript/javascript interop, testing and documentation tools to the programmer. It also has very comprehensive modules for angular.jshttp://angularjs.org/ applications. Current projects requiring interface with external javascript libraries will greatly benefit from this library. 'Pure' clojure/clojurescript libraries will also benefit with its unit-testing and documentation workflows. The library was written to solve a number of pain points that I have experienced in clojurescript development: Better JS Interop The first pain point was having to deal with the clojurish (.dot syntax) for javascript interop as well as a lack of functionality when working with native js objects. This made it especially hard for working with any external js library. Purnam offers: - purnam.cljs http://docs.caudate.me/purnam/#purnam-cljs - functions for native objects and arrays - purnam.js http://docs.caudate.me/purnam/#purnam-js - a set of macros allowing javascript-like syntax for better interop - purnam.types http://docs.caudate.me/purnam/#purnam-types - clojure protocols for native objects and arrays In-Browser Testing The second pain point was the lack of testing tools that worked within the browser. Even though testing withphantom.js http://phantomjs.com/ was fine for non-browser code, I wanted something with more debugging power and so unit testing is integrated with the karmahttp://karma-runner.github.io/ test runner using two different test styles: - purnam.test http://docs.caudate.me/purnam/#purnam-test - testing using jasmine http://pivotal.github.io/jasmine/ syntax - purnam.test.sweet http://docs.caudate.me/purnam/#purnam-test-sweet - testing using midje https://github.com/marick/Midje syntax (compatible with midje-doc https://www.github.com/zcaudate/lein-midje-doc) Angularjs on Clojurescript The third pain point was the code bloat I was experiencing when developing and testing *angular.js* code using javascript. It was very easy to complect modules within large *angular.js*applications and I wanted to use clojure syntax so that my code was smaller, more readable and easier to handle. Purnam offers: - purnam.angular http://docs.caudate.me/purnam/#purnam-angular - a simple dsl for eliminating boilerplate*angular.js* - purnam.test.angularhttp://docs.caudate.me/purnam/#purnam-test-angular - testing macros for eliminating more boilerplate test code for services, controllers, directives and filters Integrated Documentation The fourth pain point was the lack of documentation tools for clojurescript as well as clojure. purnam is compatible withmidje-dochttps://www.github.com/zcaudate/lein-midje-doc so that the integrated testing and documentationworkflowhttp://z.caudate.me/combining-tests-and-documentation/ can be also used in clojurescript. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Testing with Angular.js, Clojurescript and Purnam - Code and Part 1
I've since realised the other reason why I like posting on the clojure group - The clojurescript group for whatever reason does not take html format... it makes the post look super ugly. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
What are effective ways to debug Clojure code?
I'm interested in hearing how people who use Clojure in production are debugging their code, particularly those who use Emacs. I am having issues quickly locating problems in my Clojure code that are identified by automated integration test failures. As an example, I had a Midje test that would make an HTTP call into my application running Compojure and Liberator on Ring on Jetty and I'd get an error back in a stacktrace in my shell running the Ring process. I got to a somewhat useful error of not being able to find a terminator for a JSON object which I correctly divined was actually that the request body was empty. My usual approach to debugging these sorts of problems in C# and Visual Studio is to set the built-in debugger to break on CLR exceptions and then run the integration test with my debugger attached to the web server process and take a look at the exception and local variables starting at the bottom of the stack and going up the stack until I spot something funky. I'm completely lost in figuring out how to do something similar in Clojure and Emacs or a shell, that is to say, running something that will pause execution and let me examine the exception and in-scope variables on a stack frame by stack frame basis with source code context (bonus points if it's a REPL). One thing I've taken a look at is ritz and ritz-nrepl but I seem to get errors when I try to use them. Specifically, Symbol's value as variable is void: nrepl-mode-map which seems to be an already reported issue. As well, the Github repositories don't appear to have been updated in several months which makes me pessimistic that these libraries will be meaningfully maintained and as a result, I feel uncomfortable relying on them. Another thing I looked at was George Jahad's Clojure Debug Toolkit which also doesn't seem to have gotten any love in the last few years and has pretty minimal public documentation around using it.. While playing around with functions in the REPL usually does the job, sometimes the bugs and their locations are not obvious or they're at integration points where the input is a complicated object. I'd like to know what other developers who use Clojure do when they need to debug something and a REPL in a namespace with minimal execution context doesn't seem to do the trick. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: [ANN] Jig
+1 On Friday, October 18, 2013 7:30:20 AM UTC+8, zcaudate wrote: Would it be possible to put up a video of a typical workflow example with pedestal. It's quite difficult for me to piece everything together just by reading the documentation. Chris -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: [ANN] Jig
Another question, using jig, the connection/db/cache/storage will be everywhere in our code as a parameter of functions, is it flexible? ,currently I prefer to managing those side effect at one place but will not spread out to our other core functions. Thanks On Saturday, October 12, 2013 12:23:41 AM UTC+8, Malcolm Sparks wrote: A few months ago, Stuart Sierra blogged about the workflow he follows for building Clojure applications. One of the great pleasures of working with a dynamic language is being able to build a system while simultaneously interacting with it. -- http://thinkrelevance.com/blog/2013/06/04/clojure-workflow-reloaded Since then I've been using this workflow for my own projects, and found it to be amazingly effective. I've added some extra features, and the result is Jig, which builds on Stuart's work in the following ways :- - Multiple components can each contribute to the 'system' map - Components are started in dependency order - Components are specified and configured in a config (edn) file - Jig can host 'plain old' Leiningen projects - Jig will even 'reload' them too e.g. if their project.clj dependencies change. - Jig can host multiple projects simultaneously There's a small but growing list of optional re-usable components that provide extra functionality :- - Pedestal services support. Jig provides the system map and 'url-for' function in the service context. - Nginx cache purging on reload - Git pull prior reload - Reload via JMX - nREPL - Stencil cache purging - Firefox remote control support for 'browser refresh on reload' I know others are working on similar designs. I'd be interested to hear what people think and whether this is useful. Thanks, Malcolm PS: Jig can be found here: https://github.com/juxt/jig -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: data structure creation time in cljs
`vector` is now inlined in master, should be 10X faster for (vector 1) David On Tue, Nov 5, 2013 at 10:38 PM, kovas boguta kovas.bog...@gmail.comwrote: I'm trying to optimize zippers for clojurescript. My benchmark is implementing the combinator systems from https://www.wolframscience.com/nksonline/page-102 which heavily stress both navigating and modifying the tree. A major hotspot seems to be data structure creation time, which can be between 10 and 200x slower than jvm. I'm using Chrome 30.0.1599.101 . Vectors: (time (dotimes [x 100] ( vector x))) cljs: 2175 msecs clj: 11.414 msecs strangely, apply is faster for cljs : (time (dotimes [x 100] (apply vector [x]))) cljs: 1175 msecs clj: 64.919 msecs into gives about the same result for cljs. Creating a datastructure literal (eg [x]) is about 5x slower in cljs over clj, which I would take, however in the zipper case the number of children can vary dynamically. Lists: (apply list [x]) is about 2x faster than the vector case in cljs, and within about 5x of the jvm speed. Unless there is a better idea, I may try a specialized list-oriented zipper and see how it performs. Records: Creation is about ~10x slower than in clj. What's weird is that creating hashmaps is actually marginally faster than creating records (however, records still have much faster field access, so I'm using a record-based zipper implementation) (defrecord Test [a]) (time (dotimes [x 100] (Test. x))) cljs: 60 msecs clj: 7.00 msecs Is there a trick to speed up vector and/or record creation? Should I look into a custom datastructure? Any ideas welcome. Thanks! -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.