Re: [ANN] core.typed 0.2.0 - Production Ready
Couldn't occurrence typing catch the error in that example, since evil-atom-reset! can only return an atom wrapping a keyword? I guess the problem I had is that the optional typing moniker seems misleading since it forces you to annotate vars. I had visions of gradually assigning types to vars as it became evident that typing was needed as a pre-runtime guardrail based on how other developers were using my functions. If I'm publishing a library then that's backward thinking, but in a team using core.typed it sounds useful... Only type what you need when you need to. Don't mind me... Clearly I need to actually use the library before developing an opinion. -- -- 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] core.typed 0.2.0 - Production Ready
How about annotating clojure.core API. Is it needed, provided, optional? On Thursday, August 29, 2013 12:28:35 AM UTC+2, Ambrose Bonnaire-Sergeant wrote: Hi, After 10 months and 26 0.1.x releases of transitioning core.typed from an ambitious student project, I am finally comfortable recommending core.typed for production use. Production Ready My interpretation of production ready in this context is: - core.typed can *find bugs* in real code - core.typed will *not slow down* your existing code by loading a large library at production. (core.typed does introduce an extra identity-like function call at type annotations, I assume this is a candidate for optimisation via HotSpot) - A basic *tutorial*, API docs and example project exist - core.typed is *currently used in production* with success (at CircleCI for several months) - The core type checking API is mostly *stable*, with only very minor removals/breaking changes in the last few months. There are several outstanding issues, but I am satisfied that core.typed can bring real utility to real programs *today* and with *no production-time drawbacks*, thus this release. How to get started Leiningen dep: [org.clojure/core.typed 0.2.0] ...; for very recent releases:repositories {sonatype-oss-public https://oss.sonatype.org/content/groups/public/} If you like following tutorials try the user/types guide. If you just want to get your hands on some typed code, see the Example project. core.typed User Guidehttps://github.com/clojure/core.typed/wiki/User-Guide core.typed Types Guide https://github.com/clojure/core.typed/wiki/Types Example project https://github.com/frenchy64/core.typed-example API Reference http://clojure.github.io/core.typed/ core.typed Github Home https://github.com/clojure/core.typed core.typed Wiki https://github.com/clojure/core.typed/wiki Please report bugs, ask questions or discuss things on the mailing listhttps://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed . (FWIW I'm ambrosebs on #clojure.) Thanks, Ambrose -- -- 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] core.typed 0.2.0 - Production Ready
I see optional typing as the opposite of mandatory typing. You don't need to pass a type checker to get a program semantics. Typed Clojure offers a particular flavour of optional typing: gradual typing. My interpretation of gradual typing is some of your code is rigorously statically typed, some is untyped, and there is some mediator that handles the interface between the two. (Typed Clojure lacks the mediator atm). You need to be explicit about the boundaries between typed/untyped to make the most of the type system. If you're providing a library, the implementation could be completely untyped, but you might have annotations for your API. Admittedly I've been exclusively researching Typed Racket style type systems for awhile now, but I'm sceptical that the kind of type system you describe would be effective in finding bugs in your programs. It might find them, but error messages will probably be unpredictable and unreadable, and the type system would not have simple rules to get a namespace type checking like Typed Clojure/Racket does. (eg. assign types to top-levels and fn parameters.) I'm fairly confident that if you use core.typed, you'll see it's not for everything, but that it can rigorously type check some isolated code, which is often a use case. There are tradeoffs here: the more flexible the type system is, the more complicated the rules are for what type checks, and there will probably be tradeoffs in the accuracy of the static type system. Also knowing that you've applied a picky, accurate type checker such as core.typed on a large code base is a (valid) good feeling. It will take investment though. In my experience, writing static types for functions is similar to a code review, and probably makes you think about what your code is doing a little more. Thanks, Ambrose On Thu, Aug 29, 2013 at 3:13 PM, Daniel doubleagen...@gmail.com wrote: Couldn't occurrence typing catch the error in that example, since evil-atom-reset! can only return an atom wrapping a keyword? I guess the problem I had is that the optional typing moniker seems misleading since it forces you to annotate vars. I had visions of gradually assigning types to vars as it became evident that typing was needed as a pre-runtime guardrail based on how other developers were using my functions. If I'm publishing a library then that's backward thinking, but in a team using core.typed it sounds useful... Only type what you need when you need to. Don't mind me... Clearly I need to actually use the library before developing an opinion. -- -- 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: [ANN] core.typed 0.2.0 - Production Ready
Hi, Roughly 1/3 of clojure.core is annotated and comes included with core.typed. They are unchecked annotations. https://github.com/clojure/core.typed/blob/master/src/main/clojure/clojure/core/typed/base_env.clj#L658 You can lookup types via cf at the REPL. (clojure.core.typed/cf +) ;= (Fn [clojure.core.typed/AnyInteger * - clojure.core.typed/AnyInteger] [Number * - Number]) Thanks, Ambrose On Thu, Aug 29, 2013 at 3:40 PM, Jozef Wagner jozef.wag...@gmail.comwrote: How about annotating clojure.core API. Is it needed, provided, optional? On Thursday, August 29, 2013 12:28:35 AM UTC+2, Ambrose Bonnaire-Sergeant wrote: Hi, After 10 months and 26 0.1.x releases of transitioning core.typed from an ambitious student project, I am finally comfortable recommending core.typed for production use. Production Ready My interpretation of production ready in this context is: - core.typed can *find bugs* in real code - core.typed will *not slow down* your existing code by loading a large library at production. (core.typed does introduce an extra identity-like function call at type annotations, I assume this is a candidate for optimisation via HotSpot) - A basic *tutorial*, API docs and example project exist - core.typed is *currently used in production* with success (at CircleCI for several months) - The core type checking API is mostly *stable*, with only very minor removals/breaking changes in the last few months. There are several outstanding issues, but I am satisfied that core.typed can bring real utility to real programs *today* and with *no production-time drawbacks*, thus this release. How to get started Leiningen dep: [org.clojure/core.typed 0.2.0] ...; for very recent releases:repositories {sonatype-oss-public https://oss.sonatype.org/**content/groups/public/ https://oss.sonatype.org/content/groups/public/} If you like following tutorials try the user/types guide. If you just want to get your hands on some typed code, see the Example project. core.typed User Guidehttps://github.com/clojure/core.typed/wiki/User-Guide core.typed Types Guide https://github.com/clojure/core.typed/wiki/Types Example project https://github.com/frenchy64/core.typed-example API Reference http://clojure.github.io/core.typed/ core.typed Github Home https://github.com/clojure/core.typed core.typed Wiki https://github.com/clojure/core.typed/wiki Please report bugs, ask questions or discuss things on the mailing listhttps://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed . (FWIW I'm ambrosebs on #clojure.) Thanks, Ambrose -- -- 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] core.typed 0.2.0 - Production Ready
Also you can add missing annotations via ann. (ann ^:no-check clojure.core/+ ) Core vars observe the same rules as all vars: they must be annotated. Thanks, Ambrose On Thu, Aug 29, 2013 at 3:44 PM, Ambrose Bonnaire-Sergeant abonnaireserge...@gmail.com wrote: Hi, Roughly 1/3 of clojure.core is annotated and comes included with core.typed. They are unchecked annotations. https://github.com/clojure/core.typed/blob/master/src/main/clojure/clojure/core/typed/base_env.clj#L658 You can lookup types via cf at the REPL. (clojure.core.typed/cf +) ;= (Fn [clojure.core.typed/AnyInteger * - clojure.core.typed/AnyInteger] [Number * - Number]) Thanks, Ambrose On Thu, Aug 29, 2013 at 3:40 PM, Jozef Wagner jozef.wag...@gmail.comwrote: How about annotating clojure.core API. Is it needed, provided, optional? On Thursday, August 29, 2013 12:28:35 AM UTC+2, Ambrose Bonnaire-Sergeant wrote: Hi, After 10 months and 26 0.1.x releases of transitioning core.typed from an ambitious student project, I am finally comfortable recommending core.typed for production use. Production Ready My interpretation of production ready in this context is: - core.typed can *find bugs* in real code - core.typed will *not slow down* your existing code by loading a large library at production. (core.typed does introduce an extra identity-like function call at type annotations, I assume this is a candidate for optimisation via HotSpot) - A basic *tutorial*, API docs and example project exist - core.typed is *currently used in production* with success (at CircleCI for several months) - The core type checking API is mostly *stable*, with only very minor removals/breaking changes in the last few months. There are several outstanding issues, but I am satisfied that core.typed can bring real utility to real programs *today* and with *no production-time drawbacks*, thus this release. How to get started Leiningen dep: [org.clojure/core.typed 0.2.0] ...; for very recent releases:repositories {sonatype-oss-public https://oss.sonatype.org/**content/groups/public/ https://oss.sonatype.org/content/groups/public/} If you like following tutorials try the user/types guide. If you just want to get your hands on some typed code, see the Example project. core.typed User Guidehttps://github.com/clojure/core.typed/wiki/User-Guide core.typed Types Guidehttps://github.com/clojure/core.typed/wiki/Types Example project https://github.com/frenchy64/core.typed-example API Reference http://clojure.github.io/core.typed/ core.typed Github Home https://github.com/clojure/core.typed core.typed Wiki https://github.com/clojure/core.typed/wiki Please report bugs, ask questions or discuss things on the mailing listhttps://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed . (FWIW I'm ambrosebs on #clojure.) Thanks, Ambrose -- -- 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] core.typed 0.2.0 - Production Ready
Congratulations and thanks for your work! On Thursday, August 29, 2013 12:28:35 AM UTC+2, Ambrose Bonnaire-Sergeant wrote: Hi, After 10 months and 26 0.1.x releases of transitioning core.typed from an ambitious student project, I am finally comfortable recommending core.typed for production use. Production Ready My interpretation of production ready in this context is: - core.typed can *find bugs* in real code - core.typed will *not slow down* your existing code by loading a large library at production. (core.typed does introduce an extra identity-like function call at type annotations, I assume this is a candidate for optimisation via HotSpot) - A basic *tutorial*, API docs and example project exist - core.typed is *currently used in production* with success (at CircleCI for several months) - The core type checking API is mostly *stable*, with only very minor removals/breaking changes in the last few months. There are several outstanding issues, but I am satisfied that core.typed can bring real utility to real programs *today* and with *no production-time drawbacks*, thus this release. How to get started Leiningen dep: [org.clojure/core.typed 0.2.0] ...; for very recent releases:repositories {sonatype-oss-public https://oss.sonatype.org/content/groups/public/} If you like following tutorials try the user/types guide. If you just want to get your hands on some typed code, see the Example project. core.typed User Guidehttps://github.com/clojure/core.typed/wiki/User-Guide core.typed Types Guide https://github.com/clojure/core.typed/wiki/Types Example project https://github.com/frenchy64/core.typed-example API Reference http://clojure.github.io/core.typed/ core.typed Github Home https://github.com/clojure/core.typed core.typed Wiki https://github.com/clojure/core.typed/wiki Please report bugs, ask questions or discuss things on the mailing listhttps://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed . (FWIW I'm ambrosebs on #clojure.) Thanks, Ambrose -- -- 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] Cloc 0.1.0 - Leiningen plugin to serve project API docs through a local web server
Hi Jaley, This is pretty cool, thanks for sharing! The only nit I'd like to pick is, you may like to mention the version on README as 0.1.0 instead of 0.1.0-SNAPSHOT. Shantanu On Thursday, 29 August 2013 03:34:59 UTC+5:30, Jaley wrote: Hi! Cloc is a small web app to serve API documentation, packaged as a Leiningen plugin. The idea is that you run one command, `lein cloc` from any Leiningen project and it fires up a local web server with all the documentation you'll need, for your own code and for the dependencies in your project file. It also has a Lucene-powered search built in. A first release is available on Clojars, instructions and a screenshot are on the GitHub project [1] for anyone who wants to give it a try. A ton of things need improvement, fixing, rewriting... I'll add a comprehensive list of upcoming features and known bugs to the GitHub issue tracker tomorrow. Meanwhile, the main problem you're likely to encounter is that it only works in Chrome -- browser compatibility fixes are on the way! Feedback and suggestions welcome - feel free to add things to the GitHub issues page! Jaley. [1] http://github.com/jaley/cloc -- -- 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] Cloc 0.1.0 - Leiningen plugin to serve project API docs through a local web server
Thanks, this is very useful! Can't wait for the Firefox compatibility ;) Nils Grunwald On Thursday, August 29, 2013 12:04:59 AM UTC+2, Jaley wrote: Hi! Cloc is a small web app to serve API documentation, packaged as a Leiningen plugin. The idea is that you run one command, `lein cloc` from any Leiningen project and it fires up a local web server with all the documentation you'll need, for your own code and for the dependencies in your project file. It also has a Lucene-powered search built in. A first release is available on Clojars, instructions and a screenshot are on the GitHub project [1] for anyone who wants to give it a try. A ton of things need improvement, fixing, rewriting... I'll add a comprehensive list of upcoming features and known bugs to the GitHub issue tracker tomorrow. Meanwhile, the main problem you're likely to encounter is that it only works in Chrome -- browser compatibility fixes are on the way! Feedback and suggestions welcome - feel free to add things to the GitHub issues page! Jaley. [1] http://github.com/jaley/cloc -- -- 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: ClojureScript: Keyword Breaking Change Around the Corner
Hey, this sounds interesting. I just tried it on my project but it seems to be missing several keywords in the constants_table.js. Dumb example: the code tries to use cljs.core.constant$keyword$1064 , which does not exist. Will try to investigate, just a heads up. /thomas On Wednesday, August 28, 2013 3:29:26 PM UTC+2, David Nolen wrote: ClojureScript has long represented symbols and keywords as JavaScript Strings as a performance optimization around hash maps. However modern JavaScript engines have shown that following Clojure JVM's design more closely consistently delivers better performance. Also the representation of keywords as strings has had an unfortunate consequence, we modify the String prototype to allow keywords to be called as functions - this is a serious interop liability. Sean Grove has done some excellent work that I have further extended in a branch. In this branch keywords are represented with a deftype. In order to deliver performance, under advanced optimizations we emit keywords constants to avoid allocation overheads. The breaking change is that keywords in ClojureScript cannot support the identical? property guaranteed by Clojure on the JVM. There is a new equality check called keyword-identical? that can be used to efficiently check for keyword equality. defrecords and hash maps have been updated to use this predicate. Please try your projects with this branch so we can address any further issues because of this breaking change. http://github.com/clojure/clojurescript/compare/keywords Thanks, David -- -- 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: stringify the name of an interned function
Tassilo Horn wrote: erebus.m...@gmail.com writes: What am I missing here? Functions don't really have names. A function may be bound to a var, and that has a name (:name metadata, to be precise). That said, since function's get compiled to classes you could twiddle with the class name. user (defn fnname [f] (symbol (clojure.string/replace-first (.getName (class f)) $ /))) For what do you need that? I am reading in a csv-file, and then transform the attributes into a hash- map: __ name,property1,property2,etc John,drunk,stinks,etc. etc. __ {John {:property1 drunk, :property2 stinks} etc then I create with a function functions like drunk?, so that I can check whether John is drunk (drunk? John) true I need to be able to get all properties in the map but drunk?. Therefore, I thought it would be handy to be able to filter out drunk? from the functions, but I figured I can only do that if I can treat the function-name like a name... Bye, Tassilo -- -- 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: Emacs Clojure mode : No syntax highlighting for #_
2013/8/29 Joel Holdbrooks cjholdbro...@gmail.com: I would imagine it is intended since #_ is a reader macro. #_ is not intended for commenting. Rather, it instructs the Clojure Reader to ignore entirely the subsequent form. This is much different from the comment macro (which simply takes any number of arguments and returns nil) or the ; comment syntax. It might be a bit involved to have #_ and the subsequent form appear commented through clojure-mode's syntax highlighting. However, it would also incorrectly express the semantics of #_ which, arguably, is counter to the goal of syntax highlighting. Yet it is certainly better, given a dual choice, to present it as commented code. Counterclockwise does this since more than a year, and so far, nobody has complained. Cheers, -- Laurent On Wednesday, August 28, 2013 3:09:11 PM UTC-7, JvJ wrote: Although semicolons cause the text color to change in order to look commented-out, the #_ reader macro doesn't cause any such change. Is this intended, or is it a bug? -- -- 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: [ANN] Cloc 0.1.0 - Leiningen plugin to serve project API docs through a local web server
@Shantanu - ah good spot, thanks! Maybe next I should make a tool to make sure README.md files are up to date :) @Nils - I'll fix Firefox at the weekend I hope. It's probably completely obviously from looking at the ClojureScript code, but I have absolutely no idea what I'm doing when it comes to web development. Someone who knows about this kind of stuff can probably see what I'm doing wrong immediately, but hopefully it's something fairly trivial. Jaley. On Thursday, 29 August 2013 09:34:25 UTC+1, Nils Grunwald wrote: Thanks, this is very useful! Can't wait for the Firefox compatibility ;) Nils Grunwald On Thursday, August 29, 2013 12:04:59 AM UTC+2, Jaley wrote: Hi! Cloc is a small web app to serve API documentation, packaged as a Leiningen plugin. The idea is that you run one command, `lein cloc` from any Leiningen project and it fires up a local web server with all the documentation you'll need, for your own code and for the dependencies in your project file. It also has a Lucene-powered search built in. A first release is available on Clojars, instructions and a screenshot are on the GitHub project [1] for anyone who wants to give it a try. A ton of things need improvement, fixing, rewriting... I'll add a comprehensive list of upcoming features and known bugs to the GitHub issue tracker tomorrow. Meanwhile, the main problem you're likely to encounter is that it only works in Chrome -- browser compatibility fixes are on the way! Feedback and suggestions welcome - feel free to add things to the GitHub issues page! Jaley. [1] http://github.com/jaley/cloc -- -- 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] core.typed 0.2.0 - Production Ready
Is there any perf improvement to use static typing in Clojure? Like we can see with Groovy 2.x and its static mode. 2013/8/29 Nils Grunwald nils.grunw...@gmail.com Congratulations and thanks for your work! On Thursday, August 29, 2013 12:28:35 AM UTC+2, Ambrose Bonnaire-Sergeant wrote: Hi, After 10 months and 26 0.1.x releases of transitioning core.typed from an ambitious student project, I am finally comfortable recommending core.typed for production use. Production Ready My interpretation of production ready in this context is: - core.typed can *find bugs* in real code - core.typed will *not slow down* your existing code by loading a large library at production. (core.typed does introduce an extra identity-like function call at type annotations, I assume this is a candidate for optimisation via HotSpot) - A basic *tutorial*, API docs and example project exist - core.typed is *currently used in production* with success (at CircleCI for several months) - The core type checking API is mostly *stable*, with only very minor removals/breaking changes in the last few months. There are several outstanding issues, but I am satisfied that core.typed can bring real utility to real programs *today* and with *no production-time drawbacks*, thus this release. How to get started Leiningen dep: [org.clojure/core.typed 0.2.0] ...; for very recent releases:repositories {sonatype-oss-public https://oss.sonatype.org/**content/groups/public/ https://oss.sonatype.org/content/groups/public/} If you like following tutorials try the user/types guide. If you just want to get your hands on some typed code, see the Example project. core.typed User Guidehttps://github.com/clojure/core.typed/wiki/User-Guide core.typed Types Guide https://github.com/clojure/core.typed/wiki/Types Example project https://github.com/frenchy64/core.typed-example API Reference http://clojure.github.io/core.typed/ core.typed Github Home https://github.com/clojure/core.typed core.typed Wiki https://github.com/clojure/core.typed/wiki Please report bugs, ask questions or discuss things on the mailing listhttps://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed . (FWIW I'm ambrosebs on #clojure.) Thanks, Ambrose -- -- 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: ClojureScript: Keyword Breaking Change Around the Corner
Ok, It not longer seems possible to do incremental compiles, by which I mean compile all files once, change one file, then compile again. The constants table will then be incomplete. But since I'm using my own build-tool that might just be my fault, would be good if someone else could double check. One other gotcha: I do hiccup-like DOM construction in the client which needs to extend a protocol to keywords, since keywords were strings before it required extending strings and then checking if we have a keyword. See https://github.com/thheller/shadow/blob/master/src/shadow/dom.cljs#L182 , easy fix but someone else might run into this. Another thing which probably only affects me is that the constants_table.js contains ALL keywords in the whole project. I however split the generated js into multiple modules (via closure modules) so I can keep the initial js file size down and only load additional js when I need it. This resulted in a 215kb/90kb/45kb/166kb split, since the initial file now contains all constants the split is 264k/65k/27k/94k. Not a deal breaker, but a 121kb constants_table.js that cannot be split does not exactly help to keep javascript files small. Will have to look at other optimizations I guess, although overall its less. Apart from that everything seems to work so far, although I don't have many tests for all my dom code. But a quick click through every page works. ;) Regards, /thomas On Thursday, August 29, 2013 10:51:56 AM UTC+2, Thomas Heller wrote: Hey, this sounds interesting. I just tried it on my project but it seems to be missing several keywords in the constants_table.js. Dumb example: the code tries to use cljs.core.constant$keyword$1064 , which does not exist. Will try to investigate, just a heads up. /thomas On Wednesday, August 28, 2013 3:29:26 PM UTC+2, David Nolen wrote: ClojureScript has long represented symbols and keywords as JavaScript Strings as a performance optimization around hash maps. However modern JavaScript engines have shown that following Clojure JVM's design more closely consistently delivers better performance. Also the representation of keywords as strings has had an unfortunate consequence, we modify the String prototype to allow keywords to be called as functions - this is a serious interop liability. Sean Grove has done some excellent work that I have further extended in a branch. In this branch keywords are represented with a deftype. In order to deliver performance, under advanced optimizations we emit keywords constants to avoid allocation overheads. The breaking change is that keywords in ClojureScript cannot support the identical? property guaranteed by Clojure on the JVM. There is a new equality check called keyword-identical? that can be used to efficiently check for keyword equality. defrecords and hash maps have been updated to use this predicate. Please try your projects with this branch so we can address any further issues because of this breaking change. http://github.com/clojure/clojurescript/compare/keywords Thanks, David -- -- 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] core.typed 0.2.0 - Production Ready
2013/8/29 Christian Sperandio christian.speran...@gmail.com Is there any perf improvement to use static typing in Clojure? core.typed is not a compiler, it's a type annotation/checker implemented as a library. If you are familiar with Erlang, it is to Clojure what Dialyzer is to Erlang. -- 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.
Re: [ANN] core.typed 0.2.0 - Production Ready
Ok... Another question, the checking is done only once (while compiling) ? Or, it's done while the runtime? 2013/8/29 Michael Klishin michael.s.klis...@gmail.com 2013/8/29 Christian Sperandio christian.speran...@gmail.com Is there any perf improvement to use static typing in Clojure? core.typed is not a compiler, it's a type annotation/checker implemented as a library. If you are familiar with Erlang, it is to Clojure what Dialyzer is to Erlang. -- 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. -- -- 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: stringify the name of an interned function
Erebus Mons erebus.m...@gmail.com writes: I am reading in a csv-file, and then transform the attributes into a hash-map: __ name,property1,property2,etc John,drunk,stinks,etc. etc. __ {John {:property1 drunk, :property2 stinks} etc Why a map of maps and not a map of sets, e.g.: {John #{drunk stings}} Then your predicates just turn into membership checks instead of having to search through the values of the properties map. That is, drunk? is just: (defn drunk? [person-prop-map person] (contains? (person-prop-map person) drunk)) then I create with a function functions like drunk?, so that I can check whether John is drunk (drunk? John) true I need to be able to get all properties in the map but drunk?. Therefore, I thought it would be handy to be able to filter out drunk? from the functions, but I figured I can only do that if I can treat the function-name like a name... You need to filter it out in order not to define the same function several times, or do I get you wrong? If so, why not get the unique set of properties after building the map, and then generate one predicate for any property that occured? ;; If the props are storted as sets like suggested above, then... (apply clojure.set/union (vals person-prop-map)) ;; ...gives you the set of unique property names. HTH, Tassilo -- -- 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: eval/macros with functions with metadata
I certainly like that better than the binding solution, especially if hotspot can potentially inline the functions. It still tricky to do that in a macro, especially when the code to be evaled depends on the current lexical scope, but I can maybe work around that. Thanks. On 29 August 2013 04:50, Jason Wolfe ja...@w01fe.com wrote: Sounds interesting, I'd love to hear more about the use case. We ran into this issue as well when implementing the new positional compilation for Graph. We filed a ticket [1], and worked around it with a funny trick: Suppose you want to eval a complicated thing, and the crux of the issue is that this fails: (let [y 1 f (fn [x] (+ x y))] (eval `(~f 1))) A solution is to rework what you eval, so that it has a 'hole' for the function and you slot the function into this hole afterwards (which Hotspot seems to be able to optimize just fine): (let [y 1 f (fn [x] (+ x y))] ((eval `(fn [g#] (g# 1))) f)) Happy to elaborate if you like. Cheers, Jason [1] http://dev.clojure.org/jira/browse/CLJ-1206 On Wednesday, August 28, 2013 10:59:19 AM UTC-7, Jamie Brandon wrote: That sort of works for my use case. What I want to do is define a grammar... (def num-graph (graph num ~(or ~succ ~zero) succ (succ ^x ~num) zero zero)) ... attach actions (def num-out (output-in num-graph 'zero (fnk [] 0) 'succ (fnk [x] (inc x ... and compile the result ... strucjure.regression.tests (graph-view 'num num-out) (clojure.core/letfn [(num ...) (succ ...) (zero ...)] (clojure.core/fn [input__2288__auto__] (num input__2288__auto__))) This works fine as long as the fnks dont close over anything, but that's very limiting. If I eval that code and *then* wrap it in (binding ...) I can have closures but that now means that I can't do call-site compilation. I'll have to poke around a bit more... On 28 August 2013 18:32, Aaron Cohen aa...@assonance.org wrote: I'm not sure if you'll consider this hacky or not. (def ^:dynamic *fn-helper*) (defn eval-at-one [f] (binding [*fn-helper* f] (eval '(*fn-helper* 1 On Wed, Aug 28, 2013 at 1:28 PM, Jamie Brandon ja...@scattered-thoughts.net wrote: You will also run into problems if your functions close over any data: user (let [f (fn [] 1)] (eval `(~f))) 1 nil user (let [x 1 f (fn [] x)] (eval `(~f))) IllegalArgumentException No matching ctor found for class user$eval38616$f__38617 clojure.lang.Reflector.invokeConstructor (Reflector.java:163) I'm struggling with this as well, I'm definitely interested in finding a non-hacky way to pass closures through eval without leaking memory. Perhaps something like: (let [x 1 f (fn [] x) f-sym (gensym)] (intern *ns* gensym (weak-ref f)) (with-meta (eval `(fn [] (do-stuff-with @~f))) {::strong-ref f})) So that way f will be freed up when the resulting fn is gced. On 28 August 2013 17:59, Ben Wolfson wol...@gmail.com wrote: On Wed, Aug 28, 2013 at 9:27 AM, Jamie Brandon ja...@scattered-thoughts.net wrote: If you aren't worried about leaking memory, a possible workaround is to intern the fn in some namespace and then put the symbol in the macro output. Hrm, I hope it doesn't come to that---as long as I'm creating the functions with their metadata, I can make things work, because I can add extra information to the with-meta call or do extra things when making the call. What I'd like, though, is for it to be possible to copy the metadata over to a new function by client code, just using the regular (with-meta (fn [blah] blah) (meta old-fn)) mechanism. But then the sneaky symbol, or whatever extra thing, in the metadata, that's used in the form to be eval-ed is pointing to the original function, not the one passed in. Maybe just providing a utility for fixing up the metadata is the right move, though it's kidn of dissatisfying. -- Ben Wolfson Human kind has used its intelligence to vary the flavour of drinks, which may be sweet, aromatic, fermented or spirit-based. ... Family and social life also offer numerous other occasions to consume drinks for pleasure. [Larousse, Drink entry] -- -- 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=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: stringify the name of an interned function
Tassilo Horn wrote: Erebus Mons erebus.m...@gmail.com writes: I am reading in a csv-file, and then transform the attributes into a hash-map: __ name,property1,property2,etc John,drunk,stinks,etc. etc. __ {John {:property1 drunk, :property2 stinks} etc Why a map of maps and not a map of sets, e.g.: {John #{drunk stings}} Because I need to know what kind of property the properties are Then your predicates just turn into membership checks instead of having to search through the values of the properties map. That is, drunk? is just: (defn drunk? [person-prop-map person] (contains? (person-prop-map person) drunk)) then I create with a function functions like drunk?, so that I can check whether John is drunk (drunk? John) true I need to be able to get all properties in the map but drunk?. Therefore, I thought it would be handy to be able to filter out drunk? from the functions, but I figured I can only do that if I can treat the function-name like a name... You need to filter it out in order not to define the same function several times, or do I get you wrong? If so, why not get the unique set of properties after building the map, and then generate one predicate for any property that occured? ;; If the props are storted as sets like suggested above, then... (apply clojure.set/union (vals person-prop-map)) ;; ...gives you the set of unique property names. This is what I do already (but within a map of maps). Once I have defined the predicates (which works), I partition elements that satisfy a sub-property (e.g., drunk?) and those that don't. Now that I explain that, I might just draw a random property, and then I would not need the function stringify... But I was intrigued - I assumed that stringifying a function-name should be easy to do. Thank you! HTH, Tassilo -- -- 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] core.typed 0.2.0 - Production Ready
With Clojure the lines blur between compile time and runtime. The clearest way to put it is that type checking is explicitly called at the REPL or in a unit test. Usually this is done during development iterations or testing time. Re: performance improvements: Michael is correct. Interestingly Typed Racket offers numeric optimisations, but leans heavily on Racket's metaprogramming facilities to insert them automatically. There's potential in Typed Clojure for *identification* of speed improvements, but not actually inserting them. Typed Racket's optimisation coach comes to mind in ways we can present this information (put a type hint at line 10, col 20 to get full speed...). Thanks, Ambrose On Thu, Aug 29, 2013 at 6:03 PM, Christian Sperandio christian.speran...@gmail.com wrote: Ok... Another question, the checking is done only once (while compiling) ? Or, it's done while the runtime? 2013/8/29 Michael Klishin michael.s.klis...@gmail.com 2013/8/29 Christian Sperandio christian.speran...@gmail.com Is there any perf improvement to use static typing in Clojure? core.typed is not a compiler, it's a type annotation/checker implemented as a library. If you are familiar with Erlang, it is to Clojure what Dialyzer is to Erlang. -- 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. -- -- 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: [ANN] core.typed 0.2.0 - Production Ready
If you can do that, why not return the literal representation of the type hinted function? For the repl you could provide a function that interns the type-hinted function into the namespace by evaluating the literal representation first. From there it's easy to provide something like slamhound. Once you're certain types have been provided to your namespace correctly at the repl, run 'lein type namespace' to type hint everything in the namespace by literally restructuring the file. Things type hinted with expressions would be tricky, but this could work (or you could just leave it alone): myfn (original) myfn-int myfn-long myfn-float etc On Thursday, August 29, 2013 6:40:16 AM UTC-5, Ambrose Bonnaire-Sergeant wrote: With Clojure the lines blur between compile time and runtime. The clearest way to put it is that type checking is explicitly called at the REPL or in a unit test. Usually this is done during development iterations or testing time. Re: performance improvements: Michael is correct. Interestingly Typed Racket offers numeric optimisations, but leans heavily on Racket's metaprogramming facilities to insert them automatically. There's potential in Typed Clojure for *identification* of speed improvements, but not actually inserting them. Typed Racket's optimisation coach comes to mind in ways we can present this information (put a type hint at line 10, col 20 to get full speed...). Thanks, Ambrose On Thu, Aug 29, 2013 at 6:03 PM, Christian Sperandio christian...@gmail.com javascript: wrote: Ok... Another question, the checking is done only once (while compiling) ? Or, it's done while the runtime? 2013/8/29 Michael Klishin michael@gmail.com javascript: 2013/8/29 Christian Sperandio christian...@gmail.com javascript: Is there any perf improvement to use static typing in Clojure? core.typed is not a compiler, it's a type annotation/checker implemented as a library. If you are familiar with Erlang, it is to Clojure what Dialyzer is to Erlang. -- 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 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 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 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] core.typed 0.2.0 - Production Ready
I don't think it would be possible to reconstruct the original forms in general, you would need to reverse macroexpansion to provide a form that has at least a passing familiarity with the original form. Otherwise you would get fully macroexpanded forms. That's a lot of work! On Thu, Aug 29, 2013 at 9:56 PM, Daniel doubleagen...@gmail.com wrote: If you can do that, why not return the literal representation of the type hinted function? For the repl you could provide a function that interns the type-hinted function into the namespace by evaluating the literal representation first. From there it's easy to provide something like slamhound. Once you're certain types have been provided to your namespace correctly at the repl, run 'lein type namespace' to type hint everything in the namespace by literally restructuring the file. Things type hinted with expressions would be tricky, but this could work (or you could just leave it alone): myfn (original) myfn-int myfn-long myfn-float etc On Thursday, August 29, 2013 6:40:16 AM UTC-5, Ambrose Bonnaire-Sergeant wrote: With Clojure the lines blur between compile time and runtime. The clearest way to put it is that type checking is explicitly called at the REPL or in a unit test. Usually this is done during development iterations or testing time. Re: performance improvements: Michael is correct. Interestingly Typed Racket offers numeric optimisations, but leans heavily on Racket's metaprogramming facilities to insert them automatically. There's potential in Typed Clojure for *identification* of speed improvements, but not actually inserting them. Typed Racket's optimisation coach comes to mind in ways we can present this information (put a type hint at line 10, col 20 to get full speed...). Thanks, Ambrose On Thu, Aug 29, 2013 at 6:03 PM, Christian Sperandio christian...@gmail.com** wrote: Ok... Another question, the checking is done only once (while compiling) ? Or, it's done while the runtime? 2013/8/29 Michael Klishin michael@gmail.com 2013/8/29 Christian Sperandio christian...@gmail.com** Is there any perf improvement to use static typing in Clojure? core.typed is not a compiler, it's a type annotation/checker implemented as a library. If you are familiar with Erlang, it is to Clojure what Dialyzer is to Erlang. -- MK http://github.com/**michaelklishin http://github.com/michaelklishin http://twitter.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 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.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 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
Re: [ANN] core.typed 0.2.0 - Production Ready
Those forms won't be in the namespace you're evaluating? Yeah, it's probably a lot of work, but it sounds neat. :-) On Thursday, August 29, 2013 9:07:26 AM UTC-5, Ambrose Bonnaire-Sergeant wrote: I don't think it would be possible to reconstruct the original forms in general, you would need to reverse macroexpansion to provide a form that has at least a passing familiarity with the original form. Otherwise you would get fully macroexpanded forms. That's a lot of work! On Thu, Aug 29, 2013 at 9:56 PM, Daniel double...@gmail.com javascript: wrote: If you can do that, why not return the literal representation of the type hinted function? For the repl you could provide a function that interns the type-hinted function into the namespace by evaluating the literal representation first. From there it's easy to provide something like slamhound. Once you're certain types have been provided to your namespace correctly at the repl, run 'lein type namespace' to type hint everything in the namespace by literally restructuring the file. Things type hinted with expressions would be tricky, but this could work (or you could just leave it alone): myfn (original) myfn-int myfn-long myfn-float etc On Thursday, August 29, 2013 6:40:16 AM UTC-5, Ambrose Bonnaire-Sergeant wrote: With Clojure the lines blur between compile time and runtime. The clearest way to put it is that type checking is explicitly called at the REPL or in a unit test. Usually this is done during development iterations or testing time. Re: performance improvements: Michael is correct. Interestingly Typed Racket offers numeric optimisations, but leans heavily on Racket's metaprogramming facilities to insert them automatically. There's potential in Typed Clojure for *identification* of speed improvements, but not actually inserting them. Typed Racket's optimisation coach comes to mind in ways we can present this information (put a type hint at line 10, col 20 to get full speed...). Thanks, Ambrose On Thu, Aug 29, 2013 at 6:03 PM, Christian Sperandio christian...@gmail.com** wrote: Ok... Another question, the checking is done only once (while compiling) ? Or, it's done while the runtime? 2013/8/29 Michael Klishin michael@gmail.com 2013/8/29 Christian Sperandio christian...@gmail.com** Is there any perf improvement to use static typing in Clojure? core.typed is not a compiler, it's a type annotation/checker implemented as a library. If you are familiar with Erlang, it is to Clojure what Dialyzer is to Erlang. -- MK http://github.com/**michaelklishin http://github.com/michaelklishin http://twitter.com/**michaelklishinhttp://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 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.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
Re: [ANN] core.typed 0.2.0 - Production Ready
Well I'm sure people wouldn't be happy if their call to (+ a b c) was suddenly turned into (clojure.lang.Numbers/add (clojure.lang.Numbers/add a b) c) :) On Thu, Aug 29, 2013 at 10:57 PM, Daniel doubleagen...@gmail.com wrote: Those forms won't be in the namespace you're evaluating? Yeah, it's probably a lot of work, but it sounds neat. :-) On Thursday, August 29, 2013 9:07:26 AM UTC-5, Ambrose Bonnaire-Sergeant wrote: I don't think it would be possible to reconstruct the original forms in general, you would need to reverse macroexpansion to provide a form that has at least a passing familiarity with the original form. Otherwise you would get fully macroexpanded forms. That's a lot of work! On Thu, Aug 29, 2013 at 9:56 PM, Daniel double...@gmail.com wrote: If you can do that, why not return the literal representation of the type hinted function? For the repl you could provide a function that interns the type-hinted function into the namespace by evaluating the literal representation first. From there it's easy to provide something like slamhound. Once you're certain types have been provided to your namespace correctly at the repl, run 'lein type namespace' to type hint everything in the namespace by literally restructuring the file. Things type hinted with expressions would be tricky, but this could work (or you could just leave it alone): myfn (original) myfn-int myfn-long myfn-float etc On Thursday, August 29, 2013 6:40:16 AM UTC-5, Ambrose Bonnaire-Sergeant wrote: With Clojure the lines blur between compile time and runtime. The clearest way to put it is that type checking is explicitly called at the REPL or in a unit test. Usually this is done during development iterations or testing time. Re: performance improvements: Michael is correct. Interestingly Typed Racket offers numeric optimisations, but leans heavily on Racket's metaprogramming facilities to insert them automatically. There's potential in Typed Clojure for *identification* of speed improvements, but not actually inserting them. Typed Racket's optimisation coach comes to mind in ways we can present this information (put a type hint at line 10, col 20 to get full speed...). Thanks, Ambrose On Thu, Aug 29, 2013 at 6:03 PM, Christian Sperandio christian...@gmail.com** wrote: Ok... Another question, the checking is done only once (while compiling) ? Or, it's done while the runtime? 2013/8/29 Michael Klishin michael@gmail.com 2013/8/29 Christian Sperandio christian...@gmail.com** Is there any perf improvement to use static typing in Clojure? core.typed is not a compiler, it's a type annotation/checker implemented as a library. If you are familiar with Erlang, it is to Clojure what Dialyzer is to Erlang. -- MK http://github.com/**michaelklish**inhttp://github.com/michaelklishin http://twitter.com/**michaelklis**hinhttp://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 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/**grou**ps/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.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/**grou**ps/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.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
Re: [ANN] core.typed 0.2.0 - Production Ready
On Thu, Aug 29, 2013 at 5:01 PM, Ambrose Bonnaire-Sergeant abonnaireserge...@gmail.com wrote: Well I'm sure people wouldn't be happy if their call to (+ a b c) was suddenly turned into (clojure.lang.Numbers/add (clojure.lang.Numbers/add a b) c) :) the expresso [1] optimizer can be used for those optimizations ;) [1] https://github.com/clojure-numerics/expresso -- -- 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: Preferred way of binding jdbc connections
Hi Shantanu, that was perfect, thanks. I note that this article only deprecates dynamic scoping in libraries, so my conclusion is that what I am considering is not an antipattern. Indeed, Stuart Sierra says the same: Applications can manage their own resources, and only the application programmer knows what the extent of those resources should be. Maybe you can pass it around as a value. Maybe you want to use dynamic binding after all. Maybe you want to stash it in a global state Var. That’s for you to decide. On Wednesday, August 28, 2013 10:55:10 PM UTC-7, Shantanu Kumar wrote: Hi Lyn, Dynamic vars for resource sharing is not a favored approach due to performance and several other reasons. This blog post explains it well: http://stuartsierra.com/2013/03/29/perils-of-dynamic-scope Shantanu On Thursday, 29 August 2013 07:21:46 UTC+5:30, Lyn Headley wrote: Hello, if I want to run some sql code in a transaction, I can do this (where clojure.java.jdbc is referred to as j): (j/db-transaction [conn dbspec] use conn here But if I have a function I want to call from this transaction, say to do a query, then I need to pass in the connection to that function: (defn query [conn] do query on conn...) (j/db-transaction [db dbspec] (query conn)) I am trying to decide whether I like passing in the connection to query, or whether I would rather use a binding like so: (def ^:dynamic *conn*) (defn query [] do query on *conn*...) (j/db-transaction [conn dbspec] (binding [*conn* conn] (query))) Looking at the jdbc docs, I notice that this style used to be directly supported but is now deprecated. Does that mean it's a bad idea to re-implement on top of the supported API, as my example would? Can someone explain the tradeoffs involved? Thanks, Lyn Headley -- -- 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] core.typed 0.2.0 - Production Ready
Imo, there's nothing easy about writing something like Slamhound. Even after many iterations it can't handle macros, because ultimately they're impossible, without some kind of hints specifically added for Slamhound (or for Typed Clojure) :) -- -- 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] core.typed 0.2.0 - Production Ready
Yeah, it's pretty much impossible unless you limit yourself to a manageable subset of Clojure. The easy part I was referring to was the Leiningen plugin, not the whole kit n' caboodle. On Thursday, August 29, 2013 11:02:17 AM UTC-5, Alex Baranosky wrote: Imo, there's nothing easy about writing something like Slamhound. Even after many iterations it can't handle macros, because ultimately they're impossible, without some kind of hints specifically added for Slamhound (or for Typed Clojure) :) -- -- 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] core.typed 0.2.0 - Production Ready
Just pushed 0.2.1 based on feedback from the video on HN. https://github.com/clojure/core.typed/blob/master/CHANGELOG.md Thanks, Ambrose On Thu, Aug 29, 2013 at 6:28 AM, Ambrose Bonnaire-Sergeant abonnaireserge...@gmail.com wrote: Hi, After 10 months and 26 0.1.x releases of transitioning core.typed from an ambitious student project, I am finally comfortable recommending core.typed for production use. Production Ready My interpretation of production ready in this context is: - core.typed can *find bugs* in real code - core.typed will *not slow down* your existing code by loading a large library at production. (core.typed does introduce an extra identity-like function call at type annotations, I assume this is a candidate for optimisation via HotSpot) - A basic *tutorial*, API docs and example project exist - core.typed is *currently used in production* with success (at CircleCI for several months) - The core type checking API is mostly *stable*, with only very minor removals/breaking changes in the last few months. There are several outstanding issues, but I am satisfied that core.typed can bring real utility to real programs *today* and with *no production-time drawbacks*, thus this release. How to get started Leiningen dep: [org.clojure/core.typed 0.2.0] ...; for very recent releases:repositories {sonatype-oss-public https://oss.sonatype.org/content/groups/public/} If you like following tutorials try the user/types guide. If you just want to get your hands on some typed code, see the Example project. core.typed User Guidehttps://github.com/clojure/core.typed/wiki/User-Guide core.typed Types Guide https://github.com/clojure/core.typed/wiki/Types Example project https://github.com/frenchy64/core.typed-example API Reference http://clojure.github.io/core.typed/ core.typed Github Home https://github.com/clojure/core.typed core.typed Wiki https://github.com/clojure/core.typed/wiki Please report bugs, ask questions or discuss things on the mailing listhttps://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed . (FWIW I'm ambrosebs on #clojure.) Thanks, Ambrose -- -- 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: Emacs Clojure mode : No syntax highlighting for #_
Definitely. I would agree a choice would be nice or even another font-lock group. There have been times where I forgot about a #_ somewhere in my code and spent a moment in confusion. Highlighting definitely would have been valuable. It would be cool if code following #_ were semi-transparent or something nifty like that. I think that's possible in the gui version of Emacs. On Thu, Aug 29, 2013 at 1:58 AM, Laurent PETIT laurent.pe...@gmail.comwrote: 2013/8/29 Joel Holdbrooks cjholdbro...@gmail.com: I would imagine it is intended since #_ is a reader macro. #_ is not intended for commenting. Rather, it instructs the Clojure Reader to ignore entirely the subsequent form. This is much different from the comment macro (which simply takes any number of arguments and returns nil) or the ; comment syntax. It might be a bit involved to have #_ and the subsequent form appear commented through clojure-mode's syntax highlighting. However, it would also incorrectly express the semantics of #_ which, arguably, is counter to the goal of syntax highlighting. Yet it is certainly better, given a dual choice, to present it as commented code. Counterclockwise does this since more than a year, and so far, nobody has complained. Cheers, -- Laurent On Wednesday, August 28, 2013 3:09:11 PM UTC-7, JvJ wrote: Although semicolons cause the text color to change in order to look commented-out, the #_ reader macro doesn't cause any such change. Is this intended, or is it a bug? -- -- 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 a topic in the Google Groups Clojure group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/b5ETVbGG8G8/unsubscribe. To unsubscribe from this group and all its topics, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Joel -- -- 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: Rxjava + Clojure Users
Hi, Thanks for your feedback on your RxJava usage. I'm glad to hear that neither of you feel too strongly about direct IFn support because... In an effort to simplify the implementation and improve the RxJava experience for all JVM-based languages, we'll be dropping direct IFn support (and Groovy closure, Ruby proc, etc) in the next release. Instead, for each supported language (Scala, Groovy, and Clojure at the moment), we'll be providing a set of utility functions/macros/implicits to assist with interop. In the Clojure case, this will consist of a namespace, probably rx.lang.clojure, with the following helpers: (defn fn* [f]) Takes a function f, and wraps it in an object that implements all the various Rx FuncX interfaces (defmacro fn [ body])Makes an anonymous Rx FuncX object with body (multi-arities and everything from clojure.core/fn are supported) So usage would basically be as I noted in my message above: (require '[rx.lang.clojure :as rx]) (- my-observable (.map (rx/fn [v] (Long/parseLong v))) (.reduce (rx/fn* +))) A similar function/macro pair will be provided for the Rx ActionX interfaces for which there's currently no direct support. This will provide us with base Clojure interop support which is slightly more tedious to use than before. In the longer term, we'll be releasing a more expansive, idiomatic set of Clojure bindings. We're not quite there on that one though. If anyone knows any reason this should not happen, speak now or forever hold your peace. Cheers, Dave On Wed, Aug 28, 2013 at 2:32 AM, Joseph Wilk j...@josephwilk.net wrote: On Tuesday, August 27, 2013 6:03:29 PM UTC+2, daveray wrote: Hi. I'm writing to see if there's anyone out there using RxJava [1] from Clojure and to get their opinion on it's current, built-in support for non-Java languages. Just to recap, the current implementation knows about clojure.lang.IFn allowing functions to be passed directly to RxJava methods: (- my-observable (.map (fn [v] (Long/parseLong v))) (.reduce +)) RxJava will automatically convert these functions to the underlying rx.util.functions.FuncX interface and re-dispatch to the appropriate method. So, the question is: as a user of RxJava, how valuable is this feature? Do you just end up wrapping things anyway, We are using RxJava and Hystrix with Clojure @ SoundCloud. All our Observables come from Hystrix cmds. I've have not added any wrappers around the RxJava stuff yet, not really felt the need. I've found it convenient to pass in fns but I would also be happy with what you suggest below (rx/fn). I suspect in those cases I might start wrapping rx/fn, so it continues to look like the current behaviour (recognising Clojure fns). Thanks, -- Joseph Wilk http://blog.josephwilk.net @josephwilk so you could easily perform the same transformation in your wrapper? Would helper fns/macros be a sufficient alternative: (- my-observable (.map (rx/fn [v] (Long/parseLong v))) (.reduce (rx/fn* +))) There will be some changes in this area in the near future and we'd like to get a feel for if/how people are using RxJava from Clojure. Thanks! Dave [1] https://github.com/Netflix/**RxJavahttps://github.com/Netflix/RxJava -- -- 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: Rxjava + Clojure Users
On Thu, Aug 29, 2013 at 2:00 PM, Dave Ray dave...@gmail.com wrote: In the Clojure case, this will consist of a namespace, probably rx.lang.clojure, with the following helpers: (defn fn* [f]) Takes a function f, and wraps it in an object that implements all the various Rx FuncX interfaces Erm, there's already a Clojure special form with the name fn*, so you'll need to change this one to something else I expect. -- -- 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: Rxjava + Clojure Users
Seems to work fine in my tests as long as I fully qualify it in the fn macro that uses it. What am I missing? If someone :uses or :refer-alls the ns, I'm assuming bad thing would happen, but I'm not worried about that. Dave On Thu, Aug 29, 2013 at 12:15 PM, Cedric Greevey cgree...@gmail.com wrote: On Thu, Aug 29, 2013 at 2:00 PM, Dave Ray dave...@gmail.com wrote: In the Clojure case, this will consist of a namespace, probably rx.lang.clojure, with the following helpers: (defn fn* [f]) Takes a function f, and wraps it in an object that implements all the various Rx FuncX interfaces Erm, there's already a Clojure special form with the name fn*, so you'll need to change this one to something else I expect. -- -- 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: too circular?
I wonder if the somewhat counterintuitive concept of a named anonymous function eludes some people, or isn't properly conveyed in tutorials. On Tuesday, 27 August 2013 00:36:07 UTC-7, HamsterofDeath wrote: thx 2013/8/26 Marshall Bockrath-Vandegrift lla...@gmail.com javascript: Dennis Haupt d.ha...@gmail.com javascript: writes: (defn fib-n [n] (let [fib (fn [a b] (cons a (lazy-seq (fib b (+ b a)] (take n (fib 1 1 can't i do a recursion here? how can i achieve this without doing an outer defn? You just need to give the anonymous function a name it can use to refer to itself for (non-tail) recursion: (defn fib-n [n] (let [fib (fn fib [a b] (cons a (lazy-seq (fib b (+ b a)] (take n (fib 1 1 -Marshall -- -- 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 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: too circular?
On 29/08/13 20:23, JvJ wrote: I wonder if the somewhat counterintuitive concept of a named anonymous function eludes some people, or isn't properly conveyed in tutorials. I only consider #(...) as an anonymous function. The longer form (fn [] (...)) has the potential of being perfectly named, it's just you who doesn't give it a name usually... Jim -- -- 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] expresso 0.1.0 released
Very cool stuff :) How much work would it take for this to work with ClojureScript? David On Mon, Aug 26, 2013 at 4:47 AM, Maik Schünemann maikschuenem...@gmail.comwrote: Hi, I released a first version of my gsoc project expresso [1]. This is an important Milestone in my gsoc project. What is there: an expressive and powerful rule based translator, on top of which many transformations can be based. functions to simplify (currently without ratio test), differentiate, rearrange, solve expressions. functions to optimize an expression (includes common-sub-expression-elimination, constant-folding, replacement with special operators, matrix-chain-optimization, ...) The solver can solve multiple simultaneous equations. currently it solves equations, which are polynomials up to degree 2, in which the number of occurrences of the unknown can be reduced to one by simplifying the expression or which consists of factors in above form. variables as parameters are supported everywhere. The last weeks of gsoc I will be making the above transformations more stable, eliminate as many bugs as I can find (feel free to report some you notice), and extending the range of expressions which can be transformed by these transformations, as well as thoroughly documenting the work that has been done. See the github repository and README.md for details [1] [1] https://github.com/clojure-numerics/expresso -- -- 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] ac-nexus (Emacs Autocomplete Source for Sonatype Nexus Maven repository servers)
Hi, I did some work on emacs-nexus (A Nexus Client for Emacs: released two years ago): I added ac-nexus.el: An auto-complete source using the Nexus Rest API. Using this source, you can complete Artifact/Version-IDs in Leiningen project files. See the github repository and README.md for details [1] [1] https://github.com/juergenhoetzel/emacs-nexus#ac-nexus Jürgen -- -- 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: too circular?
This exact use case is covered by letfn, which creates a named fn accessible to all function definitions and the body. That even allows mutual recursive definitions without declare. Your example would be (defn fib-n [n] (letfn [(fib [a b] (cons a (lazy-seq (fib b (+ b a)] (take n (fib 1 1 Note that its grammar is (letfn [fnspecs*] exprs*) fnspec == (fname [params*] exprs) That is, don't forget to surround a function definition with parentheses as above, and not as (letfn [fib [a b] ...]) CompilerException java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol The reason is that letfn accepts multiple definitions, and as each function can have multiple expressions as in a do form, you can't just partition the vector as you do in let. On Thursday, August 29, 2013 4:32:00 PM UTC-3, Jim foo.bar wrote: On 29/08/13 20:23, JvJ wrote: I wonder if the somewhat counterintuitive concept of a named anonymous function eludes some people, or isn't properly conveyed in tutorials. I only consider #(...) as an anonymous function. The longer form (fn [] (...)) has the potential of being perfectly named, it's just you who doesn't give it a name usually... Jim -- -- 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: too circular?
thx again 2013/8/30 Bruno Kim Medeiros Cesar brunokim...@gmail.com This exact use case is covered by letfn, which creates a named fn accessible to all function definitions and the body. That even allows mutual recursive definitions without declare. Your example would be (defn fib-n [n] (letfn [(fib [a b] (cons a (lazy-seq (fib b (+ b a)] (take n (fib 1 1 Note that its grammar is (letfn [fnspecs*] exprs*) fnspec == (fname [params*] exprs) That is, don't forget to surround a function definition with parentheses as above, and not as (letfn [fib [a b] ...]) CompilerException java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol The reason is that letfn accepts multiple definitions, and as each function can have multiple expressions as in a do form, you can't just partition the vector as you do in let. On Thursday, August 29, 2013 4:32:00 PM UTC-3, Jim foo.bar wrote: On 29/08/13 20:23, JvJ wrote: I wonder if the somewhat counterintuitive concept of a named anonymous function eludes some people, or isn't properly conveyed in tutorials. I only consider #(...) as an anonymous function. The longer form (fn [] (...)) has the potential of being perfectly named, it's just you who doesn't give it a name usually... Jim -- -- 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.