<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="114616" data-post-id="114616">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Eiji" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Eiji/120/36743_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Eiji
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="massimo" data-post="11" data-topic="19912">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>Attributes are private too: they are only visible from inside the module <em>and</em> at compile time.<br>
They just don’t have <code>private</code> in the name.</p>
</blockquote>
</aside>
<p>Yeah and that was a bit confusing for me at start. I though how could I fetch them from other module. Btw. you probably did not noticed, but there is option to do it. <img src="https://forum.elixirforum.com/uploads/default/original/2X/2/20c9c52366de24191270f0b11311379ce60ac82d.gif?v=15" title=":077:" class="emoji emoji-custom" alt=":077:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group quote-modified" data-username="massimo" data-post="11" data-topic="19912">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>Think of them as something like<br>
(…)<br>
where  <code>visible_to</code>  can be omitted and defaults to  <code>[__MODULE__]</code> .</p>
</blockquote>
</aside>
<p>yup, that’s 100% right<br>
Now try to do that as a newbie and post a question on forum asking why it’s not working … It’s exactly why there should not follow same naming.</p>
<p>Or maybe other example. Write a library with <code>def</code> and <code>defp</code> macros. Think now some library is using it and somebody want to contribute to it. Unfortunately your implementation does not support guards, so commits which looks good fails which confuses everyone. In hundreds of lines file you need to find <code>import</code> or <code>use</code> which confuses everyone. Good if you are adding all declarations at top of file and you don’t have much of them …</p>
<aside class="quote no-group" data-username="massimo" data-post="11" data-topic="19912">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>The fact that privateness is not enforced doesn’t make them any less private.</p>
</blockquote>
</aside>
<p>Sorry, but I did not get what you mean by this. Is naked, shaved and young man still Santa Claus? <img src="https://forum.elixirforum.com/images/emoji/apple/smiley.png?v=15" title=":smiley:" class="emoji" alt=":smiley:" loading="lazy" width="20" height="20">   It’s like lake without water is still lake. Of course it’s normal for <code>Python</code> developer:</p>
<p><a href="https://forum.elixirforum.com/t/programming-related-jokes-thread/10652/21" rel="nofollow">https://forum.elixirforum.com/t/programming-related-jokes-thread/10652/21?u=eiji</a></p>
<p>but definitely not for <code>Erlang</code> developer. <img src="https://forum.elixirforum.com/images/emoji/apple/smiley.png?v=15" title=":smiley:" class="emoji" alt=":smiley:" loading="lazy" width="20" height="20"></p>
<p>Look that <code>Erlang</code> private functions are definitely not like <code>Python</code> private methods. Same difference is in <code>defp</code> vs <code>defmodulep</code>. They have even different use case. First makes specific function private for specific module and second makes module magically hidden (for example scoped using some prefix). Hidden does not means private. Look that if there could be public database which is hidden and accessible only on specific IP address which is not assigned to any domain. It’s hard to find it, but it does not mean you can’t reach it. If you can reach it then it’s not private (again following what <code>Erlang</code> offers as “private”).</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Example do
  defmacro defmodulep(name, opts, do: block) do
    quote do
      defmodule Module.concat(Private, unquote(name)) do
        @visible_to unquote(opts[:visible_to])

        unquote(block)
      end
    end
  end

  # requirep definition goes here
