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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>When I have conversations with my dev friends who haven’t yet tried using Elixir, a common reason they give for not trying it is that Elixir doesn’t have a proper type system. I’ve already shared some information with them about the ongoing efforts to address this, but they mentioned that they found the way Elixir might handle types in the future a bit strange. They say they would prefer to have type information right next to the function params. However, this could be a challenge because we need to support pattern matching on params, and if we also introduce information about types next to params it could become messy and noisy.</p>
<p>My concern is that some individuals might feel that Elixir’s approach to types is too different from how other widely used programming languages handle them. This difference in approach could discourage them from giving Elixir a try.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="297288" 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/what-are-your-concerns-about-a-future-type-system-for-elixir/57525/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-297288" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="297288"
                     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="297289" data-post-id="297289">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The correct way to handle types I think is still a very open ended question, because I know for a fact that languages like java/c# and all subsequent languages that implemented the same way failed this, their tooling is good, however the amount of boilerplate required to separate code into testable pieces is just beyond stupidly insane. One of the concerns is that it might introduce a lot of boilerplate just like in those other languages.</p>
<p>The other concern is as other mentioned a big split in the community, legacy projects that will most probably not adopt the typing and new ones. This also introduces 2 different styles of writing code that might be inherently different in approach.</p>
<p>My last concern is impact of all of this on metaprogramming and pattern match, those were inherently designed with dynamic types in mind, so I don’t see how types would play here, especially if we talk about backward compatibility.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="297289" 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/what-are-your-concerns-about-a-future-type-system-for-elixir/57525/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-297289" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="297289"
                     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="297290" data-post-id="297290">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>My concern is echoed in a lot of other people’s concerns: basically that the problems types solve (which always seems to be some variation of “and later when the implementation of this function changes dramatically and apparently no one notices and no test fails”), isn’t worth the various downsides of types, in fact for me personally it’s not even worth the visual noise of types.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="297290" data-batch-url="/posts/batch_likers">
                        15
                      </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/what-are-your-concerns-about-a-future-type-system-for-elixir/57525/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-297290" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="297290"
                     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="297291" data-post-id="297291">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="hst337" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  hst337
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<ol>
<li>
<p>The most important one for me: <strong>I worry that the ecosystem will get split in two</strong> by projects who will support new type system and by projects who won’t. Since the type checks will work only for projects who adopt the new type system and that new type system will bring no guarantees unless every line of code written with it in mind.<br>
And I don’t think that some projects (like those written in Erlang) will be rewritten to support new type system. This will lead to typed wrappers (who will reduce performance by wrapping every function) and forks (which rarely-rarely happens). TypeScript approach with types and specs specified externally can help to create projects-with-only-types which will contain types and specs for projects who don’t have them in the first place, and this will lead to problems with keeping two dependencies in sync.<br>
With everything written above, I don’t think that new type system will actually help to solve any problems without bringing equal amount of different problems.</p>
</li>
<li>
<p><strong>I worry that new type system won’t improve performance</strong>. I’ve showed several times that this is possible, but each time I’ve heard that nobody is going to do this. Performance is the biggest problem of whole BEAM ecosystem, and not the static typing, since statically typed languages existed there for quite a while now. It is really sad to hear that this problem will remain untouched by new type system.</p>
</li>
<li>
<p><strong>I worry that new type system won’t have an interface for compilers and other compile-time tools</strong>. It would really help me in development of my <em>optimizing compiler</em> to have such interface to provide better guarantees. Introspection and RTTI would really help everyone to create type-aware macros and stuff.</p>
</li>
</ol> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="297291" data-batch-url="/posts/batch_likers">
                        15
                      </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/what-are-your-concerns-about-a-future-type-system-for-elixir/57525/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-297291" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="297291"
                     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="297292" data-post-id="297292">
  <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>Regardless of my personal opinion about types, my biggest worry is about the risk of splitting the community. And that neither those who prefer compiler-enforced user-defined types nor those who prefer dynamic types will be happy.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="297292" data-batch-url="/posts/batch_likers">
                        21
                      </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/what-are-your-concerns-about-a-future-type-system-for-elixir/57525/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-297292" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="297292"
                     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="297293" data-post-id="297293">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I agree with what you said, <strong>I prefer to have something that fits Elixir well than something that is familiar to most people</strong>. I’m just raising a concern that this might hinder adoption in some way due to unfamiliarity. Not that we have to do anything with it, just some food for thought…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="297293" data-batch-url="/posts/batch_likers">
                        8
                      </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/what-are-your-concerns-about-a-future-type-system-for-elixir/57525/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-297293" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="297293"
                     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="297295" data-post-id="297295">
  <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
                    <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 class="user-title">
									<span>Creator of Elixir</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Folks joining late, reminder to keep the answers concise and not engage in discussions, as outlined in the topic. Let’s let everyone say their piece, otherwise I will be removing comments. <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="297295" data-batch-url="/posts/batch_likers">
                        13
                      </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/what-are-your-concerns-about-a-future-type-system-for-elixir/57525/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-297295" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="297295"
                     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="297297" data-post-id="297297">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="CharlesIrvine" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  CharlesIrvine
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<ol>
<li>Backward compatibility. The type system should not break existing code. Hopefully, this goes without saying.</li>
<li>Must be optional.</li>
<li>Make it easy to use and automatic where possible.</li>
</ol> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="297297" data-batch-url="/posts/batch_likers">
                        9
                      </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/what-are-your-concerns-about-a-future-type-system-for-elixir/57525/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-297297" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="297297"
                     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="297298" data-post-id="297298">
  <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">
								<p>Unfortunately I have almost completely forgot the goals and non-goals of the set-theoretic type system so I am typing this from a position of amnesia. Sorry.</p>
