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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><strong>What I have to say about Elixir pro/con</strong></p>
<p>Here I am after… what? 2 years? of almost exclusively using Elixir. Maybe more? It’s hard to keep track of when we retired other programming languages for good.</p>
<p>I was the driving force behind going full on Elixir, and I am ready to take to full blame for everything that goes wrong in our apps. But I am feeling pretty good - most of our problems come from server issues (except for one memory leak we could not pin down yet…)</p>
<p>But here is the story.</p>
<p>We started with 100% Ruby on Rails, and I would say I went through all the states of love/hate with Rails. At first I really loved it. I did not know Ruby, I just knew a little bit of JavaScript, and Java (the stuff they taught in Uni) - but I still did not have a real idea how a web-app works.<br>
Along comes Rails… You just need to google what helpers to use, and stuff works!</p>
<p>But oh oh oh! Don’t try to do things that are not included in the “Rails and go yaaaaaaaaaa” package. After 3 years with Rails, and struggling with their lackluster real-time support (what we did back then was make a poll request to the server and return javascript that had to check if anything changed) I started working with a highschool friend of mine, and I was hoping for some insight into how to work the Web 2.0!</p>
<p>I had to learn EmberJS - which is kind of Rails for frontends, probably emerged a year or more after the first real frontend JS frameworks became popular. And I ran into the same problem… “but what if I want to do something not in your text-book, that seems to be written in Web 1.0 times?”<br>
And additionally, we had to maintain the Rails API server (written before <code>rails_api</code> was a thing, so we had to manually remove gems), and the EmberJS frontend.</p>
<p>My predecessor started fooling around with Elixir early on, and we had one actually very important app running on Phoenix pre 1.0 and Elixir (beta version?)</p>
<p>At first I hated Elixir… I did not understand how to use it, given my Ruby on Rails background, and basically used to things just happening magically.<br>
And then I had to actually use Elixir. And I realized that everything was so much more explicit.<br>
Want to know where something comes from? Do a project wide search for <code>something</code> and you see everything where it’s passed down to the view etc., instead of being some magic shoot you can never find if you don’t know how Rails works.</p>
<p>But the real kicker for me was when Phoenix made the switch from the MVC style to Domain Driven Design. I read the blog post (help me out here, probably by Chris McCord?) about how DDD works in Phoenix and I immediately thought “this is so much better than RoR!” I went throught the redesign for Phoenix with Elixir, and I am just in love with the barebone design of the language. But it also has all those web development packages, that follow the same design principle: as barebone as possible, if you want more, add dependencies.</p>
<p>I have updated Ruby, React, Ember, and Elixir server for years now, and I have to say Elixir is the easiest to update (except for the one error we run into every now and then with hackney! why tf does it actually prevent me from ignoring ssl for crappy APIs.)</p>
<p>So, for me personally the context focused Phoenix structure was the reason why I wanted to use Elixir more. But I can also attest for the performance and reliability.<br>
We had a Elixir/Phoenix server running for almost 4 years before I first looked into it - and the reason I did was Heroku updating stuff, and we moved it to a cloud server. Almost no problems, super easy with edeliver (once you understand how it works, admittedly.) And another server I updated w/o understanding Elixir yet, also on a version that was probably still alpha, maybe beta. Updated the server and app, and all the errors were very descriptive and easy to understand. I would honestly say the hardest update in Elixir happened just recently, and it’s just because of hackney!</p>
<p>Another reason why to use Elixir: we recently had a few spikes from a customer who wanted to do a bulk interaction. A few thousand requests/minute + usual traffic. I saw the spike on the server, but no problems other than the database server sometimes crapping out.</p>
<p>PROs:</p>
<ul>
<li>Lightweight stlib, once you know Elixir you know it (unlike Ruby, where they add aliases for methods every 3 monts)</li>
<li>Once it is deployed, it will just run… and run… and run…</li>
<li>Phoenix is a great web dev framework for intermediate developers</li>
<li>NEW The language is still quite new, so sometimes you can implement packages for everyone. I have a package a few people use, and it feels very good to be part of the community.</li>
<li>EXPLICIT Elixir/Phoenix values explicity over implicity, so unless you screw up, you always know what is going on.</li>
</ul>
<p>CONs:</p>
<ul>
<li>first deploy can be a pain the A**</li>
<li>erlang is slow to install, and the community seems to be stuck in the 90s when you look at their docs</li>
<li>NEW the language is still quite new - opens opportunities, but means you will have to implement stuff yourself where other languages have packages ready.</li>
<li>EXPLICIT There is more code to type, more data to pass, and most things don’t just work magically.</li>
</ul>
<p>I put 2 things in caps, because I think they can be a blessing or a curse, depending on how you look at it…</p>
<p>Overall Elixir, Phoenix, and especially PhoenixLiveView have changed the way how I do my poopy web apps, and gave me the feeling of finally having “one app” that does almost everything, instead of a bunch of “micro services” in Ruby/PHP/Python and a separate client.</p>
<p>Also, we developed an app in ReactNative - guess how hard it was to establish a websocket connection to the server from react native. Right, ridiculously easy.</p>
<p>So, why Elixir?</p>
<ol>
<li>I just love <a class="mention" href="/u/chrismccord" rel="nofollow">@chrismccord</a> for Phoenix (great name, great technology!) and of course <a class="mention" href="/u/josevalim" rel="nofollow">@josevalim</a> for developing Elixir and still being active in the community!</li>
<li>Because for me it is a modern take on an old, battle tested technology. Erlang syntax is a crime against humanity IMO - so thank you again Jose to make the technology actually usable.</li>
<li>Phoenix LiveView - we have been using it in production since alpha, because I just wanted to use it! Every update is an improvement, and usually once we see bugs, they already fixed it in the next version. I forgot who the guy for the Javascript was, but if you tell me his elixiforum name, I will include him here, because that s**t is just incredibly cool.</li>
<li>You can easily use Elixir w/o Phoenix or anything, and it’s still incredibly good in spawning lightweight processes all over the place (the orchestrator)</li>
<li>honestly, I am just attached to this programming language/community now. And as long as I am in charge, we will keep using it! Keep up the great work!</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="199752" data-batch-url="/posts/batch_likers">
                        16
                      </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/on-why-elixir/34038/64">Post #63</a>
	                </div>
	            </div>
              <div id="likers-container-199752" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="199752"
                     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 #63"></div>
  </section>
