0:41 had this systems class in university where you were graded according to a giant benchmark scoreboard

0:53rritoch: ghadishayban: Are you using doall within your benchmark? Range is lazy so to truly benchmark it you need to ensure all operations are within the timer.

0:57 ghadishayban: Looking at the code, I'd expand out the ararities like C would do with inline functions. I'd also pretest for step 1 and use the inc function instead of + whenever step = 1 which is a common case and inc "should" be faster than + in some cases.

1:03rritoch: ghadishayban: No, but I've made some of my own efforts regarding benchmarks, ultimatly since bytecode is interpreted it's really difficult to get any real advantages since there's no guaranteed time for bytecode, unlike assembly where most instructions use a set number of clock cycles.

1:04 ghadishayban: The 0,1 and 2 ararity versions just call the 3 ararity version. I'd copy/paste the code in and deal with them separately.

1:11ghadishayban: rritoch: range is a subtle problem with many different cases. We're trying to improve it to take advantage of IReduceInit for transducers in 1.7

1:15rritoch: ghadishayban: Ok, well there are a lot of ways of doing it. I'm just going off the code I see. I don't remember if it's python or ruby, but another option is to create a range class which implements a lazy sequence, that would probably be the fastest

1:27 for clojure purposes good enough, for JRuby or Nashorn, they need more =)

1:28cfleming: ghadishayban: There was some discussion on the ML of dropping support for JDK6, presumably to investigate invokedynamic - that's inconvenient for me personally, but if JDK 7 is sufficient then it's probably worth it.

1:35ghadishayban: rritoch: please simmer down. people working on Range have spent upwards of a month on it, i only respectfully ask that you consider the problems (which are manifold) before prescribing a quick solution

1:37cfleming: ghadishayban: yeah, there are other issues - alt no longer works as a modifier, I believe

1:38 ghadishayban: Yeah, I've had 10+ users report crashes, and I don't have that many users

1:38rritoch: ghadishayban: I have 30 years programming experience, so yes, I can answer some issues instantly where it takes your team months of deliberation to come up with solutions that are often not even optimal.

1:42andyf: I would suggest that ghadi saying "it feels like you are shooting from the hip", that was not intended as an insult, but a request to be more specific about your meaning. It would be surprising if they missed some interfaces being implemented from simple lack of looking. Don't take offense too easily, and please try not to give any.

1:43andyf: I'm not sure we are assigning the same meaning to that phrase.

1:44rritoch: andyf: Either way, this is my mistake. If anyone had actually looked you would have seem my mistake quickly. I didn't notice it implements ASeq which is where the missing interfaces came from.

1:50arrdem: Jaood: good question. why do we still have clojure.parallel?

1:51andyf: rritoch: I don't know if there is a way to say this that sounds respectful, but it is meant that way. I do respect experience in any field, including programming. However, when one brings up their years of experience to a discussion too often, it can sound like an appear to authority.

1:56rritoch: andyf: I have met a few people that can outcode me in ways that make anyone here look like newbies. People who can program assembly directly in hex for example, people who can construct valid TCP/IP packets by hand (in hex), etc.

1:58arrdem: cfleming: TIL other Clojurians are capable of infinite time feats. clearly I need to up my game.

1:58rritoch: andyf: It takes more than time. I tried, memorizing even the x86 instruction set is insanely difficult. I couldn't do it. I also had no drive to memorize the TCP/IP structure, though I suppose that is very useful when writing servers.

2:00 arrdem: Yes, I learned the process from clojure-dev after submitting some features for review.

2:03rritoch: arrdem: Well, when I can come up with a trademark-safe name for this fork I intend to allow anyone to add features to it. Making it a melting pot if you will, of proof of concept projects.

2:03andyf: You might like a new feature in Eastwood's next release -- configuration that overrides the :arglists of functions, so Eastwood uses them for wrong-arity checking rather than the :arglists metadata. Makes most of the java.jdbc arity warnings disappear.

