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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="keithn" data-post="40" data-topic="670" 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/keithn/48/1753_2.png" class="avatar"> keithn:</div>
<blockquote>
<p>While I quite liked Elixir/BEAM, I’ve actually gone with F#.    It’s a statically typed functional language, supports lightweight processes, reasonably simple to use Actor model via orleans, there’s lots of tooling, and can leverage a  large amount of libraries which allows integration with lots of things in a mostly effortless way.   MS is pushing everything open source and cross platform as well.</p>
<p>Elixirs advantage is not really that it has BEAM / LWP / Actors etc…  it’s that most everything gets built with that model in mind. Which is nice,  F# doesn’t have that as it’s a smaller player in a larger ecosystem, so most things don’t explicitly take advantage of F#s capabilities/philosophy.</p>
<p>When it comes to actual coding… you can write in a very similar style in both, the main thing I like is the static typing in F#, which despite all the arguments for not having it in Elixir, it still helps eliminate errors.</p>
</blockquote>
</aside>
<p>This is why I really want an OCaml back-end to Elixir, entirely possible, just needs to get done.  <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>For note, F# was based on OCaml, most code that works in F# works in OCaml almost unaltered (except for the accessing of .NET specific oddities).  So if you like F#…  <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>
<p>Also, can’t F#'s Agents crash everything by calling the wrong thing?  That is a .NET limitation, it does not have the hard guarantees of something like the BEAM, regardless of the language or libraries used…</p>
<aside class="quote no-group" data-username="Onor.io" data-post="39" data-topic="670">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/onor.io/48/960_2.png" class="avatar"> Onor.io:</div>
<blockquote>
<p>In fairness (and yes I am splitting a hair here), F# is both more and less than OCaml on the .Net platform.  F# adds Active Patterns (there’s no such thing in OCaml as far as I know).  F# has modules like OCaml but the focus is more on namespaces which is in keeping with other .Net languages.</p>
</blockquote>
</aside>
<p>Two things, F# does not have modules like OCaml, that is one of the big things it is missing, it has most of the abilities, but not all, last I saw anyway.  Also based on <a href="https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns" class="inline-onebox" rel="noopener nofollow ugc">Active Patterns - F# | Microsoft Learn</a> for Active Patterns, can’t you just do that with a single function call between the <code>match</code> and <code>input</code>?  What does this gain other than magically coercing types (which OCaml abhors as it harms readability)?</p>
<p>But yes, I badly badly want some for of typed Elixir, and an OCaml backend to Elixir would be wonderful!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="13699" 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/elixir-vs-c/670/42">Post #41</a>
	                </div>
	            </div>
              <div id="likers-container-13699" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13699"
                     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 #41"></div>
  </section>
</div>
    <div class="postbit" id="13700" data-post-id="13700">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>One benefit Elixir/Beam model over .Net is that each process has it own garbage collection and each process is isolated. If you want to get something similar in .Net you need to put application in containers.</p>
<p>I there is also Akka .Net  <a href="https://github.com/akka/akka-meta/blob/master/ComparisonWithOrleans.md" rel="noopener nofollow ugc">Orleans and Akka Actors: A Comparison</a></p>
<p>Also you can use <a href="http://reactivex.io/" rel="noopener nofollow ugc">http://reactivex.io/</a> with .Net platform.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="13700" 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/elixir-vs-c/670/43">Post #42</a>
	                </div>
	            </div>
              <div id="likers-container-13700" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13700"
                     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 #42"></div>
  </section>
</div>
    <div class="postbit" id="13701" data-post-id="13701">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Akka (and <a href="http://Akka.net" rel="noopener nofollow ugc">Akka.net</a>, I’ve messed with both) are fantastically designed, I would use them in a heartbeat if I had to use the JVM (or .NET) system(s), but they still entirely lack the guarantees that the BEAM has.  And yes, the per-actor GC is absolutely wonderful!  Most of the time the GC is never touched, the process is spawned, does some work, then everything is freed all at once without needing to worry about expensive GC Sweeps that both the JVM and .NET absolute have to incur just due to their OOP’ishly internal design.  ^.^</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="13701" 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/elixir-vs-c/670/44">Post #43</a>
	                </div>
	            </div>
              <div id="likers-container-13701" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13701"
                     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 #43"></div>
  </section>
</div>
    <div class="postbit" id="13703" data-post-id="13703">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>First…Thanks for replying. Seriously. It’s been a long day. <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group quote-modified" data-username="keithn" data-post="41" data-topic="670">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/keithn/48/1753_2.png" class="avatar"> keithn:</div>