<p>Worries:</p>
<ol>
<li>
<p>Split ecosystem. Some people will stick to Dialyzer, others to the new thing. Elixir’s ecosystem isn’t as huge so this might be a death sentence. Though if it is done in the core libraries like Ecto, Phoenix, LiveView, Absinthe etc. then IMO people are very likely to follow.</p>
</li>
<li>
<p>Lack of tooling to migrate. I know this is a VERY tall order but in my experience the new typing system will be much better received if people can run <code>mix do.the.thing</code> and their code gets changed to use the new types. Though I recognize this seems like a huge challenge and will likely be deemed not worth the effort.</p>
</li>
<li>
<p>Sorry for breaking the three-sentences-per-point rule here, IMO it deserves elaboration: I worry that the new typing system will be limited to compiler warnings only. Ideally it should open the floodgates so that it can be used for various other goals (by the community; we don’t ask the core team to do everything!), mostly to e.g. generate code for:<br>
3.1. Various protocol [de-]serializations;<br>
3.2. Phoenix parameter validation boilerplate;<br>
3.3. <code>defguard</code>s<br>
3.4. Why not <code>NimbleParsec</code> parsers and maybe <code>leex</code> lexers and <code>yecc</code> parsers (very maybe);<br>
3.5. <code>StreamData</code> (property testing) data generators;<br>
3.6. <code>Absinthe</code> objects and types.</p>
</li>
</ol> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="297298" data-batch-url="/posts/batch_likers">
                        10
                      </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/what-are-your-concerns-about-a-future-type-system-for-elixir/57525/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-297298" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="297298"
                     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>
    <div class="postbit" id="297301" data-post-id="297301">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<ul>
<li>I worry that that the new syntax and compiler does not allow to add types for foreign code (<em>e.g.</em> defining types for an erlang or untyped elixir library).</li>
<li>I worry that the tools (like ElixirLS) will not be able to use that new information to provide autocomplete and refactoring because the types definitions have no place in the beam format.</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="297301" 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/what-are-your-concerns-about-a-future-type-system-for-elixir/57525/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-297301" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="297301"
                     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 #21"></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/57525/load_more?page=3">Load more posts (67 remaining)</a>
</div></template></turbo-stream>