There's also Jig : https://github.com/juxt/jig

Jig's recommendation is for configuration to be held in EDN files.

I much prefer EDN over environment variables. Environment variables feel 
awkward when there you have lots of configuration, usually in the form of a 
tree.

Usually it makes sense to have one configuration file per environment. That 
can make it hard to keep configuration files up to date, so judicious use 
of the #=() Clojure reader macro can allow you to programmatically deviate 
from a default configuration - often the delta from a default configuration 
is more informative. There are more details in Jig's README.md file.

I agree with the comments against using dynamic vars. They reduce the 
ability to reason about functions and are precarious when dealing with 
threads - binding conveyance is tricky and small mistakes can lead to 
elusive bugs.

I pass configuration as a single argument into types/records that declare 
lifecycle methods. I have found this pattern to serve me well in over a 
dozen projects. Since stumbling on this pattern I have had no need to 
resort to dynamic vars for environment config, and my projects have been 
smaller, more reliable and easier to reason about.


On Tuesday, January 14, 2014 9:04:45 AM UTC, James Trunk wrote:
>
> Thanks for all the great links and ideas you have all posted, now I have 
> plenty of reading and thinking to do!
>
> > I am curious about what you mean by 'thread safety'.
> Perhaps "thread safety" is the wrong term, but what I meant was the 
> limitations dynamic binding introduces around thread dispatching, which 
> Stuart Sierra explains in this blog 
> post<http://stuartsierra.com/2013/03/29/perils-of-dynamic-scope>
> .
>
> Cheers,
> James
>
> On Monday, January 13, 2014 7:10:38 PM UTC+1, Stefan Kanev wrote:
>>
>> On 13/01/14, James Trunk wrote: 
>> > The downsides to dynamic vars seem to be: hiddenness, thread safety, 
>> and 
>> > more complex tests (binding before each test). 
>>
>> I am curious about what you mean by 'thread safety'.  As far as I know, 
>> dynamic variables are thread-local, which means that they are 
>> thread-safe, at least to some extend.  I assume you mean something 
>> specific? 
>>
>> -- 
>> Stefan Kanev  ¦  @skanev  ¦  http://skanev.com/ 
>> If a program manipulates a large amount of data, it does so in a small 
>> number 
>> of ways. 
>>
>

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

Reply via email to