end
</code></pre>
<p>Such code would simply add <code>Private.</code> prefix before module, so you can’t access this module directly, but this just not mean that you can’t access it using <code>Private.</code> prefix. Private modules therefore are not protected (like private functions). They are basically still Public, but hidden under prefix/scope.</p>
<p>Look if I would say that last day I had guest then what would you think? You would probably think about human in my flat/house, but I actually I could mean bot on website. Both human and bot can be guests, they could have actually same privileges and they even could want same thing, but this does not mean that they are exactly same. Basically bot and human are 100% different - they could use same tools, one could imitate other, but if we would say about them with same words then other people could misunderstand what we are talking about.</p>
<p>We could even group all pets under one “pet” word, because all are pets. Now you need to guess which pet I’m talking about, because they don’t have their own names like cat or dog. If you firstly thing about dog and you would hear from me that I let it go on his way (like cat does) then you would be confused why I did it. You would call somebody to catch it and they therefore would assume that you are talking about dog. Well … you basically talking about dog, but you actually you are talking about cat even if you did not noticed it. That’s confusion and mess.</p>
<p>From my experience more you assume is more problems in future. Having same naming (<code>private</code>) for 2 different similar, but different things (hiding and protecting) would not give anything good. Every developer was newbie, so he/she should remember how much things he/she wrongly assumed. While <code>=</code> operator is confusing it’s important for <code>Elixir</code> itself. If we can we should not confuse newbie and don’t let assume too many things.</p>
<p>Coming from this point people (much more experienced from me) defined rules which makes everyone’s code easier to understand like proper indention, max line length, max function length and also proper naming. I believe most of things could be generalized to <code>x</code>, <code>y</code> and <code>z</code> variables, but this does not mean that it should be done in such way.</p>
<aside class="quote no-group" data-username="massimo" data-post="11" data-topic="19912">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>No, I don’t.</p>
</blockquote>
</aside>
<p>And that makes them not private. There is even no way to protect use “private” modules in other apps. Still I could wrote <code>defmodule Ecto.MyHack do … end</code> and I would be able to access all internal modules which are scoped for <code>Ecto.*</code> modules only.</p>
<p>Again all what I mean is assuming what typical newbie do. Let’s say you have really important core function which you don’t want to be accessed. When you hear about “private” modules then you most probably assuming that they are working as same as private functions. If we would use synonym then newbie think: <code>Hey … why it's named differently? Does it not work like this one …?</code>. This makes newbie curious about it and answer for his question would be available in documentation. If we would have same naming and newbie would assume that it’s working as same then he would not even look at documentation and would not notice that’s not working in same way. Wrong assumption could make code vulnerable and it could be pretty easy used with simple hacks I mentioned few times.</p>
<p>Imagine that someone would write library and instead of using private functions all write calls would be in private modules. This would allow to access them and write data for example without protection (like function guards) which is … not needed for “private” modules, because they are like private function, right? If I can imagine something like this in “5 min” then what could do expert taking his time with coffee cup?</p>
<aside class="quote no-group" data-username="massimo" data-post="11" data-topic="19912">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>I also think using <code>internal</code> would cause major headaches when they are going to become <code>private</code> for real (I bet it’s not gonna be that far in the future).</p>
</blockquote>
</aside>
<p><strong>ERROR: WRONG ASSUMPTION FOUND !!!</strong></p>
<blockquote>
<ul>
<li>Declaring the module visibility per package or application. The Elixir language and the compiler do not have the concept of “applications”. Applications and packages are purely a build tool construct. In a way this is great, because the language is small and we build features on top, but it also means we cannot implement a construct such as visibility per package as part of the language.</li>
</ul>
</blockquote>
<p>Also you really did not get why this proposal was created. It’s not about protecting specific module - it’s more about don’t give so easy access without any warning/error (depends on scenario). Access is still possible no matter if by hacks or not. It’s not going to be protected in future. This proposal does not mean that core team want to introduce private modules which in future would not allow to be accessed. This is all about don’t ignore reaching internal API.</p>
<p><strong>Even</strong> if core team would change mind then they can’t change behavior of already implemented functionality until next major release i.e. <code>2.0.0</code>. I don’t believe that <code>2.0.0</code> would be <strong>planned</strong> soon as there are not enough changes for such major version. Look that <code>2.0.0</code> means breaking backward compatibility, so core team would probably not dot it as often as you imagine, because there would be lots of problems with already created packages. Think that all authors of all packages would need to check if there are not any breaking changes in their code. This is lots of work and it would be definitely announced much before it’s release.</p>
<aside class="quote no-group" data-username="massimo" data-post="11" data-topic="19912">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/massimo/48/5555_2.png" class="avatar"> massimo:</div>
<blockquote>
<p>The risk of confusion is exaggerated in my opinion: novices will read <code>private</code> and think of something they should not rely on, just like <code>private</code> functions, and that’ll be a good guess, even if they <em>could</em> work around the limitation, while experienced programmers are suppose to know what they are doing.</p>
</blockquote>
</aside>
<p>ok, I’m totally messed now …</p>
<p>Did you read proposal and why it was proposed? It was <strong>exactly</strong> because people tried to access things which they should not and it was not talked in contents of not used libraries, but lots of question/issues about “… not working after upgrade”. If there would be a way to access private functions I believe that lots of people would do so and I’m not exception here. I really often want to change one line in function which relies on few private functions, but copying them means maintaining all of this just for one line change and all fixes to this code would need to be tracked by me and patched in my version as well.</p>
<p>I’m curious what you mean by “experienced” developers, because if I remember correctly those awesome people which wrote <code>absinthe</code> had problems with upgrading <code>Elixir</code> too. Here are only few examples which are already mentioned:</p>
<aside class="quote quote-modified" data-post="151" data-topic="19374">
  <div class="title">
    <div class="quote-controls"></div>
    <img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/axelson/48/26351_2.png" class="avatar">
    <div class="quote-title__text-content">
      <a href="https://forum.elixirforum.com/t/proposal-private-modules-general-discussion/19374/151" rel="nofollow">Proposal: Private modules (general discussion)</a> <a class="badge-category__wrapper " href="/c/elixir-news-announcements/elixir-news/28" rel="nofollow"><span data-category-id="28" style="--category-badge-color: #7C1A9C; --category-badge-text-color: #FFFFFF; --parent-category-badge-color: #7C1A9C;" data-parent-category-id="132" data-drop-close="true" class="badge-category --style-square --has-parent" title="Official Elixir News"><span class="badge-category__name">Elixir News</span></span></a>
    </div>
  </div>
  <blockquote>
    Here’s a few examples: 