</div>
    <div class="postbit" id="199756" data-post-id="199756">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Ninigi" data-post="64" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ninigi/48/8006_2.png" class="avatar"> Ninigi:</div>
<blockquote>
<p>Erlang syntax is a crime against humanity IMO</p>
</blockquote>
</aside>
<p>As someone who tries to implement the TreeSitter for Elixir, I beg to differ <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"> It is more pleasant to some eyes, but on the technical side Elixir syntax is enormous PITA (no offence <a class="mention" href="/u/josevalim" rel="nofollow">@josevalim</a>, just writing alternative parser isn’t the easiest job).</p>
<aside class="quote no-group" data-username="Ninigi" data-post="64" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ninigi/48/8006_2.png" class="avatar"> Ninigi:</div>
<blockquote>
<p>first deploy can be a pain the A**</p>
</blockquote>
</aside>
<p>I think that it depends on your background. C#/Java developers will feel mostly there, but Ruby/Python developers can get lost due to completely different approach.</p>
<aside class="quote no-group" data-username="Ninigi" data-post="64" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ninigi/48/8006_2.png" class="avatar"> Ninigi:</div>
<blockquote>
<p>community seems to be stuck in the 90s when you look at their docs</p>
</blockquote>
</aside>
<p>The first look can be terrifying, but when you get past the aesthetics then it is one of the best documentations I have pleasure to work with. However the default documentation generator in the OTP (which seems to not be used for OTP docs, don’t ask me why) should be burned to the ground. Hopefully EEP48 adoption may change that one day.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="199756" 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/on-why-elixir/34038/65">Post #64</a>
	                </div>
	            </div>
              <div id="likers-container-199756" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="199756"
                     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 #64"></div>
  </section>
</div>
    <div class="postbit" id="199790" data-post-id="199790">
  <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">
								<p>Elixir is my favourite language but it took me time to make the switch from my previoulsy favourite language, Erlang, because of the rubyesque syntax ; notably optional parentheses and the <code>dot_call.()</code> nonsense.</p>
