Re: Executing Future
Another great resource for Clojure is ClojureDocs. The doc for 'future' has a simple example: http://clojuredocs.org/clojure_core/clojure.core/future Not only does it show you the doc string and an example, if your scroll down you can see the source code for the function. You'll see that lot of language level constructs (future, promise, etc) use some form of the java.util.concurrent stuff, but add on to it. Some stuff (agents, atoms, etc) can be found here: https://github.com/clojure/clojure/tree/master/src/jvm/clojure/lang if you want to look through the entire source (I definitely recommend it!) Paul On Apr 28, 6:46 am, Jonathan Fischer Friberg wrote: > "So I have this question. I have heard that Clojure's data structures > are immutable and it has support for promises, agents, atoms etc." > > It's not that clojure's data structures support promises, agents ... > It's more like promises, agents ... support clojure's data structures. > > "Changing" something in an agent doesn't actually change the data itself, it > only changes where the agent "points", so to speak. > For example: > (def a 3) > (def b (agent a)) > (send b inc) > a => 3 ; a is never changed! > @b => 4 ; instead, a new value is created, which b now points to. > > Atom > source:https://github.com/richhickey/clojure/blob/master/src/jvm/clojure/lan... > > About > STM:http://java.ociweb.com/mark/stm/article.html#PersistentDataStructures > > On Thu, Apr 28, 2011 at 11:20 AM, MohanR wrote: > > > > > > > > > The problem was elsewhere but I realized that Clojure has support for > > futures at the level of the language even though it relies on > > java.util.concurrent. > > > So I have this question. I have heard that Clojure's data structures > > are immutable and it has support for promises, agents, atoms etc. > > > What exactly is meant by this ? Is it that all of these Clojure > > language featues are based on java.util.concurrent ? > > > I am still learning FP and Clojure but I want to know if I am assuming > > something totally wrong here. All of these language featues seem to > > depend on java.util.concurrent. > > > What about STM ? Is that a new idea based on the same Java library ? > > > -- > > 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 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
Re: Executing Future
"So I have this question. I have heard that Clojure's data structures are immutable and it has support for promises, agents, atoms etc." It's not that clojure's data structures support promises, agents ... It's more like promises, agents ... support clojure's data structures. "Changing" something in an agent doesn't actually change the data itself, it only changes where the agent "points", so to speak. For example: (def a 3) (def b (agent a)) (send b inc) a => 3 ; a is never changed! @b => 4 ; instead, a new value is created, which b now points to. Atom source: https://github.com/richhickey/clojure/blob/master/src/jvm/clojure/lang/Atom.java About STM: http://java.ociweb.com/mark/stm/article.html#PersistentDataStructures On Thu, Apr 28, 2011 at 11:20 AM, MohanR wrote: > The problem was elsewhere but I realized that Clojure has support for > futures at the level of the language even though it relies on > java.util.concurrent. > > So I have this question. I have heard that Clojure's data structures > are immutable and it has support for promises, agents, atoms etc. > > What exactly is meant by this ? Is it that all of these Clojure > language featues are based on java.util.concurrent ? > > I am still learning FP and Clojure but I want to know if I am assuming > something totally wrong here. All of these language featues seem to > depend on java.util.concurrent. > > What about STM ? Is that a new idea based on the same Java library ? > > -- > 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 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
Re: Executing Future
The problem was elsewhere but I realized that Clojure has support for futures at the level of the language even though it relies on java.util.concurrent. So I have this question. I have heard that Clojure's data structures are immutable and it has support for promises, agents, atoms etc. What exactly is meant by this ? Is it that all of these Clojure language featues are based on java.util.concurrent ? I am still learning FP and Clojure but I want to know if I am assuming something totally wrong here. All of these language featues seem to depend on java.util.concurrent. What about STM ? Is that a new idea based on the same Java library ? -- 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
Re: Executing Future
the easiest way (i find) to test if something occurring on another thread has completed is using a latch: (deftest mohanr (let [latch (CountDownLatch. 1) service (Executors/newFixedThreadPool 10)] (doseq [x (range 1) :let [f (.submit service (proxy [Callable] [] (call [] (.countDown latch]] (is (= true (.await latch 1 TimeUnit/SECONDS)) its possible in your code the future isnt yet done, because you check immediately after submitting the task to the thread pool. hope that helps... On Mon, Apr 25, 2011 at 6:27 AM, MohanR wrote: > ( deftest teststream > > (def service ( Executors/newFixedThreadPool 10 )) > (dotimes [x 1] > (try > (def futures (.submit service > ( proxy [Callable][] > ( call > [] > ( println "Test" ) > ) > ))) > ( println ( str "Future is done ? " ( true? ( .isDone futures ) ))) > > (catch ExecutionException e > ( .cancel futures ) > ) > (catch Exception e > ( .cancel futures ) > ) > ) > )) > > This is again a beginner's question. > > Why is the future not done here ? I am getting 'false' and I believe > there are simple mistakes in the code. There is no exception though. > > -- > 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 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