<blockquote>
<p>You may be interested to revisit .NET via F#,  it has agents…</p>
<p>…</p>
<p>about how to easily get genserver type functionality</p>
<p>…</p>
<p>then on top of that there is</p>
</blockquote>
</aside>
<p>Second, I quote these partial fragments specifically because my point in coming to Erlang (with Elixir as a surprising and wonderful added bonus)  is that concurrency is not something “added on”. It is designed this way at its very core, with every facet oriented to it. From the GC and isolation that <a class="mention" href="/u/mkunikow" rel="nofollow">@mkunikow</a> mentioned to immutability to supervisors/OTP and processes, it has evolved organically to handle nodes (whatever they may be) operating in parallel from its very inception.</p>
<p>And with ibGib, I needed a <strong>completely</strong> concurrent system. And unlike many here (and elsewhere in the FP world), I really <img src="https://forum.elixirforum.com/images/emoji/apple/heart.png?v=15" title=":heart:" class="emoji" alt=":heart:" loading="lazy" width="20" height="20"> OOP. I can still remember reading my first book on OOP about polymorphism, inheritance, data hiding, encapsulation and thinking “Wow, this is incredible” (I had only done some C, Basic, and assembly at the time.). Honestly I don’t get that feeling with FP alone (older now hah!). But Erlang/Elixir + OTP was <strong>exactly</strong> what I was looking for with ibgib. It was so natural to code the engine in it, and I feel blessed that I found this ecosystem (and community). But I digress…my point is that to me the BEAM isn’t about the “actor model” or FP or any other individual patterns or aspects built on top of something to be concurrent - it just <strong>is</strong> concurrent.</p>
<p><em>getting off soapbox</em> <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"> Like I said, it’s been a long 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="13703" 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/elixir-vs-c/670/45">Post #44</a>
	                </div>
	            </div>
              <div id="likers-container-13703" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13703"
                     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 #44"></div>
  </section>
</div>
    <div class="postbit" id="13705" data-post-id="13705">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>F# certainly does have Modules.  I am replying from my phone or I  would look up links.</p>
<p>Active patterns seem like just a little more than syntactic sugar to  me but I will confess my F# is rusty.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="13705" 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/elixir-vs-c/670/46">Post #45</a>
	                </div>
	            </div>
              <div id="likers-container-13705" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13705"
                     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 #45"></div>
  </section>
</div>
    <div class="postbit" id="13716" data-post-id="13716">
  <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="ibgib" data-post="45" data-topic="670">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ibgib/48/2176_2.png" class="avatar"> ibgib:</div>
<blockquote>
<p>I quote these partial fragments specifically because my point in coming to Erlang (with Elixir as a surprising and wonderful added bonus)  is that concurrency is not something “added on”.</p>
</blockquote>
</aside>
<p>While I think being concurrent throughout is important, most environments are fine with concurrency being tackled on top. Sometimes it may force you to stick with one subset of the ecosystem, for example, different Actor or Concurrent processing libraries have their own schedulers which won’t play along, but that’s a minor detail.</p>
<p>What is really important to have to have throughout is fault-tolerance. If you have a single entity that does not play along, that’s going to be the weakest link. Similar happens to preemptiveness (is that a word?) and how it is used to achieve predictable latency. If a library you bring in isn’t preemptive, it may starve the rest of your code.</p>
<p>So what’s really exciting about the BEAM is that it was designed with those use cases in mind and I believe it is still the only runtime running widely in production that provides those guarantees from top to bottom.</p>
<p>I would also like to echo that there is a lot of interesting research and applications happening in .NET, on both C# and F#, and we have been exploring those for a while. Task.async/await naming came from .NET, Ecto borrows from LINQ and there are still other features I am envy about (I can’t recall all of them now but at least discriminated unions come to mind). There is a lot to learn from projects such as Orleans and Naiad.</p>
<p>Also, they have the best names. Whoever decided to call the active pattern syntax <code>(|foo|)</code> as “banana clips” is a genius.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="13716" data-batch-url="/posts/batch_likers">
                        4
                      </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/elixir-vs-c/670/47">Post #46</a>
	                </div>
	            </div>
              <div id="likers-container-13716" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13716"
                     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 #46"></div>
  </section>
</div>
    <div class="postbit" id="13717" data-post-id="13717">
  <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 quote-modified" data-username="OvermindDL1" data-post="42" data-topic="670">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/overminddl1/48/2677_2.png" class="avatar"> OvermindDL1:</div>