<p>Then I understood the tradeoffs that were made, the beauty of the macro system, and that syntax should not matter in the end as it is just a way to express an AST.</p>
<p>I still think it is kind of ugly but I could not care less <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>
<p>I was in the process of learning Docker, as we use that in my company, when I had to deploy my first Elixir app, and I found it was really easy. It is not distributed though.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="199790" 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/on-why-elixir/34038/66">Post #65</a>
	                </div>
	            </div>
              <div id="likers-container-199790" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="199790"
                     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 #65"></div>
  </section>
</div>
    <div class="postbit" id="200002" data-post-id="200002">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I love that this thread is still going on <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>I think “crime against humanity” in terms of Erlang syntax is a little harsh.  So I’ve never actually written anything in Erlang but I’ve looked at a lot of code in my quest to grok Elixir.  I actually think some things are nicer in Erlang—function definition comes to mind.  I also prefer the explicit function exporting—<code>defp</code> doesn’t standout quite so well for me… I should probably change the syntax highlighting.</p>
<p>I’m back from a 2.5 month break from learning Elixir.  I was able to take a lot of my learnings and apply them to our messy functional frontend React code at work.  I was starting to make my peace with React but got stuck on some refactorings, so I came back to Elixir for some inspiration.  I’m now back to being bitter than I’m forced to work in React every day.  Ah well.  That’ll change some day, I’m sure—I just like the company I work for too much right now to make a change.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="200002" 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/on-why-elixir/34038/67">Post #66</a>
	                </div>
	            </div>
              <div id="likers-container-200002" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="200002"
                     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 #66"></div>
  </section>
</div>
    <div class="postbit" id="200006" data-post-id="200006">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sodapopcan" data-post="67" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sodapopcan/48/34668_2.png" class="avatar"> sodapopcan:</div>
<blockquote>
<p>I think “crime against humanity” in terms of Erlang syntax is a little harsh.</p>
</blockquote>
</aside>
<p>I agree - I think maybe we should ban all criticism about the Erlang syntax until people have read Programming Erlang <img src="https://forum.elixirforum.com/uploads/default/original/2X/3/35766b1a01a84df440f412d59b52c782808258f0.gif?v=15" title=":043:" class="emoji emoji-custom" alt=":043:" loading="lazy" width="20" height="20"></p>
<p>Seriously tho, <a href="https://forum.devtalk.com/t/would-you-use-erlang-now-when-there-is-elixir/2150" rel="nofollow">a lot of people,</a> myself included, have grown to appreciate the Erlang syntax - although I am going to reserve full judgement (about which I prefer) until I’ve finished the book (a few of us have a <a href="https://forum.devtalk.com/t/programming-erlang-book-club/3243" rel="nofollow">Programming Erlang book club</a> going on Devtalk if anyone is interested in joining us).</p>
<p>Generally I am of the opinion that it just boils down to preference. For me at least the important thing is that  people are using a BEAM language, whether that’s Elixir, Erlang, Gleam, LFE or any of the many that we have now - so long as people are happy with their choice that’s all that really matters <img src="https://forum.elixirforum.com/images/emoji/apple/blush.png?v=15" title=":blush:" class="emoji" alt=":blush:" 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="200006" 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/on-why-elixir/34038/68">Post #67</a>
	                </div>
	            </div>
              <div id="likers-container-200006" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="200006"
                     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 #67"></div>
  </section>
</div>
    <div class="postbit" id="200038" data-post-id="200038">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sodapopcan" data-post="67" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sodapopcan/48/34668_2.png" class="avatar"> sodapopcan:</div>
<blockquote>
<p>I also prefer the explicit function exporting—<code>defp</code> doesn’t standout quite so well for me…</p>
</blockquote>
</aside>
<p>From the perspective of time I came to similar conclusion. Either explicit export list as it is in Erlang or swap the meaning of <code>def</code> and <code>defp</code>, so “by default” all functions will be private and exported more explicitly.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="200038" 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/on-why-elixir/34038/69">Post #68</a>
	                </div>
	            </div>
              <div id="likers-container-200038" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="200038"
                     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 #68"></div>
  </section>
