Hi,

On May 31, 1:46 pm, "Sina K. Heshmati" <s...@khakbaz.com> wrote:

> Here's my concern:
>
> - My program (A) is running.
> - B is running on the same VM.
> - B accesses the state of A.
> - B alters the state of A in an inconsistent way
>   e.g. whenever the internal state x changes, the
>   internal state y also has to change accordingly,
>   but B only changes x.
> - A is screwed.

A is namespace my.ns.a. There you define a private var: (def
^{:private true} state (atom 0)). B is namespace my.ns.b. B cannot
change state in A.

user=> (ns my.ns.a)
nil
my.ns.a=> (def ^{:private true} state (atom 0))
#'my.ns.a/state
my.ns.a=> (ns my.ns.b)
nil
my.ns.b=> (reset! my.ns.a/state :messed-up-your-state-harharhar)
java.lang.IllegalStateException: var: my.ns.a/state is not public
(NO_SOURCE_FILE:4)

>From a philosophical point of view:
Either you develop an application and
  you are in charge of B. => You are in control: don't do it.
  you are not in charge of B. => B is obviously a crappy library which
you should not use in project.

You develop a library: A. Why bother? Since your library is well
documented it clearly defines the contract. Why care for people who
are too lazy to read?

> Is there a way to pass the function itself rather
> than making a new function that calls the exact
> same function with the same arguments?

(let [state (atom 0)]
  (extend t-a
    prot-a
    {:op-a (fn [this x y] (+ (.member this) x y @state))}))

Sincerely
Meikel

-- 
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

Reply via email to