Re: Executing Future

2011-04-28 Thread Paul deGrandis
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

2011-04-28 Thread Jonathan Fischer Friberg
"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

2011-04-28 Thread MohanR
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

2011-04-25 Thread gaz jones
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