I much more prefer putting implementation details into separate namespaces.
>From there it's simple to mark them as :no-doc in some documentation tools
so that the vars don't get published. That way I can still test all my
code, and yet I can commit to only those namespaces that have published
APIs.

Or even just putting implementation details behind foo.bar.impl.* So that
it's clear that the contents of these namespaces should not be relied on.
This is what core.async does, and what a lot of my personal projects do.

Timothy

On Mon, Feb 26, 2018 at 8:47 PM, Didier <didi...@gmail.com> wrote:

> I’d even be happy if the default was private for def
>>
>
> I actually prefer private everything by default. Its the public things you
> want to be reminded to think through carefully. And Var access is pretty
> straightforward, in case your using a lib and they forgot to make something
> public you really need, but its way too late to change a default like that.
>
> I think we have to ask ourselves what's the use cases where we use private
> on a Var?
>
> I can think of:
>
>    - When on a function - Implementation details, don't depend on it, it
>    could change at any time in breaking ways, ie, use at your own risk.
>    - When on state - You should not read this data directly, its
>    representation is possibly not easy to consume (another public facing
>    mechanism exist to get a better representation of it), or you can't depend
>    on the shape of this data not to change or this data even existing long
>    term. Thus again, its implementation details.
>    - When on state - You should not write to this data directly, it has
>    strict invariants, and so if you do decide to write to it, be careful you
>    understand and maintain them.
>
> Can anyone think of more use cases?
>
> I'm not even sure the concept of private and public make sense. Could
> there be a better construct to solve these use cases?
>
> I feel private would make sense in a security perspective, if there was no
> way to bypass it, for say running untrusted code within your code, but
> that's not what private does in any way.
>
> On Monday, 26 February 2018 17:41:15 UTC-8, Alex Miller wrote:
>>
>> We're not going to add def-. There is regret over even adding defn-, but
>> we don't take things away...
>>
>> At one point all of the current metadata niceties didn't exist (used to
>> be #^{:private true} some may recall) and defn- seemed worth doing I
>> presume (pre-dates my involvementT). But then that was all simplified down
>> to just ^:private and it's preferred to compose the pieces rather than copy
>> N things.
>>
>> There used to be a slew of these in the old clojure-contrib (
>> https://github.com/clojure/clojure-contrib/blob/master/modu
>> les/def/src/main/clojure/clojure/contrib/def.clj - but no def- !).
>>
>> How often do you def things anyway (much less private things)?
>>
>> On Monday, February 26, 2018 at 1:50:40 PM UTC-6, Leon Grapenthin wrote:
>>>
>>> I have written enough Clojure so that I can assure you that every few
>>> days when I type ^:private again I am still annoyed by it. Not every time,
>>> but probably every second or third time.
>>>
>>> Its just in the way of the prototyping typing (micro-)flow. SHIFT-6 you
>>> don't hit so often so you have to hit it right. On german keyboards, by the
>>> way, ^ is a much more annoying character to type. Then a colon, did I miss
>>> the colon? What did I want to do again?
>>>
>>> When prototyping an API ns its important to distinguish what is private
>>> and what isn't. If only I could just write def- without any overhead.
>>>
>>> First world aka best language problems, I know...
>>>
>>> But whats left for an enthusiast except bikeshedding? We both know that
>>> a JIRA discussion on this will not happen due to a lack of importance. And
>>> unless somebody manages to convince Rich, this feature won't happen.
>>>
>>> Fair enough. I'd consider myself a power user since 1.5.1 and value its
>>> conservative governance above every other kind.
>>> The "lets not start postfixing lots of macros with -" argument a good
>>> one in general and probably was a good one at the time. But not in this
>>> case because defn and def are the two most used and most elementary top
>>> level forms.
>>>
>>> This argument didn't convince anyone who has asked me about this. The
>>> counter argument goes "I don't want the - postfix for anything else, just
>>> for def because I use it a lot" -rightfully so.
>>>
>>> The lack of def- is just unnecessary typing overhead in lots of cases.
>>> It could be removed at the cost 5m on a beautiful day. I'd appreciate it :)
>>>
>>> On Monday, February 26, 2018 at 6:52:51 PM UTC+1, Alexander Yakushev
>>> wrote:
>>>>
>>>> - Not that often. When I know for certain, I add ^:private. Not like
>>>> it's much more work. If I didn't know ahead of time, I would forget to add
>>>> the private flag in either case.
>>>> - Never.
>>>> - Can't recollect such an event.
>>>> - A few times. As far as I can tell, people appreciate the metadata
>>>> approach since it is unique and powerful. The lack of one particular
>>>> non-critical syntactic sugar is never an issue.
>>>>
>>>> I won't mind having def- as much as I don't mind not having it. Pretty
>>>> much the same as for defn- – Earth wouldn't stop turning if you had to type
>>>> defn ^:private once in a while.
>>>>
>>>> And while I agree with you that it would be somewhat useful,
>>>> bikeshedding only gets you so far.
>>>>
>>>> On Monday, February 26, 2018 at 7:17:05 PM UTC+2, Leon Grapenthin wrote:
>>>>>
>>>>> - How many times do you just write (def ...) instead of (def ^:private
>>>>> ...) because you are not sure whether you need the definition yet, want to
>>>>> save effort, and then you forget to add ^:private later?
>>>>> - How many times have you implemented def- yourself into your project
>>>>> and then used only half of the time because you had to require and :refer
>>>>> the thing from some util namespace which is just as annoying as typing
>>>>> ^:private?
>>>>> - How many times do you use autocomplete on some namespace and find
>>>>> internals because their dev forgot ^:private?
>>>>> - How many times in a year do you have to explain to a Clojure newbie
>>>>> that there is defn- but no def-?
>>>>>
>>>>> IME the statistic strongly supports def- - and I don't see why it
>>>>> would hurt.
>>>>> Having def- in clojure.core will not magically result in having
>>>>> defmacro- and defmulti- and xyz-. Its a false and the only counterargument
>>>>> I have seen.
>>>>>
>>>>> It would be very useful, though.
>>>>>
>>>>> On Monday, February 26, 2018 at 1:44:27 PM UTC+1, Alexander Yakushev
>>>>> wrote:
>>>>>>
>>>>>> Usually, it is better to use metadata rather than create an
>>>>>> exponential explosion of names. Public/private is just one dimension, but
>>>>>> you also have static/non-static, dynamic/non-dynamic, etc. Then you have
>>>>>> functions, vars, macros, perhaps modified functions (like
>>>>>> schema.core/defn). Cartesian product of those would be huge.
>>>>>>
>>>>>> defn- is an exclusion from the rule probably because it is used more
>>>>>> often than others.
>>>>>>
>>>>>> On Monday, February 26, 2018 at 10:58:43 AM UTC+2, Promise. wrote:
>>>>>>>
>>>>>>> `defn-` => `defn`
>>>>>>> 'def-` => `def`
>>>>>>>
>>>>>> --
> 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/d/optout.
>



-- 
“One of the main causes of the fall of the Roman Empire was that–lacking
zero–they had no way to indicate successful termination of their C
programs.”
(Robert Firth)

-- 
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/d/optout.

Reply via email to