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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="English3000" data-post="11" data-topic="19369">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/english3000/48/10551_2.png" class="avatar"> English3000:</div>
<blockquote>
<p>I think the core lacks order.</p>
</blockquote>
</aside>
<p>You will find this is a very controversial statement. I’d say people who create and maintain languages are likely to disagree.</p>
<p>Nothing much to be disheartened about, do you have some sort of a huge blocker working with Elixir?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="111972" 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/imagining-elixir-2-0/19369/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-111972" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111972"
                     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="111978" data-post-id="111978">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="English3000" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/English3000/120/10551_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  English3000
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>Again, were it up to me, I would have closed this, as it is a debate not a discussion. But given the debate continues, I must continue making my case.</p>
</blockquote>
<p>Elixir lacks order in that there is no objective criterion for what does or doesn’t go in the core.</p>
<p><a href="https://elixir-lang.org/development.html" rel="nofollow">Rather, it is stated:</a></p>
<p><em>The Elixir team focuses on language features that:</em></p>
<ol>
<li>are necessary for developing the language itself</li>
<li>bring important concepts/features to the community in a way its effect can only be maximized or leveraged by making it part of the language</li>
</ol>
<p>These are heuristics. The core team determines what belongs and what doesn’t. Extensibility can be cited to avoid going in one direction while reason <span class="hashtag-raw">#2</span> can be cited to do so.</p>
<p>The problem, from an open-source standpoint, is that there is no system to <em>consider</em> new ideas (in my experience, just hostility). As a result, might is “right”.</p>
<p>I mean, so be it–Valim has done a generally great job.</p>
<p>It’s just frustrating…</p>
<p>I’ve already made the distinctions in my article from an organizational standpoint.</p>
<p>In terms of documentation, currently functions are arbitrarily put in alphabetical order. Again, <a href="https://groups.google.com/forum/?utm_medium=email&amp;utm_source=footer#!msg/elixir-lang-core/TxDvKFwltZU/wXf_T2_PBwAJ" rel="noopener nofollow ugc">I’ve already written this before</a>, but just for visibility–the benefit is ordering is predictable; the downside is it is cluttered. Were an additional level of granularity to be added <em>(like how modules themselves aren’t ordered completely alphabetically, but rather alphabetically within logically arranged groups–or like in <code>Kernel</code> where there is a second dropdown for guards)</em>, that would provide users the best of both worlds.</p>
<p>Last, in my experience, the codebase itself in certain places could be refactored for concision and clarity. Part of this is the scope of my article, and the other part is <a href="https://github.com/elixir-lang/ex_doc/pulls?utf8=%E2%9C%93&amp;q=is%3Apr+author%3AEnglish3000" rel="noopener nofollow ugc">an experience</a> I had trying <a href="https://github.com/elixir-lang/ex_doc/compare/master...English3000:MERGED" rel="noopener nofollow ugc">to contribute</a> to <code>:ex_doc</code> which isn’t part of the core.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="111978" 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/imagining-elixir-2-0/19369/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-111978" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111978"
                     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="111988" data-post-id="111988">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="English3000" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/English3000/120/10551_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  English3000
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Whatever the case, whatever the reasons, it doesn’t really matter. The great thing about tech is even if a bunch of people don’t like the sound of one’s idea… <a href="https://github.com/English3000/elixir_core" rel="noopener nofollow ugc">one can simply build it</a>.</p>
<p>For those of you who are interested in what I have in mind, please feel free to <a href="https://gist.github.com/English3000" rel="noopener nofollow ugc">check out my gists</a>.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="111988" 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/imagining-elixir-2-0/19369/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-111988" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111988"
                     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="111989" data-post-id="111989">
  <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">
								<aside class="quote no-group" data-username="English3000" data-post="8" data-topic="19369">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/english3000/48/10551_2.png" class="avatar"> English3000:</div>