String.Casing: <a href="https://github.com/blackode/elixir-tips/issues/5" class="inline-onebox-loading" rel="noopener nofollow ugc">https://github.com/blackode/elixir-tips/issues/5</a>
Mix.Ecto was private in Ecto 2.x. There’s a bunch of blog posts that broke with Ecto 3.x because of it

<a href="https://til.hashrocket.com/posts/k4zie79ydb-mix-tasks-accessing-the-db-with-mixecto" class="inline-onebox-loading" rel="noopener nofollow ugc">https://til.hashrocket.com/posts/k4zie79ydb-mix-tasks-accessing-the-db-with-mixecto</a>

Still has broken example code (but they’re working on it soon: <a href="https://github.com/hashrocket/tilex/issues/311" class="inline-onebox-loading" rel="noopener nofollow ugc">https://github.com/hashrocket/tilex/issues/311</a>)


<a href="https://brainlid.org/elixir/2016/09/28/mix-task-using-ecto.html" class="inline-onebox-loading" rel="noopener nofollow ugc">https://brainlid.org/elixir/2016/09/28/mix-task-using-ecto.html</a>
<a href="https://forum.elixirforum.com/t/create-mix-tasks-that-invoke-existing-modules-which-use-ecto/18232/3" class="inline-onebox-loading" rel="nofollow">https://forum.elixirforum.com/t/create-mix-t…</a>
  </blockquote>
</aside>

<p>and the complete list is really long.</p>
<p>Look I don’t believe that <code>José Valim</code> would create such proposal for few newbies … There was lots of problems which I have noticed too using popular 3rd-party libraries.</p>
<hr>
<p>Maybe after all of that you would not understand - no problem. I would like only to write why it’s so important for me. As a newbie I saw <code>monkey patching</code> in <code>Ruby</code> used only once for one line function. I liked it way too much. I end up with monkey patching lots of functions, because I just saw other people do that. Of course it was not only one thing I did wrong and mostly it’s all because I assumed too much. It’s why taking care about whole code (not only naming) is so much important for me.</p>
<p>Hope that helped <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="114616" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/alternative-names-to-defmodulep-split-thread/19912/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-114616" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="114616"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="114624" data-post-id="114624">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="gregvaughn" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/gregvaughn/120/954_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  gregvaughn
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I think the bikeshed should be painted green, for what its worth <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="114624" data-batch-url="/posts/batch_likers">
                        6
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/alternative-names-to-defmodulep-split-thread/19912/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-114624" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="114624"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="114637" data-post-id="114637">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jeramyRR" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jeramyRR/120/722_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  jeramyRR
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I haven’t read through all the threads on this topic but has the community thought about going the route Rust took, where every function is private by default?  To make something public you have to declare it public like:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">pub def this_is_my_public_facing_api(), do: # do something great
</code></pre>
<p>This way we don’t have to worry about private modules or whatever.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="114637" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/alternative-names-to-defmodulep-split-thread/19912/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-114637" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="114637"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="114639" data-post-id="114639">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="gregvaughn" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/gregvaughn/120/954_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  gregvaughn
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Since erlang requires a declaration of which functions are exported, yeah, I think the idea was considered. I have mixed feeling on the result, but I don’t question its consideration. In any case this is a <strong>majorly</strong> backwards incompatible change that would require a <em>very strong</em> argument to support it.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="114639" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/alternative-names-to-defmodulep-split-thread/19912/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-114639" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="114639"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="157100" data-post-id="157100">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Exadra37" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Exadra37/120/9183_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Exadra37
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I just found <a href="https://github.com/josevalim/defmodulep" rel="noopener nofollow ugc">defmodulep</a>… Seems to me like the playground for the idea, or its the official implementation?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="157100" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/alternative-names-to-defmodulep-split-thread/19912/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-157100" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="157100"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="167435" data-post-id="167435">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Exadra37" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Exadra37/120/9183_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Exadra37
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Exadra37" data-post="16" data-topic="19912">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/exadra37/48/9183_2.png" class="avatar"> Exadra37:</div>
<blockquote>
<p>I just found <a href="https://github.com/josevalim/defmodulep" rel="noopener nofollow ugc">defmodulep </a>… Seems to me like the playground for the idea, or its the official implementation?</p>
</blockquote>
</aside>
<p>Any idea when <code>defmodulep</code> will be available?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="167435" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/alternative-names-to-defmodulep-split-thread/19912/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-167435" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="167435"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="167442" data-post-id="167442">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="axelson" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/axelson/120/26351_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  axelson
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Scenic Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I don’t think <code>defmodulep</code> was ever on a track to be generally available/used, it was created more as a proof of concept. And now that the repository is archived it will no longer be developed (although of course if it Apache v2.0 so you can fork and maintain it if you want).</p>
<p>But I think that <a href="https://forum.elixirforum.com/t/boundary-enforcing-boundaries-in-elixir-projects/24623" class="inline-onebox" rel="nofollow">Boundary - enforcing boundaries in Elixir projects</a> is a more promising alternative so I’d recommend you take a look at that instead or develop a new library.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="167442" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/alternative-names-to-defmodulep-split-thread/19912/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-167442" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="167442"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="167458" data-post-id="167458">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Exadra37" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Exadra37/120/9183_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Exadra37
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="axelson" data-post="18" data-topic="19912">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/axelson/48/26351_2.png" class="avatar"> axelson:</div>
<blockquote>
<p>And now that the repository is archived it will no longer be developed (although of course if it Apache v2.0 so you can fork and maintain it if you want).</p>
</blockquote>
</aside>
<p>I know is archived, sorry to have mislead you about my intentions in my question. I don’t want to use it directly, but instead my question intention was when could we expect it in Elixir itself.</p>
<aside class="quote no-group" data-username="axelson" data-post="18" data-topic="19912">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/axelson/48/26351_2.png" class="avatar"> axelson:</div>
<blockquote>
<p>I don’t think <code>defmodulep</code> was ever on a track to be generally available/used, it was created more as a proof of concept.</p>
</blockquote>
</aside>
<p>I though the repo for <code>defmodulep</code> was a playground for <a href="https://forum.elixirforum.com/t/proposal-private-modules-general-discussion/19374" rel="nofollow">this proposal</a> by Jose, but I noticed now that unfortunately it seems the preference goes to <a href="https://forum.elixirforum.com/t/proposal-private-modules-general-discussion/19374/143" rel="nofollow">option A</a>.</p>
<p>Any idea when Option A will be available in Elixir core?</p>
<aside class="quote no-group quote-modified" data-username="axelson" data-post="18" data-topic="19912">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/axelson/48/26351_2.png" class="avatar"> axelson:</div>
<blockquote>
<p>But I think that <a href="https://forum.elixirforum.com/t/boundary-enforcing-boundaries-in-elixir-projects/24623" rel="nofollow">Boundary - enforcing boundaries in Elixir projects </a> is a more promising alternative so I’d recommend you take a look at that instead or develop a new library.</p>
</blockquote>
</aside>
<p>I am not planning in developing a new library at all, and I already know about Boundary, but I was really expecting to have private modules in Elixir. I would prefer this to be built-in in the language then enforced by a dependency.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="167458" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/alternative-names-to-defmodulep-split-thread/19912/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-167458" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="167458"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="167463" data-post-id="167463">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="josevalim" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/120/1787_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  josevalim
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Elixir</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>As mentioned in the proposal discussion, we favored option A and Boundary provides a more complete implementation - so I would advise to use that. We have no plans to introduce <code>defmodulep</code> in core. You can see the proposal discussion for my rationale.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="167463" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/alternative-names-to-defmodulep-split-thread/19912/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-167463" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="167463"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="216999" data-post-id="216999">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tanweerdev" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tanweerdev/120/8781_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tanweerdev
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="20" data-topic="19912">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/48/1787_2.png" class="avatar"> josevalim:</div>
<blockquote>
<p>As mentioned in the proposal discussion, we favored option A and Boundary provides a more complete implementation</p>
</blockquote>
</aside>
<p>so next question: is there any plan to merge boundary(or modified version of it) into core Elixir? That would be nice <img src="https://forum.elixirforum.com/images/emoji/apple/heart_eyes.png?v=15" title=":heart_eyes:" class="emoji" alt=":heart_eyes:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="216999" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/alternative-names-to-defmodulep-split-thread/19912/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-216999" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="216999"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/19912/load_more?page=3">Load more posts (1 remaining)</a>
</div></template></turbo-stream>