2:49rritoch: andyf: I've been working on a web 5.0 platform for 3 years, this is a serious project

2:49 andyf: I can't be held up for months and years just because clojure wants to go through a process of rejection

2:51 andyf: The project started in PHP, but PHP doesn't provide any persistence so it was useless past web 3.0

2:51andyf: rritoch: Anyone can fork any open source project subject to the license, and every open source project has decision makers deciding what changes are made, and what doesn't. I'm not ecstatic about the rate of change in Clojure, but I like it enough to keep using it.

2:53rritoch: andyf: This is meant to be a community version. We hope to provide a more democratic solution. Such as putting features on their own branches and allowing the community to vote on what gets included.

2:53 andyf: This isn't really meant to replace clojure. Just as a temporary solution until clojure has the features we need.

3:13 Either way, freedom isn't really free, In this case it only cost about $25 which is a small price for the greater good.

3:18sveri: Hi, what is the most idiomatic way to provide a default value for a function argument if the given argument is empty? All I can think of is the :or syntax in a map destructuring, but I dont want to pass a map extra for that

3:19rritoch: Anyhow know the proper way to label the clojure trademark? I'm using Clojure (TM. Rich Hickey) but since it's not registered I'm not sure what the convention is.

3:24arrdem: that's the one thing I'm getting progressively less impressed with about our multiple arity functions... we really only use the low arities for partial applications of the "full" arity.

3:25andyf: I think you are safe simply saying "The name Clojure is trademarked by Rich Hickey." in a footnote, and putting TM after uses of the word Clojure, but I'm no intellectual property lawyer. Lots of people use Clojure all over the place without putting a (TM) after it.

3:28rritoch: Ok, I deleted clojureplus in prefrence of andylisp https://github.com/rritoch/andylisp so that deals with any trademark issue, licencing won't be changed but I would prefer that contributions come under the MIT license.

3:44andyf: Still not an intellectual property lawyer, but I wonder whether it is kosher to leave all of the "clojure" occurrences in namespaces. It seems likely that it should not be distributed as a jar with clojure anywhere in the name.

3:46rritoch: andyf: The clojure namespaces are copyrighted, you can't just rename them and have them magically become yours. The eclipse license allows the code to be used in other applications.

3:47 andyf: Some changes will be needed so andylisp.core becomes an automatic namespace but that's about it.

3:48 andyf: Though I should add a disclaimer that this version is "Use at your own risk" since this isn't meant to be used for production environments.

3:48andyf: I'd recommend not using clojure as any part of a name of a JAR file, or Maven dependency artficact/group id, or whatever those things are called.

3:50rritoch: andyf: Well that will take time, but I see your point. Clojure should remain a dependency, and this should truly extend it.

3:52 andyf: But that may make integrating these proof of concept projects into clojure.core more difficult in the long run.

3:52 andyf: As I said, I have no intention of replacing clojure. This is for proof of concept projects.

3:53 andyf: To prove that new features are viable, efficient, and maintainable.

3:55rritoch: TEttinger: Heh, the ruling was that I'm not allowed to change the name, so this is what I'm stuck with.

3:55andyf: I don't have answers to all the questions, but for example, if someone wants to use it in, say, a Leiningen project, they will have to put a dependency in that is something different than [org.clojure/clojure "1.7.0"]

3:56rritoch: I really like the name, because the first question everyone asks about it, is why it should be used compared to others.

4:02rritoch: TEttinger: Yes, this isn't a new language. It is still clojure. As of now I haven't even verified that this fork is viable. The only hosting company I know of that would finance this is unreliable so for now it doesn't have it's own repository.

9:53ajmccluskey: Is there a clear preference between defining private helper fns at the top level and defining them in let bindings of the function that uses them? Assuming only one top level fn uses them.

10:20apricity: i'm using a cider nREPL in emacs and I evaluated a form using C-x C-e. I know the evaluation is taking a while because my laptop fans kicked in highspeed. Other than the fans running how can I know if the form is still evaluating?