<blockquote>
<p>But again, Valim’s whole argument for not adding new functions to say ExUnit <a href="https://groups.google.com/forum/m/?utm_medium=email&amp;utm_source=footer#!msg/elixir-lang-core/jjzm4jnRLo0/UEWPtXLrCAAJ" rel="nofollow">(such as 2 that I proposed) </a> is the notion that Elixir should be extensible.</p>
<p>At the end of the day, I think there’s a double-standard: the Core Team adds things even when the separation of concerns is poor or unexplained. And when I worked off of that, suggesting 2 macros, I get this line about extensibility.</p>
</blockquote>
</aside>
<p>Those are two very distinct examples.</p>
<p>The reason we added String.myers_difference is because we use it for ExUnit diffing. <strong>If we didn’t have ExUnit diffing, we wouldn’t have String.myers_difference</strong>. Originally the diffing algorithms were inside ExUnit exclusively but some developers asked them to be extracted. Since the feature was already in core, it made sense to be extracted. However, if it wasn’t on core and somebody asked to add <code>String.myers_difference</code>, then we likely wouldn’t have accepted it.</p>
<p>So there is a whole history of how things evolved and how <code>myers_difference</code> plays an important role in one of ExUnit’s most important usability features.</p>
<hr>
<p>With that said, there is no denial that deciding what is worth enough to get into core is decided by the core team. There are heuristics in place. Those heuristics were created exactly because before <em>there was nothing</em> and the community asked us to write down our decision process for guidance. It is completely natural for us to refine the process as the language and the community matures. I am also completely aware that we won’t make everybody happy.</p>
<p>In fact, the whole point of saying “Elixir is slowing down” is exactly to <strong>signal to everyone that proposals most likely won’t be accepted</strong>. The most relevant features have already made into core. Sure, we may miss some excellent features as part of core by taking such stance, but there is no perfect system.</p>
<p>Look, I completely understand it is frustrating to work on something and have proposals rejected. I am also an open source contributor. I also get this end of the stick.</p>
<p>Heck, this happens even on Elixir itself. You can find examples here on the forum of proposals that I have put dozens of hours into it, describing the rationale, the pros and cons, answered questions from the community, and they were ultimately “rejected by the community”. Either because the proposal really wasn’t as good as I thought or because I could not get my point across.</p>
<p>Ultimately, if you believe that there is a double standard, there is nothing I can do about it, but my conscience is clear that communication regarding Elixir’s future improved steadily and that we are doing our best to apply our heuristics consistently. In fact, even you cited an example of a feature that was built by the core team (ExUnitProperties) and it was decided to not be part of language either. It is a case extremely similar to yours and the outcomes have been the same, roughly around the same time period.</p>
<p>Somebody (usually myself) needs to “say no”, which means I will get flack from time to time and is, honestly, quite exhausting, but that’s the best system I can think of.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="111989" data-batch-url="/posts/batch_likers">
                        30
                      </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/imagining-elixir-2-0/19369/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-111989" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="111989"
                     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="112255" data-post-id="112255">
  <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">
								<aside class="quote no-group" data-username="English3000" data-post="5" data-topic="19369">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/english3000/48/10551_2.png" class="avatar"> English3000:</div>
<blockquote>
<p>A great example that already exists in Elixir is <a href="https://hexdocs.pm/elixir/IO.html#inspect/2" rel="nofollow"> <code>IO.inspect/2-3</code> </a></p>
<p>It’s very powerful and very convenient.</p>
<hr>
<p>To your point, right now I need to remember the distinction between two functions, as captured by somewhat arbitrary naming.</p>
<p>An options list is more explicit and more powerful. If I ever want to change my code, I just add an option instead of having to use a whole new function.</p>
</blockquote>
</aside>
<p>The difference though is that none of the options given to <code>IO.inspect/2-3</code> change its return type. We generally avoid  having an option change the return type because it makes the code harder to understand.</p>
<p>For example, if we were to merge <code>get</code>, <code>fetch</code> and <code>fetch!</code> into <code>something</code>, the following call <code>Map.something(map, key, opts)</code> could return <code>{:ok, value} | value | :error | no_return</code>. This can have a negative impact in static analysis tools like diaylzer, which may now have to work with this broad return type, and even affect features in editors, such as the typespecs autocompletion found in VS Code Elixir.</p>
<aside class="quote no-group" data-username="English3000" data-post="6" data-topic="19369" data-full="true">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/english3000/48/10551_2.png" class="avatar"> English3000:</div>
<blockquote>
<p>Re: cruft and performance, I’m referring to compile time.</p>
<p><em>That’s a big part of how Elixir is able to announce it’s faster with each release.</em></p>
</blockquote>
</aside>
<p>Sorry but it is unclear how the suggestions above would impact compile time and how it relates to the “Elixir is faster” announcements. Can you please expand? If there are ways we can compile libraries and applications faster, I would love to hear.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="112255" data-batch-url="/posts/batch_likers">
                        5
                      </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/imagining-elixir-2-0/19369/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-112255" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="112255"
                     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="112736" data-post-id="112736">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/josevalim" rel="nofollow">@josevalim</a> have the Core team considered changing or improving the syntax for pattern matches on and construction of maps?</p>
<p>One of the changes I would love to see is ability to only having to specify the name of the key and get a variable of the same name:</p>
<pre><code>%{ name, age } = my_map
</code></pre>
<p>or only specify the variable names and get keys using the same names:</p>
<pre><code>name = “Jose”
my_map = %{ name }
</code></pre>
<p>This is similar to how clojure does it and especially newer js syntax.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="112736" 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/imagining-elixir-2-0/19369/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-112736" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="112736"
                     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="112737" data-post-id="112737">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>This has been requested a multitude of times and rejected every time. See also: <a href="https://andrealeopardi.com/posts/a-story-of-regret-and-retiring-a-library-from-hex/" class="inline-onebox" rel="nofollow">A story of regret and retiring a library from Hex – Andrea Leopardi</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="112737" 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/imagining-elixir-2-0/19369/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-112737" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="112737"
                     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="112744" data-post-id="112744">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I tried to get that added to elixir, but there was a lot of opposition. <a href="https://forum.elixirforum.com/t/proposal-add-field-puns-map-shorthand-to-elixir/15452" rel="nofollow">https://forum.elixirforum.com/t/proposal-add-field-puns-map-shorthand-to-elixir/15452</a></p>
<p>I don’t see that changing. I think the best option at this point would be to implement <code>%/2</code> in Elixir instead of a <code>Kernel.SpecialForm</code>, so that you could at least do that with structs.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="112744" 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/imagining-elixir-2-0/19369/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-112744" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="112744"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>