<blockquote>
<p>Also based on <a href="https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/active-patterns" class="inline-onebox" rel="nofollow">Active Patterns - F# | Microsoft Learn</a> for Active Patterns, can’t you just do that with a single function call between the match and input?</p>
</blockquote>
</aside>
<p>Yes. That’s why I decided to not add active patterns to Elixir or something similar. It is more explicit to extract the value before and keep the idea of “purity” in matches/guards. Plus the common cases can be addressed with macros (and the upcoming <code>defguard</code> will make it a bit easier).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="13717" 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/elixir-vs-c/670/48">Post #47</a>
	                </div>
	            </div>
              <div id="likers-container-13717" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13717"
                     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 #47"></div>
  </section>
</div>
    <div class="postbit" id="13734" data-post-id="13734">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ibgib" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ibgib/120/2176_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ibgib
                  </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="47" data-topic="670">
<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>While I think being concurrent throughout is important, most environments are fine with concurrency being tackled on top. Sometimes it may force you to stick with one subset of the ecosystem, for example, different Actor or Concurrent processing libraries have their own schedulers which won’t play along, but that’s a minor detail.</p>
</blockquote>
</aside>
<p>Yes, I’ve been in that world for sure. Most recently, this was with trying to embed rxjs, bacon.js, and the like, throughout a javascript application (actually I started with Rx in C#). Also in C#, but the subset was our own homegrown frameworks across all layers: business layer with built-in, poor man’s BEAM-like distributed and asynchronous bus system, event sourcing, parallel async “microservices” (I used the term “autonomous services” because I started it <strong>before</strong> the term microservice became a buzzword) with multiple adapters starting with <code>AppDomain</code> (which is <em>kind of</em> like an Erlang process inside of an OS process), and more. I came to Erlang/Elixir after researching other paths such as Clojure, Go, and others.</p>
<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="47" data-topic="670">
<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>What is really important to have to have throughout is fault-tolerance.</p>
</blockquote>
</aside>
<p>Yes, and I see this as another side of the concurrency coin. When I say that “concurrency throughout” is important, I mean that in addition to “computational execution parallelism”, the concurrent code and execution of code marries with the rest of the architecture well. <em>I’m probably just wording this poorly.</em></p>
<p>Perhaps one could argue that FP in general covers this largely with immutability, but I personally had a problem understanding how other FP languages handled state at the application level. I’m sure there are elegant ways to express it in other languages, but IMO OTP handles this beautifully with processes (and specifically GenServers) + Supervision trees. I would have to go into how ibGib is designed for why this is the case, but this is why I get so excited when talking about concurrency, parallelism, etc. in the BEAM! <img src="https://forum.elixirforum.com/images/emoji/apple/laughing.png?v=15" title=":laughing:" class="emoji" alt=":laughing:" loading="lazy" width="20" height="20"></p>
<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="47" data-topic="670">
<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>So what’s really exciting about the BEAM is that it was designed with those use cases in mind and I believe it is still the only runtime running widely in production that provides those guarantees from top to bottom.</p>
</blockquote>
</aside>
<p>Absolutely! A wonderful way to put it. <img src="https://forum.elixirforum.com/images/emoji/apple/thumbsup.png?v=15" title=":thumbsup:" class="emoji" alt=":thumbsup:" loading="lazy" width="20" height="20"></p>
<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="47" data-topic="670">
<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>I would also like to echo that there is a lot of interesting research and applications happening in .NET, on both C# and F#, and we have been exploring those for a while. Task.async/await naming came from .NET, Ecto borrows from LINQ and there are still other features I am envy about (I can’t recall all of them now but at least discriminated unions come to mind). There is a lot to learn from projects such as Orleans and Naiad.</p>
</blockquote>
</aside>
<p>Yeah, I realized after posting that I didn’t espouse the benefits of .NET and F# enough in my reply - it was a long Monday with too much caffeine <img src="https://forum.elixirforum.com/images/emoji/apple/coffee.png?v=15" title=":coffee:" class="emoji" alt=":coffee:" loading="lazy" width="20" height="20">. <em>I apologize if I offended.</em></p>
<p>I certainly <img src="https://forum.elixirforum.com/images/emoji/apple/heart.png?v=15" title=":heart:" class="emoji" alt=":heart:" loading="lazy" width="20" height="20"> C#, F#, and the .NET community as whole. I’ve been in that world a long time and I appreciate everything about it! Since I started seriously programming with Delphi 5, C# was an eye opener for me. This is because Anders Hejlsberg was the lead architect in both (and now TypeScript), and going to C# was almost just like going to a new and improved version of Delphi with memory management (GC), namespaces, and more. Then generics came and I was blown away. Then LINQ and I was like <img src="https://forum.elixirforum.com/uploads/default/original/2X/5/5d992e81a0fb5b792714a9c777e18e9dab623d41.gif?v=15" title=":103:" class="emoji emoji-custom" alt=":103:" loading="lazy" width="20" height="20"> Wow! Consequently, I took to Ecto’s syntax like a duck to water. <img src="https://forum.elixirforum.com/images/emoji/apple/ocean.png?v=15" title=":ocean:" class="emoji" alt=":ocean:" loading="lazy" width="20" height="20"> Anyway, now I’m an old man reminiscing…I definitely need to continue to keep my eye on F#, now that I’ve been immersed more in the FP world.</p>
<p>I’m just <em>really</em> enjoying the luxuries of Elixir on the BEAM for ibGib, so I get carried away sometimes! <img src="https://forum.elixirforum.com/images/emoji/apple/smile.png?v=15" title=":smile:" class="emoji" alt=":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="13734" 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/elixir-vs-c/670/49">Post #48</a>
	                </div>
	            </div>
              <div id="likers-container-13734" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13734"
                     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 #48"></div>
  </section>
</div>
    <div class="postbit" id="13752" data-post-id="13752">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Onor.io" data-post="46" data-topic="670">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/onor.io/48/960_2.png" class="avatar"> Onor.io:</div>
<blockquote>
<p>F# certainly does have Modules.  I am replying from my phone or I  would look up links.</p>
</blockquote>
</aside>
<p>It does have modules yep, but it does not have Functors (unless that’s changed recently), which is basically a module with arguments that can generate new modules based on arguments.</p>
<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="47" data-topic="670">
<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>Ecto borrows from LINQ</p>
</blockquote>
</aside>
<p>It looks like it borrows from SQL to me?  o.O</p>
<aside class="quote group-livebook_core_team" data-username="josevalim" data-post="48" data-topic="670">
<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>Yes. That’s why I decided to not add active patterns to Elixir or something similar. It is more explicit to extract the value before and keep the idea of “purity” in matches/guards. Plus the common cases can be addressed with macros (and the upcoming defguard will make it a bit easier).</p>
</blockquote>
</aside>
<p>Hear hear, I am highly antithetical to the hiding that things like that pattern seem to be doing (I so very much hate auto-converting types, it should always be explicit).</p>
<p>Also, <code>defguard</code>?  Ooo?  <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>
<aside class="quote no-group" data-username="ibgib" data-post="49" data-topic="670">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/ibgib/48/2176_2.png" class="avatar"> ibgib:</div>
<blockquote>
<p>Then generics came and I was blown away</p>
</blockquote>
</aside>
<p>I’m curious, what is special about C# generics?  They seem <em>extremely</em> limiting compare to what I’m used to in other languages (C++, Scala, OCaml (Functors especially), even lacking features compared to Rusts’s limited form of Generics)?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="13752" 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/elixir-vs-c/670/50">Post #49</a>
	                </div>
	            </div>
              <div id="likers-container-13752" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13752"
                     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 #49"></div>
  </section>
</div>
    <div class="postbit" id="13759" data-post-id="13759">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I didn’t say that F# has the same implementation of Modules as OCaml does.<br>
I said F# has Modules.  It used to be a pretty common question among people<br>
new to F#–why were there both Modules and Namespaces–and the simple<br>
answer was that Modules were preserved to maintain compatibility with OCaml<br>
at first.  Once the feature was in the language (crippled though it was<br>
from an OCaml perspective) it couldn’t be removed.  But they are<br>
present–just not in the same form as they are in OCaml.  So I think you<br>
and I are talking about “present” in two different senses.</p>
<p>Perhaps you can enlighten me about why parameterized modules (and Functors)<br>
are such a killer feature in Ocaml?  I have to confess that like Haskell’s<br>
Turing Complete Type System I never quite understood why it was such an<br>
advantage to have. I know there were a few other folks who crossed the gap<br>
from OCaml to F# who also missed parameterized modules but I could never<br>
quite figure out what sort of code parameterized modules would enable one<br>
to create and why their lack in F# was such a pain point for those folks<br>
who’d used OCaml before.</p>
<p>I can definitely see the influence of Linq on Ecto.</p>
<p>I have to confess I only worked with Active Patterns just enough to<br>
understand them. Like some features in other languages it seemed to me like<br>
a solution in search of a problem.  And as I get a few more miles under my<br>
tires I get a greater appreciation for that bit of wisdom that explicit is<br>
almost always better than implicit.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="13759" 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/elixir-vs-c/670/51">Post #50</a>
	                </div>
	            </div>
              <div id="likers-container-13759" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="13759"
                     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 #50"></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/670/load_more?page=6">Load more posts (5 remaining)</a>
</div></template></turbo-stream>