13:11justin_smith: ctford: you only have to be aware if you care about where insertions happen. And if you care about where you are inserting, you should be conscious of your collection type whether you use conj or not.

13:12ctford: justin_smith, you always care about where the insertion happens sooner or later, don't you? Otherwise, conj could be noop and you wouldn't notice.

13:12justin_smith: ctford: the thing conj always does is ensure the result contains the argument added to the collection provided

13:12ctford: the only way you could not have to care is if there were a read function on the interface, and a contract on how they interact.

13:35justin_smith: stephenmac7: I like prismatic/schema for type data structure declarations that are strictly opt in, and runtime checks that I can turn on if I choose. But it's not the same as static checks, of course.

13:36stephenmac7: I looked that up and saw something called clojurescript

17:20tbaldridge: dagda1: if you go and write map or filter from scratch, only using cons, you'll notice that inside map is a call to cons. Transducers abstract away cons (or actually conj) so that the creation of the resulting datastructure is decoupled from the map/filter logic

17:21dagda1: tbaldridge: so I could replace conj with some other function?

17:21tbaldridge: right, like conj! or put! into a core.async buffer, or something else

17:22 but it's all abstracted, so you can create a transform once, and use it with multiple creation functions (known as reducing functions).

18:07clojurebot: "([p] [p1 p2] [p1 p2 p3] [p1 p2 p3 & ps]); Takes a set of predicates and returns a function f that returns true if all of its composing predicates return a logical true value against all of its arguments, else it returns false. Note that f is short-circuiting in that it will stop execution on the first argument that triggers a logical false result against the original predicates."

18:10clojurebot: "([p] [p1 p2] [p1 p2 p3] [p1 p2 p3 & ps]); Takes a set of predicates and returns a function f that returns the first logical true value returned by one of its composing predicates against any of its arguments, else it returns logical false. Note that f is short-circuiting in that it will stop execution on the first argument that triggers a logical true result against the original predicates."

18:35andyf: I don't know enough to say whether you've covered all of the edge cases, but perhaps you have. Generative testing with large fraction of non-BMP chars and invalid surrogate pairs might help verify.

18:36 I suspect if someone cares a whole lot about regex matching and large char sets, and avoiding edge cases, they use Perl.

18:40andyf: Tom Christiansen has thought more about this than I bet anyone, and has worked hard on Perl's regex matching in this area. He has filed bugs with the Java development team in this area, and realizes that some of these things take a long time and a lot of testing to get right.

18:58andyf: amalloy: More likely, nobody wants to debug them, because the libs get in their way :)

18:59gfredericks: so if there existed a gen-unicode-char generator, would it be reasonable for it to generate every 2-byte value except the surrogates, along with every valid pair? (i.e., high+low for everything in the high/low range respectively)

19:00andyf: gfredericks: that sounds way more reasonable than allowing it to generate single-Java-char unpaired surrogates.

19:03 It might be nice to have it generate surrogate pairs with a larger probability than a uniform range would lead to, but I guess a uniform range over the whole Unicode code point range would mostly be surrogate pairs.

19:07mi6x3m: clojure, is it possible that I get a cyclic depdency with a namespace that is fully empty?

19:11andyf: Do you mean you want a "fully empty namespace", but you get a cyclic dependency when you try to create one?

20:15annelies: gfredericks: I think the reason clojure.lang.Cons appears is because the reader constructs a cons cell when expanding '(1 2) to (quote (1 2)), whereas it doesn't when you spell out quote directly as (quote (1 2)).

20:15gfredericks: annelies: the two things aren't the same in any case, since it's dealing with the full form (quote (1 2)) in the second case

23:17vivekramaswamy: Hello all, a quick question, what is the command to delete a form. (if (empty? my-array) (do this) (else do this)). I want to delete the whole if statement form my clojure code. Thanks in advance