</div>
    <div class="postbit" id="200048" data-post-id="200048">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I don’t know much about Erlang syntax and I’ve just glanced Erlang code. One thing I would say, is that my gut feeling is that for lot people it’s much simpler to jump into Elixir from a mainstream language than it would be to Erlang just because it looks more alien compared to them. Also like to add that difference is not just about syntax and I understanding that one of the biggest differences is that Elixir has powerful macro system that Erlang currently doesn’t have.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="200048" 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/on-why-elixir/34038/70">Post #69</a>
	                </div>
	            </div>
              <div id="likers-container-200048" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="200048"
                     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 #69"></div>
  </section>
</div>
    <div class="postbit" id="200049" data-post-id="200049">
  <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>Yep. IMO the Elixir macro system made certain things possible that weren’t before.</p>
<p>As for syntax, I quite like Rust’s way, it’s explicit, concise and easy to grep at the same time:</p>
<pre data-code-wrap="rust"><code class="lang-rust">fn a1() {} // private
pub fn a2() {} // public for everyone
pub(crate) fn a3() {} // only public in the project it's defined in
</code></pre>
<p>But I agree Erlang forces you to be explicit and that’s a good thing. I would find it annoying during iteration and prototyping however.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="200049" 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/on-why-elixir/34038/71">Post #70</a>
	                </div>
	            </div>
              <div id="likers-container-200049" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="200049"
                     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 #70"></div>
  </section>
</div>
    <div class="postbit" id="200081" data-post-id="200081">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Ya, that’d be much nicer, actually.  That’s kind of like es6 or other languages that have an <code>export</code> keyword.  But at the end of the day, I don’t really get too hung up on syntax, unless it’s particularly horrible, and there is nothing I find <em>horrible</em> about Elixir syntax.</p>
<p><a class="mention" href="/u/wanton7" rel="nofollow">@wanton7</a> At least as it pertains to me it’s was way easier for me to jump into Elixir than Erlang.  I remember looking at Erlang many years ago and just thinking, “nope”, though I wasn’t as open minded back then.  But once you learn Elixir, Erlang code starts to make a lot of sense.  And yes, macros are a <em>huge</em> factor in making Elixir more digestible, at least to those of us used to more “modern” syntax.  If you see some of the Erlang equivalents  to certain patterns, Elixir is removing a <em>lot</em> of boilerplate with macros.</p>
<p>One last note on syntax, the one thing that really annoyed me when getting started with Elixir was actually how much it looked like Ruby.  As a Rubyist, I kept thinking I was in Ruby and kept thinking modules were classes and had to keep reminding myself I was not writing Ruby.  At this point I don’t even think about it, though.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="200081" 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/on-why-elixir/34038/72">Post #71</a>
	                </div>
	            </div>
              <div id="likers-container-200081" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="200081"
                     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 #71"></div>
  </section>
</div>
    <div class="postbit" id="200082" data-post-id="200082">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="wanton7" data-post="70" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/wanton7/48/14151_2.png" class="avatar"> wanton7:</div>
<blockquote>
<p>Elixir has powerful macro system that Erlang currently doesn’t have</p>
</blockquote>
</aside>
<p>Erlang had parse transforms which can provide similarly powerful features, just usage of them is much harder and less obvious. Also implementation of these is much more complex than Elixir macros.</p>
<aside class="quote no-group" data-username="sodapopcan" data-post="72" data-topic="34038">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sodapopcan/48/34668_2.png" class="avatar"> sodapopcan:</div>
<blockquote>
<p>I don’t really get too hung up on syntax</p>
</blockquote>
</aside>
<p>In this case it is not about syntax, but about semantics. Public functions in Elixir cannot be inlined and can slow down your code. Additionally exposing functions, that are meant for internal usage, in public API can sometimes cause maintainability problems, when people will keep assuming existence of such functions. Of course you can say that people shouldn’t use that functions, but making something impossible is better than making it discouraged.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="200082" 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/on-why-elixir/34038/73">Post #72</a>
	                </div>
	            </div>
              <div id="likers-container-200082" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="200082"
                     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 #72"></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/34038/load_more?page=8">Load more posts (24 remaining)</a>
</div></template></turbo-stream>