<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[The Mun programming language RSS Feed]]></title><description><![CDATA[Mun, a programming language empowering creation through iteration.]]></description><link>https://mun-lang.org</link><generator>GatsbyJS</generator><lastBuildDate>Wed, 10 Jan 2024 20:13:58 GMT</lastBuildDate><item><title><![CDATA[Release - Mun v0.4.0]]></title><description><![CDATA[Guess who’s back?!
The previous Mun release dates back over one and a half years.
Since then - slowly but steadily - we’ve been working…]]></description><link>https://mun-lang.org/blog/2022/12/12/release-mun-v0-4-0/</link><guid isPermaLink="false">https://mun-lang.org/blog/2022/12/12/release-mun-v0-4-0/</guid><pubDate>Mon, 12 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Guess who’s back?!
The previous &lt;a href=&quot;../../../../2021/04/11/release-mun-v0-3-0&quot;&gt;Mun release&lt;/a&gt; dates back over one and a half years.
Since then - slowly but steadily - we’ve been working towards Mun v0.4.0 and it’s finally here!
This &lt;em&gt;tick&lt;/em&gt;-release mainly focuses on language-support for dynamically-sized arrays, but we’ve also transitioned to a monorepo, added support for Apple’s M1 chips and experimental support for iOS, refactored major parts of our backend to support indirect types and recursion - as seen with arrays and pointers - and solved a range of bugs.&lt;/p&gt;
&lt;h4&gt;What’s Mun?&lt;/h4&gt;
&lt;p&gt;For those of you who haven’t heard of &lt;a href=&quot;https://mun-lang.org&quot;&gt;Mun&lt;/a&gt; before, Mun is an embeddable programming language empowering creation through iteration.
The idea to create Mun originated out of frustration with the Lua dynamic scripting language and a desire to have similar hot reloading functionality available in Rust.
As such, it’s not a direct competitor with Rust, but instead is intended to be used with Rust (or C/C++) as a host/embedded language pairing.
Actually, Mun is completely written in Rust, building on similar crates as &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer&quot;&gt;rust-analyzer&lt;/a&gt; and &lt;a href=&quot;https://github.com/rust-lang/rust&quot;&gt;rustc&lt;/a&gt;.
Its key features include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ahead of time compilation&lt;/strong&gt; - Mun is compiled ahead of time (AOT), as opposed to being
interpreted or compiled just in time (JIT).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Statically typed&lt;/strong&gt; - Mun resolves types at compilation time instead of at runtime, resulting in
immediate feedback when writing code and opening the door for powerful refactoring tools.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;First class hot-reloading&lt;/strong&gt; - Every aspect of Mun is designed with hot reloading in mind. Hot
reloading is the process of changing code and resources of a live application, removing the need
to start, stop and recompile an application whenever a function or value is changed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;What’s new?&lt;/h4&gt;
&lt;p&gt;Mun v0.4 does not only bring arrays to Mun, but it lays the groundwork for a plethora of language features that require indirect types and recursion.
These required a rewrite of Mun’s ABI, allocator, memory mapper, and garbage collector.&lt;/p&gt;
&lt;p&gt;But that’s not all!
In total, this release contains 111 pull requests made by 5 of our community contributors and our two Core Team members &amp;#x26; Dependabot.
Thanks for having our back!
For a full list have a look at the &lt;a href=&quot;https://github.com/mun-lang/mun/releases/tag/v0.4.0&quot;&gt;changelog&lt;/a&gt;, but the main improvements are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dynamically-sized arrays&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;generate&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; [&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;] {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  [&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;add_one&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(array: [&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;], len: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;usize&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) -&amp;gt; [&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;] {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; idx = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;loop&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        array[idx] += &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        idx += &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; idx &amp;gt;= len {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; array&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;add_one&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;generate&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(), &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;NOTE: Array functionality is still very basic as you cannot resize arrays (incl. pushing elements) at runtime. You can only get, set, and replace array elements. Future releases of Mun will extend this functionality.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Simplified function invocations from Rust&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; runtime_ref = runtime.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;borrow&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; arg: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; = runtime_ref.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&amp;quot;arg&amp;quot;, (a,b)).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Simplified struct API for Rust&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;2&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; builder = Runtime::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&amp;quot;mun/target/mod.munlib&amp;quot;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;insert_fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&amp;quot;rand_f32&amp;quot;, rand_f32 as &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;extern&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &amp;quot;C&amp;quot; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;f32&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; runtime = unsafe { builder.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;finish&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() }.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&amp;quot;Failed to load munlib&amp;quot;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; state: StructRef = runtime.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&amp;quot;new_state&amp;quot;, ()).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; state = state.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; pong = PongGame { runtime, state };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; state = pong.state.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;as_ref&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&amp;amp;pong.runtime);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Apple M1 &amp;#x26; experimental iOS support&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Upgrade to LLVM 13&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Support for runtime usage in entity component systems (ECS)&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;3&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; lib_dir = PathBuf::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(env::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;nth&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&amp;quot;Expected path to a Mun library.&amp;quot;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  App::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;add_plugins&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(MinimalPlugins)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;add_plugin&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(MunPlugin { lib_dir })&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;MunPlugin&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  lib_dir: PathBuf,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;impl Plugin for MunPlugin {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&amp;amp;self, app: &amp;amp;mut App) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      app.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;insert_resource&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;.lib_dir.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;clone&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;add_startup_system&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(setup.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;exclusive_system&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;())&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;add_system&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(reload_munlib_every_frame);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;setup&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(world: &amp;amp;mut World) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; builder = MunRuntime::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      world&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          .get_resource::&amp;lt;PathBuf&amp;gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&amp;quot;Lib path must be added as resource&amp;quot;),&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  );&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; mun: MunRuntime = unsafe { builder.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;finish&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() }.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&amp;quot;Failed to spawn Runtime&amp;quot;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  world.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;insert_non_send_resource&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(mun);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  world.remove_resource::&amp;lt;PathBuf&amp;gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;reload_munlib_every_frame&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  mut mun: NonSendMut&amp;lt;MunRuntime&amp;gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; _ = unsafe { mun.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Adopted monorepo for better developer experience&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decreased &lt;code&gt;unsafe&lt;/code&gt; code usage and simplified code&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Assorted bug fixes&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;What’s next?&lt;/h4&gt;
&lt;p&gt;Mun is still in early development, so there is a lot to do.
The Mun Core Team operates according to a tick-tock release cycle.
Development of a tock release (Mun v0.5) focuses on using and improving existing features, whereas a tick release (Mun v0.6) focuses on implementing new features.&lt;/p&gt;
&lt;p&gt;When planning Mun v0.4, we decided to limit our focus to adding support for arrays and optimising our Mun ABI format in the hopes of adhering to semiannual release schedule.
However, due to our limited availability, it still took us way longer than expected to release.
As such, we’re not giving an estimated release date for Mun v0.5 but we can say that it will introduce &lt;code&gt;impl&lt;/code&gt; blocks for functions and we’ll be upgrading to LLVM v16.0.
For a complete roadmap, please visit our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;GitHub milestones&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;How can I learn more?&lt;/h4&gt;
&lt;p&gt;To get started, read the &lt;a href=&quot;https://docs.mun-lang.org/v0.4&quot;&gt;Mun Book&lt;/a&gt; and have a look at our &lt;a href=&quot;https://github.com/mun-lang/mun/tree/release/v0.4/examples&quot;&gt;Rust and C++ examples&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you are interested in helping develop Mun feel free to reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;, or pick up one of our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22&quot;&gt;good first issues&lt;/a&gt; on &lt;a href=&quot;https://github.com/mun-lang/mun&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you cannot personally contribute but would still like to support our cause, please consider donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Acknowledgments&lt;/h4&gt;
&lt;p&gt;This release would not have been possible without the incredible contributions from the Mun Community. We are extremely grateful to all of you!&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk7 { color: #B5CEA8; }
  .dark-default-dark .mtk15 { color: #C586C0; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - May 2021]]></title><description><![CDATA[The core team has been working on new features for Mun v0.4.
The biggest feature will be dynamically sized arrays. Mun v0.4 Mun v0.4 will be…]]></description><link>https://mun-lang.org/blog/2021/06/08/this-month-may/</link><guid isPermaLink="false">https://mun-lang.org/blog/2021/06/08/this-month-may/</guid><pubDate>Tue, 08 Jun 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The core team has been working on new features for Mun v0.4.
The biggest feature will be dynamically sized arrays.&lt;/p&gt;
&lt;h4&gt;Mun v0.4&lt;/h4&gt;
&lt;p&gt;Mun v0.4 will be the next release of the Mun programming language.
This months contributions from the core team include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[RFC] dynamically sized arrays&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/324&quot;&gt;[PR#324]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The dynamically sized arrays RFC has been merged.
This indicates that the core team has reached a consensus on the the language design details.
Development of the feature is underway.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: derive clone for RootedStruct&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/323&quot;&gt;[PR#323]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Mun community pointed out that &lt;code&gt;RootedStruct&lt;/code&gt; could not be cloned from Rust code.
This has been resolved with this MR.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;bump: rust to 1.51.0 and 1.52.0&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/327&quot;&gt;[PR#327]&lt;/a&gt; &amp;#x26; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/325&quot;&gt;[PR#325]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The entire Mun codebase has been updated to support the latest lints from Rust 1.51 and 1.52&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interested in our progress or what we are doing next?
Please check out our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;milestone page&lt;/a&gt; on Github that details new features for future releases - Mun v0.4 and v0.5 - as well as a backlog of features that are still to come.&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;If you are interested in helping develop Mun - but are not sure where to start - feel free to take a look at our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issues&lt;/em&gt;&lt;/a&gt; or reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;. To support our cause, please consider donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - April 2021]]></title><description><![CDATA[After the release of Mun v0.3 we are now looking at new features for the Mun v0.4 release.
The biggest of which will be support for…]]></description><link>https://mun-lang.org/blog/2021/05/08/this-month-april/</link><guid isPermaLink="false">https://mun-lang.org/blog/2021/05/08/this-month-april/</guid><pubDate>Sat, 08 May 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After the &lt;a href=&quot;https://mun-lang.org/blog/2021/04/11/release-mun-v0-3-0/&quot;&gt;release of Mun v0.3&lt;/a&gt; we are now looking at new features for the Mun v0.4 release.
The biggest of which will be support for dynamically sized arrays.&lt;/p&gt;
&lt;h4&gt;Mun v0.3&lt;/h4&gt;
&lt;p&gt;This month was highlighted by the release of Mun v0.3.
We expected to release Mun v0.3 within a few months of Mun v0.2 but this was pushed back a couple of times because we added more and more features to the release.
Mun v0.3 adds support for modules &amp;#x26; multi-file projects, a functioning language server which features autocompletion and a lot more.
The &lt;a href=&quot;https://mun-lang.org/blog/2021/04/11/release-mun-v0-3-0/&quot;&gt;Mun v0.3 release blog&lt;/a&gt; highlights all of the new features packed in this release.&lt;/p&gt;
&lt;img src=&quot;/eb1d6329c838c16307055e5f2700be09/autocomplete.gif&quot; alt=&quot;Autocomplete working for Mun in VSCode &quot;&gt;
&lt;h4&gt;Mun v0.4&lt;/h4&gt;
&lt;p&gt;Mun v0.4 will be the next release of the Mun programming language.
After Mun v0.3’s delays, we concluded that from now on we will create smaller increments - with less features - so we are (hopefully) able to release faster and more often. As it stands the &lt;a href=&quot;https://github.com/mun-lang/mun/milestone/5&quot;&gt;Mun v0.4 milestone&lt;/a&gt; is a lot smaller than our original Mun v0.3 milestone.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;[RFC] dynamically sized arrays&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/324&quot;&gt;[PR#324]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The next big feature for Mun will be support for arrays.&lt;/p&gt;
&lt;p&gt;To gather feedback and get everyone on the same page we opened an RFC pull request where we encourage everyone to comment on our design choices with regards to array support.&lt;/p&gt;
&lt;p&gt;We hope to merge this RFC soon so we can get to work on the actual development process of this long-awaited feature.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interested in our progress or what we are doing next?
Please check out our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;milestone page&lt;/a&gt; on Github that details new features for future releases - Mun v0.4 and v0.5 - as well as a backlog of features that are still to come.&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;If you are interested in helping develop Mun - but are not sure where to start - feel free to take a look at our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issues&lt;/em&gt;&lt;/a&gt; or reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;. To support our cause, please consider donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[Release - Mun v0.3.0]]></title><description><![CDATA[It’s been almost eleven months since the previous major Mun release.
A lot has happened; in the world, in the Core Team members’ personal…]]></description><link>https://mun-lang.org/blog/2021/04/11/release-mun-v0-3-0/</link><guid isPermaLink="false">https://mun-lang.org/blog/2021/04/11/release-mun-v0-3-0/</guid><pubDate>Sun, 11 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s been almost eleven months since &lt;a href=&quot;../../../../2020/05/16/release-mun-v0-2-0/&quot;&gt;the previous major Mun release&lt;/a&gt;.
A lot has happened; in the world, in the Core Team members’ personal lives, and with Mun.
The ambitions that we set for Mun v0.3 were big - and the delays equally so - but we are excited to finally present &lt;a href=&quot;https://github.com/mun-lang/mun/releases/tag/v0.3.0&quot;&gt;Mun v0.3.0&lt;/a&gt;.
This &lt;em&gt;tock&lt;/em&gt;-release was focused on usability improvements; multi-file projects, a language server with diagnostics and autocompletion, and improvements to robustness and developer workflow to name a few.&lt;/p&gt;
&lt;h4&gt;What’s Mun?&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://mun-lang.org&quot;&gt;Mun&lt;/a&gt; is an embeddable programming language empowering creation through iteration.
The idea to create Mun originated out of frustration with the Lua dynamic scripting language and a desire to have similar hot reloading functionality available in Rust.
As such, it’s not a direct competitor with Rust, but instead is intended to be used with Rust (or C/C++) as a host/embedded language pairing.
Actually, Mun is completely written in Rust, building on similar crates as &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer&quot;&gt;rust-analyzer&lt;/a&gt; and &lt;a href=&quot;https://github.com/rust-lang/rust&quot;&gt;rustc&lt;/a&gt;.
Its key features include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ahead of time compilation&lt;/strong&gt; - Mun is compiled ahead of time (AOT), as opposed to being
interpreted or compiled just in time (JIT).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Statically typed&lt;/strong&gt; - Mun resolves types at compilation time instead of at runtime, resulting in
immediate feedback when writing code and opening the door for powerful refactoring tools.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;First class hot-reloading&lt;/strong&gt; - Every aspect of Mun is designed with hot reloading in mind. Hot
reloading is the process of changing code and resources of a live application, removing the need
to start, stop and recompile an application whenever a function or value is changed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;What’s new?&lt;/h4&gt;
&lt;p&gt;Mun v0.3 brings an &lt;em&gt;insane&lt;/em&gt; amount of updates.
When we say &lt;em&gt;insane&lt;/em&gt;, we mean &lt;em&gt;&lt;strong&gt;insane&lt;/strong&gt;&lt;/em&gt;!
In total, this release contains 52 pull requests from 7 of our community contributors and our two Core Team members.
For a full list have a look at the &lt;a href=&quot;https://github.com/mun-lang/mun/releases/tag/v0.3.0&quot;&gt;changelog&lt;/a&gt;, but the main improvements are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Type inferencing&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;integer&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i32&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// inferred as i32&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;large_unsigned_integer&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u128&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// inferred as u128&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;with_let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u16&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; b = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;    &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// inferred as u16&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;    &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// inferred as u16&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    a&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Modules &amp;#x26; multi-file projects&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// mod.mun&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; self::Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      Foo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::Foo  &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// undefined value&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;baz&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::Foo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// foo.mun&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::Foo  &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// mismatched type&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;baz&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; package::Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::Foo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;nested&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; self::Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::foo::Foo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Visibility &amp;#x26; &lt;code&gt;use&lt;/code&gt; keyword&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;2&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk3&quot;&gt;// /foo.mun&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Ok&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk3&quot;&gt;// /bar.mun&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::foo::Ok as ReallyOk;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Ok&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk3&quot;&gt;// /baz.mun&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::bar::ReallyOk;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Autocompletion in editors through &lt;a href=&quot;https://microsoft.github.io/language-server-protocol&quot;&gt;LSP&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;img src=&quot;/eb1d6329c838c16307055e5f2700be09/autocomplete.gif&quot; alt=&quot;Autocomplete working for Mun in VSCode &quot;&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Diagnostics in editors through &lt;a href=&quot;https://microsoft.github.io/language-server-protocol&quot;&gt;LSP&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;img src=&quot;/d0cbc05577d3538fa6fe39403b8a3cd9/languageserver.gif&quot; alt=&quot;Diagnostics in VSCode&quot;&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Type aliases&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;3&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u32&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a: Foo = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Better compile times, hot reload times, and runtime marshalling times&lt;/strong&gt;&lt;/p&gt;
&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 653px; &quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/7232a845981933a39314833866f1f63a/e7dce/struct-marshalling-perf.png&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 46.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABbklEQVQoz0WQXY7cIBCEfY1oaFjTgPm3B4zNMGOPoihStA+r3P80CRNt9lMJ9UtR3TVQhaB414SgOUi+3Dadgi/XnHOYw/PXz7VuOedSNucs5xwRUYi3cRwogS54vRdgQEta73td4rzmzIu/3DzzyhkbYlRTR0+TtVYIHMBKsKLLKxL6rNaAyZuW1RrlpFwMepqkkCgQkQMh8MlAgfZY+AwHejyOo93rXp/nuZy7//09nFvJpbU2z7O1xjkbY5RSDiBGkP3UfvPEqeTotVq8XNwo+AXfCGeEkMuLr1AASukA+DL/+0J1czmbz8tcy621VHJ7/3Fte933vdb5FSil0FpzzgdKad+cUsoYBWCM5ZRrrSld07bSbL4VA4pLFEopROxWIdQ0jZwPoLG3ZQQ4SbwEI8TVgZOYAianhVqX5JwzRmtjhBAA5Gtt+p/eHGWMPc/ncX9s2/a4P9xR7MdpW15TqrcaQ7AdE+f5b2F/AKGRVNVweGMZAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Performance improvements for Mun struct marshalling&quot; title=&quot;Performance improvements for Mun struct marshalling&quot; src=&quot;/static/7232a845981933a39314833866f1f63a/e7dce/struct-marshalling-perf.png&quot; srcset=&quot;/static/7232a845981933a39314833866f1f63a/3684f/struct-marshalling-perf.png 225w,
/static/7232a845981933a39314833866f1f63a/fc2a6/struct-marshalling-perf.png 450w,
/static/7232a845981933a39314833866f1f63a/e7dce/struct-marshalling-perf.png 653w&quot; sizes=&quot;(max-width: 653px) 100vw, 653px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decreased &lt;code&gt;unsafe&lt;/code&gt; code usage and simplified code&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Automatic testing of C/C++ bindings &amp;#x26; documentation&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Better developer tools&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Assorted bug fixes&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Make It or Break It&lt;/h4&gt;
&lt;p&gt;A new release also means the end of our first season of &lt;a href=&quot;https://github.com/mun-lang/mun/issues/220&quot;&gt;&lt;em&gt;Make It or Break It&lt;/em&gt;&lt;/a&gt;.
Our request for contenders, was answered by a lot of reporters filing bugs in the &lt;em&gt;Break It&lt;/em&gt; track, but we only had a single contributor in the &lt;em&gt;Make It&lt;/em&gt; track.
After some discussion, we decided to skip a poll and instead decide on the - to us - unanimous winner: &lt;strong&gt;this Spaceship game created by &lt;em&gt;legendiguess&lt;/em&gt; using Mun &amp;#x26; Rust&lt;/strong&gt;:&lt;/p&gt;
&lt;img src=&quot;/c6fcda54ef350cb2bdd7a9741f289c28/spaceship.gif&quot; alt=&quot;Spaceship game written with Mun and Rust&quot; width=&quot;100%&quot;&gt;
&lt;p&gt;Congratulations, your contribution will forever be remembered on our &lt;em&gt;Make It or Break It&lt;/em&gt; hall of fame!&lt;/p&gt;
&lt;h4&gt;What’s next?&lt;/h4&gt;
&lt;p&gt;Mun is still in early development, so there is a lot to do.
The Mun Core Team operates according to a tick-tock release cycle.
Development of a tock release (Mun v0.3) focuses on using and improving existing features, whereas a tick release (Mun v0.4) focuses on implementing new features.&lt;/p&gt;
&lt;p&gt;When planning Mun v0.3, we bit off more than we could chew, resulting in large delays.
To avoid the same pitfalls, we’re limiting the scope Mun v0.4.
In particular, we’ll focus on adding support for arrays and optimising our Mun ABI format.
For a complete roadmap, please visit our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;GitHub milestones&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;How can I learn more?&lt;/h4&gt;
&lt;p&gt;To get started, read the &lt;a href=&quot;https://docs.mun-lang.org/v0.3&quot;&gt;Mun Book&lt;/a&gt; and have a look at our &lt;a href=&quot;https://github.com/mun-lang/mun/tree/release/v0.3/crates/mun_runtime/examples&quot;&gt;Rust&lt;/a&gt; and &lt;a href=&quot;https://github.com/mun-lang/runtime-ffi/tree/release/v0.3/examples&quot;&gt;C++&lt;/a&gt; examples.&lt;/p&gt;
&lt;p&gt;If you are interested in helping develop Mun feel free to reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;, or pick up one of our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22&quot;&gt;good first issues&lt;/a&gt; on &lt;a href=&quot;https://github.com/mun-lang/mun&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you cannot personally contribute but would still like to support our cause, please consider donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Acknowledgments&lt;/h4&gt;
&lt;p&gt;This release would not have been possible without the incredible contributions from the Mun Community. We are extremely grateful to all of you!&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk7 { color: #B5CEA8; }
  .dark-default-dark .mtk3 { color: #6A9955; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - March 2021]]></title><description><![CDATA[All features are in, our CI pipeline has been primed, the countdown has started.
The Core Team is putting the final touches on documentation…]]></description><link>https://mun-lang.org/blog/2021/04/10/this-month-march/</link><guid isPermaLink="false">https://mun-lang.org/blog/2021/04/10/this-month-march/</guid><pubDate>Sat, 10 Apr 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;All features are in, our CI pipeline has been primed, the countdown has started.
The Core Team is putting the final touches on documentation for Mun v0.3, but otherwise we are ready for lift-off!&lt;/p&gt;
&lt;h4&gt;Mun v0.3 progress&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: runtime linking&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/300&quot;&gt;[PR#300]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adds the possibility to use multiple Mun files from a compiler and runtime perspective.&lt;/p&gt;
&lt;p&gt;When a new &lt;code&gt;*.munlib&lt;/code&gt; is being written to disk by the compiler, we create and delete a lockfile to trigger relinking.
As such, we no longer suffer from IO event delays in the runtime.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: remove delay from runtime&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/runtime-ffi/pull/11&quot;&gt;[PR#11]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: make type-specific data (such as StructInfo) part of TypeInfo&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/287&quot;&gt;[PR#287]&lt;/a&gt; &lt;a href=&quot;https://github.com/mun-lang/runtime-ffi/pull/10&quot;&gt;[PR#10]&lt;/a&gt; &lt;a href=&quot;https://github.com/mun-lang/abi-c/pull/9&quot;&gt;[PR#9]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Generates a typed enum for &lt;code&gt;TypeInfo&lt;/code&gt; in the C ABI, instead of unsafely appending additional data per &lt;code&gt;TypeInfo&lt;/code&gt; entry.&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;#[&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;derive&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(AsValue)]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;TypeInfo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; data: TypeInfoData,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;#[&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;derive&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(AsValue)]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;#[&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;repr&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u8&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;)]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; enum TypeInfoData {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Primitive,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;Struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(StructInfo),&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;bump(rust): bumps Rust to 1.50&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/310&quot;&gt;[PR#310]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat(ci): add Github CI workflow&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/runtime-ffi/pull/12&quot;&gt;[PR#12]&lt;/a&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/312&quot;&gt;[PR#312]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adds a CI workflow for building and testing our C/C++ Runtime bindings to GitHub.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat(lsp): support for completions&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/306&quot;&gt;[PR#306]&lt;/a&gt;&lt;/p&gt;
&lt;img src=&quot;/eb1d6329c838c16307055e5f2700be09/autocomplete.gif&quot; alt=&quot;Autocomplete working for Mun in VSCode &quot;&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: generate rust tests for code snippets in book&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/311&quot;&gt;[PR#311]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We now auto-generate Rust tests for all Mun code snippets in the Mun book during the build process, to always ensure that the book is up-to-date.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All desired changes for the Mun Compiler, Runtime, and Language Server have now been merged.
That means that we’ll be working hard to update our documentation before releasing Mun v0.3 in the coming days.
Can’t wait?
Please help us test the latest version of Mun by &lt;a href=&quot;https://github.com/mun-lang/mun#building-from-source&quot;&gt;building from source&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Interested in what we are doing next?
Please check out our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;high-level roadmap&lt;/a&gt; on Github that details new features for future releases - Mun v0.4, and v0.5 - as well as a backlog of features that are still to come.&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;If you are interested in helping develop Mun - but are not sure where to start - feel free to take a look at our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issues&lt;/em&gt;&lt;/a&gt; or reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;. To support our cause, please consider donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - February 2021]]></title><description><![CDATA[It’s been a long time coming, but the Core Team is closing in on the finish line for Mun v0.3.
We are only a couple of pull requests away…]]></description><link>https://mun-lang.org/blog/2021/03/04/this-month-february/</link><guid isPermaLink="false">https://mun-lang.org/blog/2021/03/04/this-month-february/</guid><pubDate>Thu, 04 Mar 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s been a long time coming, but the Core Team is closing in on the finish line for Mun v0.3.
We are only a couple of pull requests away from locking the build for bug fixes and documentation.
So start your engines!&lt;/p&gt;
&lt;h4&gt;Mun v0.3 progress&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feature: use statements language support&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/290&quot;&gt;[PR#290]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk3&quot;&gt;// /foo.mun&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Ok&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk3&quot;&gt;// /bar.mun&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::foo::Ok as ReallyOk;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Ok&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk3&quot;&gt;// /baz.mun&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::bar::ReallyOk;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feature(lsp): implements incremental file updates&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/298&quot;&gt;[PR#298]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Allows the language server to receive incremental file updates when text is being modified in an editor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;bump: Inkwell beta.2 and LLVM11&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/303&quot;&gt;[PR#303]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Updates our entire codebase to LLVM11, which contains our fix for LLD.
This will clear the way to build a fully statically linked version of Mun (except for libc) on Linux. (See &lt;a href=&quot;https://github.com/mun-lang/mun/issues/191&quot;&gt;issue#191&lt;/a&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix: parser performance issues&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/307&quot;&gt;[PR#307]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This improvements affects all operations, but in particular we noticed that it caused completions in a large file to go from 300ms to 3ms.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We have a couple more changes that we want to get in before we start preparing for the release of Mun v0.3.
In particular, runtime linking and one outstanding review on our language server.
After that we’ll start the process of testing our Rust &amp;#x26; C++ bindings, adding missing documentation and examples, and squashing bugs.
Can’t wait?
Please help us test the latest version of Mun by &lt;a href=&quot;https://github.com/mun-lang/mun#building-from-source&quot;&gt;building from source&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more details, please check out our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;high-level roadmap&lt;/a&gt; on Github that details new features for the upcoming three releases - Mun v0.3, v0.4, and v0.5 - as well as a backlog of features that are still to come.&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;If you are interested in helping develop Mun - but are not sure where to start - feel free to take a look at our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issues&lt;/em&gt;&lt;/a&gt; or reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;. To support our cause, please consider donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk3 { color: #6A9955; }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - January 2021]]></title><description><![CDATA[Revitalized from the holiday break, the core team got cracking, resulting in half a dozen completed pull requests and even more in review…]]></description><link>https://mun-lang.org/blog/2021/02/05/this-month-january/</link><guid isPermaLink="false">https://mun-lang.org/blog/2021/02/05/this-month-january/</guid><pubDate>Fri, 05 Feb 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Revitalized from the holiday break, the core team got cracking, resulting in half a dozen completed pull requests and even more in review. What’s more, some fresh blood is dipping their toe in the Mun pond, as we kick off the new year.&lt;/p&gt;
&lt;h4&gt;Mun v0.3 progress&lt;/h4&gt;
&lt;p&gt;It’s been a while since we had as much progress as in January, so to refresh your memory: Mun v0.3 is a &lt;em&gt;tock&lt;/em&gt; release.
This means that we focused on improvements to the user experience - for people writing and embedding Mun - and enhancements to the developer experience - for people contributing to Mun.
In particular, a lot of work went into providing a better editing experience with more additions to the language server.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat(language server): integrated new vfs&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/294&quot;&gt;[PR#294]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Previously we used &lt;code&gt;ra_vfs&lt;/code&gt; from Rust Analyzer to manage all file handling in our language server.
Rust Analyzer moved away from that crate and implemented a custom solution.
With the introduction of Rust 1.49 we encountered some clippy errors in our use of &lt;code&gt;ra_vfs&lt;/code&gt;.
We followed suite and implemented a (much simpler) custom solution.
This PR introduces a virtual filesystem that keeps a consistent state of all files currently used in our analysis in memory.
It also provides a way to monitor the filesystem for changes and atomically applies these changes to the in-memory state.
In the future the goal is to use this same functionality for our &lt;code&gt;watch&lt;/code&gt; mode, when building the source.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat(language server): removed async code and switched to lsp_server&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/295&quot;&gt;[PR#295]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;async&lt;/code&gt; is a great feature of Rust.
We’ve used it a lot in our implementation of the language server.
However, this was also really the only place that actually benefited from async IO.
A lot of our asynchronous code consists of fire-and-forget computations, which don’t really benefit from Rust’s async approach and instead work very well in a simple thread-pool.
Besides that, our async implementation required a lot of boilerplate code because most of our dependencies are not async compatible (e.g. &lt;code&gt;salsa&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Therefore, we decided to remove our async code and instead use a simple thread pool.
This also allowed us to switch to an existing crate for our Language Server Protocol implementation, consequently making the code more readable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat(cli): add option to emit IR&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/296&quot;&gt;[PR#296]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mun always emits platform-dependant shared objects.
These are hard to debug if our code generation behaves incorrectly.
This PR adds the ability to output Mun assemblies as LLVM IR files, which are much easier to debug since we can easily translate them to a human-readable format.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feature(lsp): adds document symbol provider&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/297&quot;&gt;[PR#297]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;More work on the language server implementation. This PR adds the ability to visualize the symbols inside a document by inspecting the Abstract Syntax Tree of the file.&lt;/p&gt;
&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 900px; &quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/ccb016d0b4bde41f2d60a1c38c12edad/09ede/vscode-document-symbol-provider.png&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 27.555555555555557%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA/0lEQVQY02WRa3LDIAyEfRHzkAQG4sSPNE2mdtL7n2o7wnabmf7YEYjh0y401/mG5WvF6dSjlBNyLoixQwgRRAxPHiExQiSQOFBwIHbwvNWjx8HBk0VT0gWftwfGcUJKuUphIgFEBEeCMvSYPvoK5ujrZVUFRbf1oq/7ps8j1uWF+/2BaZqrQ4WpmBnWWnDMGMYBXc5w3sOYFsYaGGO2+rZuhsuMdXmi789VGvcd6JzGYsQsILGwvv2LLv/VDMOI1+u7OtM3U9ARWUQqkEOq5ykF5NLVXtu2m6vdmd2dNvpm83zF+Xz5dXcAmQXW6mRCVwQxM7oskOODdqcK1QGqHzO1rFkMmhfCAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Mun document symbols&quot; title=&quot;Mun document symbols&quot; src=&quot;/static/ccb016d0b4bde41f2d60a1c38c12edad/1cfc2/vscode-document-symbol-provider.png&quot; srcset=&quot;/static/ccb016d0b4bde41f2d60a1c38c12edad/3684f/vscode-document-symbol-provider.png 225w,
/static/ccb016d0b4bde41f2d60a1c38c12edad/fc2a6/vscode-document-symbol-provider.png 450w,
/static/ccb016d0b4bde41f2d60a1c38c12edad/1cfc2/vscode-document-symbol-provider.png 900w,
/static/ccb016d0b4bde41f2d60a1c38c12edad/21482/vscode-document-symbol-provider.png 1350w,
/static/ccb016d0b4bde41f2d60a1c38c12edad/09ede/vscode-document-symbol-provider.png 1710w&quot; sizes=&quot;(max-width: 900px) 100vw, 900px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat(book): describe how to install/build LLVM&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/304&quot;&gt;[PR#304]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Mun compiler source code makes heavy use of LLVM.
We install most of our dependencies through cargo but - as LLVM is a system dependency - it as to be installed manually.
Installing LLVM is a tedious task, not made easier by the fact that we also require a specific version.
We receive a lot of questions about how to install this dependency.
This PR adds an explanation on how to install LLVM for different operating systems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix: manually extract llvm release to get more output&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/302&quot;&gt;[PR#302]&lt;/a&gt; and  &lt;strong&gt;misc: adds logging to windows llvm install&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/301&quot;&gt;[PR#301]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We’ve had some annoying issues with our Windows CI pipeline for a while.
For unknown reasons it kept failing sporadically.
When we thought we had fixed the issue, it would pop back up a few days later.
With these PRs we tried to investigate why this failure occurred.
It helped us find the issue and implement a fix, which will hopefully nip the problem in the bud.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are currently also a number of open Pull Requests in review that we hope to integrate soon.
Part of those focus on enabling the use of multiple source files in the form of a Mun project.
Specifically, we worked on runtime linking of multiple assemblies, which brings all of the features of the past few months together.&lt;/p&gt;
&lt;p&gt;For more details, please check out our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;high-level roadmap&lt;/a&gt; on Github that details new features for the upcoming three releases - Mun v0.3, v0.4, and v0.5 - as well as a backlog of features that are still to come.&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;Our requests for new contributors were answered this month. Only just getting up to speed, they were already able to create their &lt;a href=&quot;https://github.com/mun-lang/mun/pull/305&quot;&gt;first PR&lt;/a&gt; - that is still in review.&lt;/p&gt;
&lt;p&gt;If you are also interested in helping develop Mun - but are not sure where to start - feel free to take a look at our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issues&lt;/em&gt;&lt;/a&gt; or reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;. To support our cause, please consider donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Exciting times! Stay tuned for more!&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - December 2020]]></title><description><![CDATA[December - again - was a slow month; holidays and day jobs keeping the core developers busy. We did
finally manage to work together during…]]></description><link>https://mun-lang.org/blog/2021/01/05/this-month-december/</link><guid isPermaLink="false">https://mun-lang.org/blog/2021/01/05/this-month-december/</guid><pubDate>Tue, 05 Jan 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;December - again - was a slow month; holidays and day jobs keeping the core developers busy. We did
finally manage to work together during the holiday break.&lt;/p&gt;
&lt;p&gt;As stated in &lt;a href=&quot;https://mun-lang.org/blog/2020/12/07/this-month-november/&quot;&gt;last month’s update&lt;/a&gt; we are looking into the possibility of funding a third&lt;br&gt;
developer ourselves - albeit a token amount. Sadly, none of our existing contributors can dedicate
more of their precious time either, so we are on the lookout for new talent.&lt;/p&gt;
&lt;h4&gt;Tell me more!&lt;/h4&gt;
&lt;p&gt;As the reward is commensurate of an internship allowance, we’re targetting a similar audience. So,
if you’ve been working on your own Rust projects and want to take the next step on a bigger,
community-driven project; or have always been interested in honing your compiler, language, or
garbage collection skills; this is an opportunity to do so alongside two industry veterans. An added
bonus is that all of our code is - and will always remain - open-source, so you can show off all of
your work on Mun during future job interviews.&lt;/p&gt;
&lt;p&gt;If you are interested in helping develop Mun - but are not sure where to start - feel free to
take a look at our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issues&lt;/em&gt;&lt;/a&gt; or reach out to us on [Discord][discord],
&lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;, or the &lt;em&gt;Contact Us&lt;/em&gt; link at the bottom of our &lt;a href=&quot;https://mun-lang.org&quot;&gt;website&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Mun v0.3 progress&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feature: use statements language support&lt;/strong&gt; [&lt;a href=&quot;https://github.com/mun-lang/mun/pull/290&quot;&gt;PR#290&lt;/a&gt;]
The language side of things to support multi-file projects is about to be wrapped up with the
introduction of &lt;code&gt;use&lt;/code&gt; statements. We implemented &lt;code&gt;use&lt;/code&gt; statements similar to how they work in
Rust, including support for wildcard imports.&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::foo::Bar;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::bar::{&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, Baz, *};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The next step for our project management epic is to support runtime linking between assemblies.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;bump: rust 1.49&lt;/strong&gt; [&lt;a href=&quot;https://github.com/mun-lang/mun/pull/291&quot;&gt;PR#291&lt;/a&gt;] and &lt;strong&gt;bump: rust 1.48&lt;/strong&gt; [&lt;a href=&quot;https://github.com/mun-lang/mun/pull/289&quot;&gt;PR#289&lt;/a&gt;]
We updated our codebase to work with the latest versions of Rust. This also included fixes for new
clippy warnings.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more details, please check out our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;high-level
roadmap&lt;/a&gt; on Github that details new features for the
upcoming three releases - Mun v0.3, v0.4, and v0.5 - as well as a backlog of features that are
still to come.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - November 2020]]></title><description><![CDATA[This Month in Mun is a little different from our usual posts. There’s a very simple reason for that;
we didn’t manage to do much. Apart from…]]></description><link>https://mun-lang.org/blog/2020/12/07/this-month-november/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/12/07/this-month-november/</guid><pubDate>Mon, 07 Dec 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This Month in Mun is a little different from our usual posts. There’s a very simple reason for that;
we didn’t manage to do much.&lt;/p&gt;
&lt;p&gt;Apart from being the two Core contributors on Mun, we (Bas &amp;#x26; Remco) have our day jobs in the
robotics and games industries; which means that all of Mun’s development happens in our spare time.
We knew that would form a bottleneck for Mun’s growth, so with the help of &lt;a href=&quot;https://twitter.com/erlend_sh&quot;&gt;@erlend_sh&lt;/a&gt; we’ve
heavily invested in our community from the start. We actively engage with the Mun and wider open-
source community to collaborate on &lt;a href=&quot;https://github.com/mun-lang/mun/issues/206&quot;&gt;shared problems&lt;/a&gt;; we open-source the Core team’s
discussions &lt;a href=&quot;https://github.com/mun-lang/mun/labels/tracking&quot;&gt;on Github&lt;/a&gt;, such that anyone can pitch in and execute on our plans; and
much more.&lt;/p&gt;
&lt;p&gt;Since our Mun v0.1 release a year ago, this strategy has paid off in many ways. We &lt;a href=&quot;../../../03/10/this-month-february&quot;&gt;received a $15K
MOSS grant from Mozilla&lt;/a&gt; in part because of our
contributions to the community; more than half a dozen people have been generous enough to sponsor
our development with their private funds on &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; and &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;; over
double that number of contributors have improved, fixed or otherwise worked on the Mun codebase;
and we’ve had a lot of community engagement on our &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There’s still a lot that we can improve though. As we don’t have enough funding to dedicate part
of our own workweek to open-source development, we’ve been looking into the possibility of funding
a third developer ourselves - albeit a token amount. Sadly, none of our existing contributors can
dedicate more of their precious time either, so we are on the lookout for new talent.&lt;/p&gt;
&lt;h4&gt;Tell me more!&lt;/h4&gt;
&lt;p&gt;As the reward is commensurate of an internship allowance, we’re targetting a similar audience. So,
if you’ve been working on your own Rust projects and want to take the next step on a bigger,
community-driven project; or have always been interested in honing your compiler, language, or
garbage collection skills; this is an opportunity to do so alongside two industry veterans. An added
bonus is that all of our code is - and will always remain - open-source, so you can show off all of
your work on Mun during future job interviews.&lt;/p&gt;
&lt;p&gt;If you are interested in helping develop Mun - but are not sure where to start - feel free to
take a look at our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issues&lt;/em&gt;&lt;/a&gt; or reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt;,
&lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;, or the &lt;em&gt;Contact Us&lt;/em&gt; link at the bottom of our &lt;a href=&quot;https://mun-lang.org&quot;&gt;website&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Mun v0.3 progress&lt;/h4&gt;
&lt;p&gt;If your take away from this blog was, “Really?! You didn’t manage to do anything for an entire month?!”, there is one thing that we can share. Several of our PRs were blocked by a bug in
&lt;a href=&quot;https://github.com/eqrion/cbindgen&quot;&gt;cbindgen&lt;/a&gt;. We &lt;a href=&quot;https://github.com/eqrion/cbindgen/pull/615&quot;&gt;upstreamed a fix&lt;/a&gt;, allowing us to
continue work on the following PRs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;refactor: make type-specific data (such as StructInfo) part of TypeInfo&lt;/strong&gt;
&lt;a href=&quot;https://github.com/mun-lang/mun/pull/287&quot;&gt;[PR#287]&lt;/a&gt;
&lt;a href=&quot;https://github.com/mun-lang/runtime-ffi/pull/10&quot;&gt;[PR#10]&lt;/a&gt;
&lt;a href=&quot;https://github.com/mun-lang/abi-c/pull/9&quot;&gt;[PR#9]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more details, please check out our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;high-level
roadmap&lt;/a&gt; on Github that details new features for the
upcoming three releases - Mun v0.3, v0.4, and v0.5 - as well as a backlog of features that are
still to come.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - October 2020]]></title><description><![CDATA[When Mun takes part in Hacktoberfest, there’s one thing you can be sure of; lots and lots of pull requests. This month saw us finalise some…]]></description><link>https://mun-lang.org/blog/2020/10/31/this-month-october/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/10/31/this-month-october/</guid><pubDate>Sat, 31 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When Mun takes part in Hacktoberfest, there’s one thing you can be sure of; lots and lots of pull requests. This month saw us finalise some big new features and refactors that inch us ever closer to a Mun v0.3 release.&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;This month Mun partook in the &lt;a href=&quot;https://hacktoberfest.digitalocean.com&quot;&gt;DigitalOcean Hacktoberfest&lt;/a&gt; - a great event aimed at supporting
the open source community. Our goal was to get as many members to contribute at least 4 pull
requests, such that they could win either a limited edition T-shirt or plant a tree. That led to the
following contributions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;feat: add mdbook plugin for testing mun code in book&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/263&quot;&gt;[PR#263]&lt;/a&gt;
This allows testing of Mun code in &lt;code&gt;mdbook&lt;/code&gt;, guaranteeing that the Mun book remains up-to-date
when we update our Mun compiler and runtime.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;docs: fix broken book link and CoC link&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/284&quot;&gt;[PR#284]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are very thankful for your contributions and we hope to see more of them in the future!&lt;/p&gt;
&lt;p&gt;If you are also interested in helping develop Mun - but are not sure where to start - feel free to
take a look at our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issues&lt;/em&gt;&lt;/a&gt; or reach out to us on
&lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;. To support our cause, please consider
donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Mun v0.3 progress&lt;/h4&gt;
&lt;p&gt;This month we finally landed the long-awaited compiler and language-server support for multiple files in a single project:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;feature: adds modules and visibility&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/283&quot;&gt;[PR#283]&lt;/a&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// mod.mun&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; self::Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      Foo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::Foo  &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// undefined value&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;baz&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::Foo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// foo.mun&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::Foo  &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// mismatched type&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;baz&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; package::Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::Foo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;nested&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; self::Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::foo::Foo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
Those familiar with Rust conventions will notice that Mun:
&lt;ul&gt;
&lt;li&gt;uses &lt;code&gt;mod.mun&lt;/code&gt; instead of &lt;code&gt;lib.mun&lt;/code&gt; for the top-level file; and&lt;/li&gt;
&lt;li&gt;does not require you to add a &lt;code&gt;mod foo;&lt;/code&gt; statement to the &lt;code&gt;mod.mun&lt;/code&gt; file. Instead all files in
the &lt;code&gt;src&lt;/code&gt; folder are assumed part of the file tree.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;feature: adds super self and package keywords&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/vscode-extension/pull/8&quot;&gt;[PR#8]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, we laid most of the groundwork for runtime linking of multiple Mun libraries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;fix(codegen): alignment of struct fields&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/285&quot;&gt;[PR#285]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;feat(codegen): add AsValue macro support for enums&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/286&quot;&gt;[PR#286]&lt;/a&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;#[derive(AsValue)]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;#[repr(u8)]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;enum&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;TypeInfoData&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;&amp;#39;ink&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Primitive,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;Struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(StructInfo&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;&amp;#39;ink&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;),&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together with soon to be merged PRs, that should bring us within earshot of the Mun v0.3 release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;refactor: make type-specific data (such as StructInfo) part of TypeInfo&lt;/strong&gt;
&lt;a href=&quot;https://github.com/mun-lang/mun/pull/287&quot;&gt;[PR#287]&lt;/a&gt;
&lt;a href=&quot;https://github.com/mun-lang/runtime-ffi/pull/10&quot;&gt;[PR#10]&lt;/a&gt;
&lt;a href=&quot;https://github.com/mun-lang/abi-c/pull/9&quot;&gt;[PR#9]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WIP: refactor: replace &lt;code&gt;TypeInfo&lt;/code&gt; with &lt;code&gt;TypeRef&lt;/code&gt; for runtime linking of types&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/268&quot;&gt;[PR#268]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more details, please check out our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;high-level
roadmap&lt;/a&gt; on Github that details new features for the
upcoming three releases - Mun v0.3, v0.4, and v0.5 - as well as a backlog of features that are
still to come.&lt;/p&gt;
&lt;p&gt;Finally, we also performed some fixes and bumped the supported Rust version:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;fix: dont run mun tests on CI&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/278&quot;&gt;[PR#278]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bump: rust 1.47&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/279&quot;&gt;[PR#279]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fix: 7zip issues&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/280&quot;&gt;[PR#280]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk3 { color: #6A9955; }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - September 2020]]></title><description><![CDATA[The community and core team worked together on improvements to bring Mun closer to a new release.
Work is also progressing to support…]]></description><link>https://mun-lang.org/blog/2020/10/01/this-month-september/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/10/01/this-month-september/</guid><pubDate>Thu, 01 Oct 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The community and core team worked together on improvements to bring Mun closer to a new release.
Work is also progressing to support multiple source files.&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;A community member whom we welcomed last month picked up another &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issue&lt;/em&gt;&lt;/a&gt; and also
fixed some deprecations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;build: pin rust version to 1.46.0&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/269&quot;&gt;[PR#269]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;improvement: bump smol_str dependency to 0.1.17&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/270&quot;&gt;[PR#270]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are very thankful for your contributions and we hope to see more of them in the future!&lt;/p&gt;
&lt;p&gt;More community contributions came from a contributor who tried out our C++ bindings and immediately
fixed some issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;fix: resolve compiler error in MunGuid equality operator and add assignment operators to RuntimeFunction&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/runtime-ffi/pull/9&quot;&gt;[PR#9]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks for your contributions, and welcome to the Mun community!&lt;/p&gt;
&lt;p&gt;If you are also interested in helping develop Mun - but are not sure where to start - feel free to
reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;. To support our cause,
please consider donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Mun v0.3 progress&lt;/h4&gt;
&lt;p&gt;This month we again focused on some big refactors to create a more stable and maintainable codebase.
This includes some bug fixes which were found by the Mun community as well as more &lt;a href=&quot;https://docs.mun-lang.org/ch04-01-salsa.html&quot;&gt;high level
documentation about our use of Salsa&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;fix: never return type in let initializer&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/264&quot;&gt;[PR#264]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;refactor: use Idx&lt;T&gt; instead of macro in arena&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/266&quot;&gt;[PR#266]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;misc: split database and added docs&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/267&quot;&gt;[PR#267]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Work is still underway to support multiple files in a single project but supporting PRs have already
landed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;feature: adds fixtures to support multiple files from string&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/272&quot;&gt;[PR#272]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;feature: refactored RawItems into ItemTree&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/271&quot;&gt;[PR#271]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With the work done for project configuration &lt;a href=&quot;../../../07/30/this-month-july/&quot;&gt;in July&lt;/a&gt;, we are
focusing on compiler support for &lt;a href=&quot;https://github.com/mun-lang/mun/issues/249&quot;&gt;&lt;code&gt;use&lt;/code&gt; statements&lt;/a&gt; and
&lt;a href=&quot;https://github.com/mun-lang/mun/issues/248&quot;&gt;accessibility specifiers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Last month we talked about wanting to release Mun v0.3 but we are not quite there yet. We chose to
delay the release a little bit to give ourselves some time to achieve the level of polish that we
aspire to deliver in every release.&lt;/p&gt;
&lt;p&gt;For more details, please check out our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;high-level
roadmap&lt;/a&gt; on Github that details new features for the
upcoming three releases - Mun v0.3, v0.4, and v0.5 - as well as a backlog of features that are
still to come.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - August 2020]]></title><description><![CDATA[This month brings some big community and core team updates, paving the way for the release of all Mun crates - including the compiler - to…]]></description><link>https://mun-lang.org/blog/2020/08/30/this-month-august/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/08/30/this-month-august/</guid><pubDate>Sun, 30 Aug 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This month brings some big community and core team updates, paving the way for the release of all Mun crates - including the compiler - to &lt;a href=&quot;https://crates.io&quot;&gt;crates.io&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;We welcomed a new community contributor, who immediately took on a big &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issue&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;feat: type alias&lt;/strong&gt;
&lt;a href=&quot;https://github.com/mun-lang/mun/pull/251&quot;&gt;[PR#251]&lt;/a&gt;
&lt;a href=&quot;https://github.com/mun-lang/vscode-extension/pull/7&quot;&gt;[PR#7]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you for your contributions, and welcome to the Mun community!&lt;/p&gt;
&lt;p&gt;If you are also interested in helping develop Mun - but are not sure where to start - feel free to
reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;. To support our cause,
please consider donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Mun v0.3 progress&lt;/h4&gt;
&lt;p&gt;This month we mainly focused on some big refactors that improved ergonomics and will allow us to
add runtime type dependencies - a core component for project management.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;improvement: shared diagnostics between compiler and language server&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/239&quot;&gt;[PR#239]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: generate C ABI from Rust code&lt;/strong&gt;
&lt;a href=&quot;https://github.com/mun-lang/mun/pull/255&quot;&gt;[PR#255]&lt;/a&gt;
&lt;a href=&quot;https://github.com/mun-lang/runtime-ffi/pull/8&quot;&gt;[PR#8]&lt;/a&gt;
&lt;a href=&quot;https://github.com/mun-lang/abi-c/pull/8&quot;&gt;[PR#8]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;An ergonomic improvement that allows us to use Rust’s algebraic data types (or ADTs), while remaining C ABI compatible.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: move library loading logic to separate crate&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/252&quot;&gt;[PR#252]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: move test utility functions to separate crate&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/253&quot;&gt;[PR#253]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: upgrade to official inkwell&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/254&quot;&gt;[PR#254]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks to this refactor we were able to move to an official release of
&lt;a href=&quot;https://crates.io/crates/inkwell&quot;&gt;inkwell&lt;/a&gt;, allowing us to release the Mun v0.3 compiler crates
on &lt;a href=&quot;https://crates.io/&quot;&gt;crates.io&lt;/a&gt; in the future.&lt;/p&gt;
&lt;p&gt;For now, we are still stuck on LLVM 8, due to a bug in the LLD linker - that was introduced in
later versions. We’ve &lt;a href=&quot;https://reviews.llvm.org/D86401&quot;&gt;created a fix that has been merged&lt;/a&gt;, so
we should be able to upgrade to future releases of LLVM again.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Having finished project configuration &lt;a href=&quot;../../../07/30/this-month-july/&quot;&gt;last month&lt;/a&gt; and runtime
type dependencies well underway, we’ll be focussing on compiler support for &lt;a href=&quot;https://github.com/mun-lang/mun/issues/249&quot;&gt;&lt;code&gt;use&lt;/code&gt;
statements&lt;/a&gt; and &lt;a href=&quot;https://github.com/mun-lang/mun/issues/248&quot;&gt;accessibility
specifiers&lt;/a&gt; next.&lt;/p&gt;
&lt;p&gt;It’s been over three months since we started work on Mun v0.3. Whereas it took us six months to
release Mun v0.2, our goal is to shorten our development cycle to 3-4 months, going forward. As
such, we’ve moved several “nice to have” issues to the next tock release - Mun v0.5 - to make sure
that we can release Mun v0.3 in about a month.&lt;/p&gt;
&lt;p&gt;For more details, please check out our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;high-level
roadmap&lt;/a&gt; on Github that details new features for the
upcoming three releases - Mun v0.3, v0.4, and v0.5 - as well as a backlog of features that are
still to come.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - July 2020]]></title><description><![CDATA[A long list of community contributions, big marshalling performance improvements, technical debt flying out of the window, and a Rustacean…]]></description><link>https://mun-lang.org/blog/2020/07/30/this-month-july/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/07/30/this-month-july/</guid><pubDate>Thu, 30 Jul 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A long list of community contributions, big marshalling performance improvements, technical debt flying out of the window, and a Rustacean Station podcast with the two Mun Core Team members. That can only mean one thing: yet another month of Mun development has come and gone.&lt;/p&gt;
&lt;p&gt;At the end of last month, &lt;a href=&quot;https://rustacean-station.org/&quot;&gt;Rustacean Station&lt;/a&gt; released &lt;a href=&quot;https://rustacean-station.org/episode/020-mun/&quot;&gt;a podcast
about Mun&lt;/a&gt; in which we sat down with host Jeremy to
talk about why we chose Rust to develop Mun. If you are interested in having an inside look into
Mun’s origins and evolution, we recommend you check it out - or any of Rustacean Station’s other
podcasts for that matter!&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;This month we had some new and exciting community contributions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feature: initial LSP support&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/236&quot;&gt;[PR#236]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: add Spaceship example&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/example-rs/pull/1&quot;&gt;[PR#1]&lt;/a&gt;
After having received a lot of &lt;em&gt;Break It&lt;/em&gt; contributions, this Spaceship game marks the first
&lt;em&gt;Make It&lt;/em&gt; contribution for season 1 of our &lt;a href=&quot;https://github.com/mun-lang/mun/issues/220&quot;&gt;&lt;em&gt;Make It or Break It&lt;/em&gt;&lt;/a&gt; contest, pushing the
limits of Mun to Rust marshalling.&lt;/p&gt;
&lt;img src=&quot;/c6fcda54ef350cb2bdd7a9741f289c28/spaceship.gif&quot; alt=&quot;Spaceship game written with Mun and Rust&quot; width=&quot;100%&quot;&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;improvement(tools): bump bindgen dependency to 0.54&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/242&quot;&gt;[PR#242]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix(parser): parsing of unmatched right curly braces (’}‘)&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/243&quot;&gt;[PR#243]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix: removed outdated comments&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/245&quot;&gt;[PR#245]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat(cli): Implement &lt;code&gt;mun new&lt;/code&gt; and &lt;code&gt;mun init&lt;/code&gt;&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/246&quot;&gt;[PR#246]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thank you for all of your contributions, and a warm welcome for our new community contributors!&lt;/p&gt;
&lt;p&gt;We have added one additional &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issue&lt;/em&gt;&lt;/a&gt; on Github, which is a good starting point for
anyone who wants to get involved with Mun:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pin Rust version&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/issues/247&quot;&gt;[issue#247]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are interested in helping develop Mun - but are not sure where to start - feel free to reach
out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;. To
support our cause, please consider donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Mun v0.3 progress&lt;/h4&gt;
&lt;p&gt;The Mun Core Team has been making steady progress on other improvements and refactoring for our Mun
v0.3 release. With this &lt;em&gt;tock&lt;/em&gt; release we hope to improve the user experience for people writing and embedding Mun, as well as enhance the developer experience for people contributing to Mun.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;improvement(runtime): add benchmarks for and optimise struct field marshalling&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/238&quot;&gt;[PR#238]&lt;/a&gt;
Based on feedback from the &lt;a href=&quot;https://veloren.net/&quot;&gt;Veloren Team&lt;/a&gt; we started some guided
optimisation of our struct marshalling code, which has resulted in huge improvement:&lt;/p&gt;
&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 653px; &quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/7232a845981933a39314833866f1f63a/e7dce/struct-marshalling-perf.png&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 46.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABbklEQVQoz0WQXY7cIBCEfY1oaFjTgPm3B4zNMGOPoihStA+r3P80CRNt9lMJ9UtR3TVQhaB414SgOUi+3Dadgi/XnHOYw/PXz7VuOedSNucs5xwRUYi3cRwogS54vRdgQEta73td4rzmzIu/3DzzyhkbYlRTR0+TtVYIHMBKsKLLKxL6rNaAyZuW1RrlpFwMepqkkCgQkQMh8MlAgfZY+AwHejyOo93rXp/nuZy7//09nFvJpbU2z7O1xjkbY5RSDiBGkP3UfvPEqeTotVq8XNwo+AXfCGeEkMuLr1AASukA+DL/+0J1czmbz8tcy621VHJ7/3Fte933vdb5FSil0FpzzgdKad+cUsoYBWCM5ZRrrSld07bSbL4VA4pLFEopROxWIdQ0jZwPoLG3ZQQ4SbwEI8TVgZOYAianhVqX5JwzRmtjhBAA5Gtt+p/eHGWMPc/ncX9s2/a4P9xR7MdpW15TqrcaQ7AdE+f5b2F/AKGRVNVweGMZAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Performance improvements for Mun struct marshalling&quot; title=&quot;Performance improvements for Mun struct marshalling&quot; src=&quot;/static/7232a845981933a39314833866f1f63a/e7dce/struct-marshalling-perf.png&quot; srcset=&quot;/static/7232a845981933a39314833866f1f63a/3684f/struct-marshalling-perf.png 225w,
/static/7232a845981933a39314833866f1f63a/fc2a6/struct-marshalling-perf.png 450w,
/static/7232a845981933a39314833866f1f63a/e7dce/struct-marshalling-perf.png 653w&quot; sizes=&quot;(max-width: 653px) 100vw, 653px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;misc(ci): build binaries for release branches&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/240&quot;&gt;[PR#240]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: upgrade to salsa 0.15&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/244&quot;&gt;[PR#244]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the coming month we’ll be finishing up our &lt;a href=&quot;https://github.com/TheDan64/inkwell&quot;&gt;Inkwell&lt;/a&gt;
upgrade, allowing us to release our compiler crates in the future while cleaning up some technical
debt in the process. At the same time, we are adding support for multi-file projects to our ABI,
compiler, and runtime.&lt;/p&gt;
&lt;p&gt;For more details, please check out our &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;high-level
roadmap&lt;/a&gt; on Github that details new features for the
upcoming two releases - Mun v0.3 &amp;#x26; v0.4 - as well as a backlog of features that are still to come.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - June 2020]]></title><description><![CDATA[After the dust settled of the Mun v0.2 release, the focus of this month has been
on fixing several issues found by community members…]]></description><link>https://mun-lang.org/blog/2020/06/30/this-month-june/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/06/30/this-month-june/</guid><pubDate>Tue, 30 Jun 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After the dust settled of the Mun v0.2 release, the focus of this month has been
on fixing several issues found by community members, improving the overall
quality of the code base and working towards our next release: Mun v0.3.&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;A few important community PRs landed during this month:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;improvement: added combatibility check between munlib and runtime&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/226&quot;&gt;[PR#226]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;refactor!: Replace deprecated failure crate with thiserror and anyhow&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/213&quot;&gt;[PR#213]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In honour of the Mun v0.2 release we launched the &lt;a href=&quot;https://github.com/mun-lang/mun/issues/220&quot;&gt;&lt;em&gt;Make It or Break It&lt;/em&gt;
contest&lt;/a&gt; in which we invite both
content creators and developers to use Mun v0.2 and make or break something
with/in Mun. The best Make It or Break It entry will be showcased on the front
page of the Mun website.&lt;/p&gt;
&lt;p&gt;We’ve already seen several issues being posted which break Mun v0.2 in
interesting ways. We are very glad that these issues surfaced and we’ve been
working hard on fixing them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;fix: fixes a lot of llvm assertions&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/233&quot;&gt;[PR#233]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fix: fixes issues #225&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/232&quot;&gt;[PR#232]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fix: fixes issue #228&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/229&quot;&gt;[PR#229]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fix(codegen): crash on missing nested private function&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/221&quot;&gt;[PR#221]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;June also marks the month in which the mun-lang organization has been admitted
to &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;the Github Sponsorship program&lt;/a&gt;. We saw a influx of sponsors on both our
Github sponsors as well as on our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt;. We can’t thank you enough!&lt;/p&gt;
&lt;p&gt;We also added another &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issue&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Implement &lt;code&gt;mun new&lt;/code&gt; or &lt;code&gt;mun init&lt;/code&gt;&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/issues/237&quot;&gt;[issue#237]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are interested in helping develop Mun - but are not sure where to start -
feel free to reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or
&lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;. To support our cause, please consider
donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/mun-lang&quot;&gt;Github Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Mun v0.3 progress&lt;/h4&gt;
&lt;p&gt;We work with a tick-tock verison model. With a tick version we implement
important new features whereas with a tock version we improve on the last
version. Mun v0.2 was a tick version so Mun v0.3 will be a tock version. We have
defined milestones on GitHub, on which you can follow the progress of &lt;a href=&quot;https://github.com/mun-lang/mun/milestone/2&quot;&gt;the
upcoming release&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A lot of work has been put into the next release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feature: foundation for projects&lt;/strong&gt;
&lt;a href=&quot;https://github.com/mun-lang/mun/pull/223&quot;&gt;[PR#223]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This PR introduces the concept of projects as described in the &lt;a href=&quot;https://github.com/mun-lang/mun/issues/203&quot;&gt;Project
Management tracking issue&lt;/a&gt;.
Instead of building Mun files by listing individual source files you now
build an entire project (similar to a rust crate).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: language server setup&lt;/strong&gt;
&lt;a href=&quot;https://github.com/mun-lang/mun/pull/210&quot;&gt;[PR#210]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Work on our language server has slowly been progressing. The basic
foundation has been implemented but no actual language server features have
been implemented yet. We are working hard on implementing the first basic
features:&lt;/p&gt;
&lt;img src=&quot;/d0cbc05577d3538fa6fe39403b8a3cd9/languageserver.gif&quot; alt=&quot;Diagnostics in VSCode&quot;&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor(codegen): type safe inkwell types&lt;/strong&gt;
&lt;a href=&quot;https://github.com/mun-lang/mun/pull/202&quot;&gt;[PR#202]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A major thorn in our sight was the use of partially untyped inkwell types
in our codebase. When dealing with a &lt;code&gt;StructValue&lt;/code&gt; there is really no way
to ensure that the underlying struct value is actually of the type you’d
expect. To that end we implemented the &lt;code&gt;Value&amp;#x3C;T&gt;&lt;/code&gt; type which wraps an
inkwell type but retains the Rust type information. With this, we already
found some glaring issues which have now been fixed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is still a lot more work to do for Mun v0.3, so stay tuned!&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - May 2020]]></title><description><![CDATA[This month marked the release of a new version of Mun. It took us quite some
time but after almost half a year, Mun v0.2 is out
now! The…]]></description><link>https://mun-lang.org/blog/2020/05/31/this-month-may/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/05/31/this-month-may/</guid><pubDate>Sun, 31 May 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This month marked the release of a new version of Mun. It took us quite some
time but after almost half a year, &lt;a href=&quot;../../16/release-mun-v0-2-0&quot;&gt;Mun v0.2 is out
now&lt;/a&gt;! The most important feature of Mun v0.2? We
now support hot reloadable structs.&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;After the release of Mun v0.2 we saw an influx of community members, who pulled
together to fix some of the issues in the release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;fix(docs): remove return-blocking semicolon from ch01 listing 01&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/192&quot;&gt;[PR#192]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fix(docs): code blocks in ch02-02-functions of the book&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/194&quot;&gt;[PR#194]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fix(docs): missing arg for fibonacci fn&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/197&quot;&gt;[PR#197]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; also saw a spike in user activity and
we have had some really fruitful discussions there. We hope to include the
community more and more in the entire design &amp;#x26; development process. To that end
we have added several &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3Atracking&quot;&gt;tracking
issues&lt;/a&gt;
for new features that we want to develop in the coming months.&lt;/p&gt;
&lt;p&gt;Besides tracking issues we have also added additional &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issues&lt;/em&gt;&lt;/a&gt; on Github, which is a
good starting point for anyone who wants to get involved with Mun:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Implement compatibility checks between munlib and runtime&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/issues/188&quot;&gt;[issue#188]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test Mun examples in the book&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/issues/209&quot;&gt;[issue#209]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are interested in helping develop Mun - but are not sure where to start -
feel free to reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or
&lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;. To support our cause, please consider
donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;v0.2&lt;/h4&gt;
&lt;p&gt;At the start of this month we were able to put the finishing touches to the
second release of Mun. As mentioned, the Mun v0.2 release features hot
reloadable data structures that are automatically &lt;a href=&quot;../../01/memory-mapping&quot;&gt;memory
mapped&lt;/a&gt;, but that’s far from all new goodieness. Some
other interesting features that were added this month are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: implements number type inferencing&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/154&quot;&gt;[PR#154]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;integer&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i32&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// inferred as i32&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;large_unsigned_integer&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u128&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// inferred as u128&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;with_let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u16&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; b = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;    &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// inferred as u16&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;    &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// inferred as u16&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    a&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;misc: removed float, int, uint&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/157&quot;&gt;[PR#157]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now that we have sized scalar types, there was no longer a need for generic
&lt;code&gt;int&lt;/code&gt; and &lt;code&gt;float&lt;/code&gt; types. As they were only confusing for new users, we
removed them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat(book): add book to main repository&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/182&quot;&gt;[PR#182]&lt;/a&gt;
We integrated the Mun &lt;a href=&quot;https://docs.mun-lang.org/&quot;&gt;book&lt;/a&gt; into the main
repository, such that we can automatically &lt;a href=&quot;https://github.com/mun-lang/mun/issues/209&quot;&gt;test all its
examples&lt;/a&gt; during CI builds - in
the future. With the release of Mun v0.2, a lot of content was added to the
book. The book of Mun v0.2 is available
&lt;a href=&quot;https://docs.mun-lang.org/v0.2/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The complete list of changes for Mun v0.2 can be found in the &lt;a href=&quot;https://github.com/mun-lang/mun/releases/tag/v0.2.0&quot;&gt;release
notes&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;VSCode Plugin&lt;/h4&gt;
&lt;p&gt;We launched an official Visual Studio Code plugin that adds full support for
syntax highlighting of Mun v0.2 code. Our goal is to extend this plugin to
better integrate with VSCode through the language server protocol. This will
hopefully also benefit other editors in the future. The plugin is available on
the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=mun-lang.mun&quot;&gt;VisualStudio
Marketplace&lt;/a&gt;
and on &lt;a href=&quot;https://github.com/mun-lang/vscode-extension&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 900px; &quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/3f58e4b8cdf08381eb103c6dccf6f8b2/b8bf8/vscode-extension.png&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 80.44444444444444%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB9ElEQVQ4y42T227bMAyG/RZNE8uUqIMPTeI49SFbimIDmqLYxYBd7v0f5B/E1J7bJe0uPoikqB8UKSWHx+94OH7F8XhE13UYhgGHwwF9P6Bp9mjbVvxI3Ov7Xvai37YdmqaRvBiLe8l+V4OtRVmWKMsCLhQwbLFaraBUBqUU0jRFmqqJGPvLOccwg7RG0nx5REYawQWs7ypoY8DMMEYjy87JcX0PEU22CNooSEju+wO01iLgHE+rjQnjIcouis/90U66toUxBr7KUW0KcGBoS4KxGsZpsNdiXxN5I7jb7USQfcC22cIGB9IZtCGBXtFMcqX3InNEsK5rsDHQbOFzD+sMDGsR0K9CkVjhXHDewzlSoQzBOhRVgbIK8N7JYakwHlTZmStDuSgYK7zbVAiFh8rUdFWisT9K4p9eOQpaZrDLsVmvsd1U57cV31uq/muy/wzFWgtb5LCFl16N/ZO+GbpYyYeC0kPnYZyVq8Upz7n2Fj8UdAUjbBzC2sOVFhyMYCP5mVj5p4L1rgFbBy638JstOC9AxkLFpIyEjGiyRz9+13lsjCf7eg2mFM4Ritwg9wTWtzC0hKFbULpAtrwBLReC2KuFEO23LJDUL7+RDS8I336ifPoF9fADy+EZi/aEm/sTbvZPFzgh7Z6Rdies2tO0Rv4ARs/CO7zB4jwAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Syntax highlighting in VSCode&quot; title=&quot;Syntax highlighting in VSCode&quot; src=&quot;/static/3f58e4b8cdf08381eb103c6dccf6f8b2/1cfc2/vscode-extension.png&quot; srcset=&quot;/static/3f58e4b8cdf08381eb103c6dccf6f8b2/3684f/vscode-extension.png 225w,
/static/3f58e4b8cdf08381eb103c6dccf6f8b2/fc2a6/vscode-extension.png 450w,
/static/3f58e4b8cdf08381eb103c6dccf6f8b2/1cfc2/vscode-extension.png 900w,
/static/3f58e4b8cdf08381eb103c6dccf6f8b2/21482/vscode-extension.png 1350w,
/static/3f58e4b8cdf08381eb103c6dccf6f8b2/b8bf8/vscode-extension.png 1728w&quot; sizes=&quot;(max-width: 900px) 100vw, 900px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;p&gt;Fun fact: The plugin also drives syntax highlighting on this website.&lt;/p&gt;
&lt;h4&gt;v0.3&lt;/h4&gt;
&lt;p&gt;Now that Mun v0.2 is out of the door, we can focus on developing the next
version of Mun. We work according to a tick-tock release cycle. During a tick
release we implement new language features, whereas a tock release focuses on
bettering the status quo by removing technical debt, fixing bugs, and improving
overall ergonomics. Since Mun v0.2 was a tick release, Mun v0.3 will be a tock
release.&lt;/p&gt;
&lt;p&gt;We try to be as transparent as possible, so to that end we posted a &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;high-level
roadmap&lt;/a&gt; on Github that details
new features for the upcoming two releases - Mun v0.3 &amp;#x26; v0.4 - as well as a
backlog of features that are still to come. We also assigned milestones to and
labelled all issues to make them more insightful. The milestones can be
reviewed in &lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;this overview&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Our goal is to release Mun v0.3 a lot sooner than Mun v0.2. Hopefully after a few
months instead of half a year. Please stay tuned!&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk7 { color: #B5CEA8; }
  .dark-default-dark .mtk3 { color: #6A9955; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[Release - Mun v0.2.0]]></title><description><![CDATA[After half a year of hard work by the Mun Community and Core Team, we are happy to present
Mun v0.2.0. With the addition of
hot reloadable…]]></description><link>https://mun-lang.org/blog/2020/05/16/release-mun-v0-2-0/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/05/16/release-mun-v0-2-0/</guid><pubDate>Sat, 16 May 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After half a year of hard work by the Mun Community and Core Team, we are happy to present
&lt;a href=&quot;https://github.com/mun-lang/mun/releases/tag/v0.2.0&quot;&gt;Mun v0.2.0&lt;/a&gt;. With the addition of
&lt;a href=&quot;../../01/memory-mapping&quot;&gt;hot reloadable structs&lt;/a&gt;, this forms a big step forward in
terms of hot reloadability for the language.&lt;/p&gt;
&lt;h4&gt;What’s Mun?&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://mun-lang.org&quot;&gt;Mun&lt;/a&gt; is an embeddable programming language empowering creation through
iteration. The idea to create Mun originated out of frustration with the Lua dynamic scripting
language and a desire to have similar hot reloading functionality available in Rust. As such, it’s
not a direct competitor with Rust, but instead is intended to be used with Rust (or C/C++) as a
host/embedded language pairing. Actually, Mun is completely written in Rust, building on similar
crates as &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer&quot;&gt;rust-analyzer&lt;/a&gt; and
&lt;a href=&quot;https://github.com/rust-lang/rust&quot;&gt;rustc&lt;/a&gt;. Its key features include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ahead of time compilation&lt;/strong&gt; - Mun is compiled ahead of time (AOT), as opposed to being
interpreted or compiled just in time (JIT).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Statically typed&lt;/strong&gt; - Mun resolves types at compilation time instead of at runtime, resulting in
immediate feedback when writing code and opening the door for powerful refactoring tools.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;First class hot-reloading&lt;/strong&gt; - Every aspect of Mun is designed with hot reloading in mind. Hot
reloading is the process of changing code and resources of a live application, removing the need
to start, stop and recompile an application whenever a function or value is changed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;What’s new?&lt;/h4&gt;
&lt;p&gt;Mun v0.2 brings a &lt;em&gt;ton&lt;/em&gt; of updates. For a full list have a look at the
&lt;a href=&quot;https://github.com/mun-lang/mun/releases/tag/v0.2.0&quot;&gt;changelog&lt;/a&gt;, but the main new features are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hot reloadable data structures&lt;/li&gt;
&lt;li&gt;Marshalling of data structures to Rust, C, and C++&lt;/li&gt;
&lt;li&gt;Garbage collection for data structures (with opt-out at the struct-level)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;loop&lt;/code&gt;, &lt;code&gt;while&lt;/code&gt;, &lt;code&gt;break&lt;/code&gt; and explicit&lt;code&gt; return&lt;/code&gt; expressions&lt;/li&gt;
&lt;li&gt;Full operator support for numeric and boolean types&lt;/li&gt;
&lt;li&gt;Incremental compilation&lt;/li&gt;
&lt;li&gt;Benchmark support&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;/67118f60534fb5fc42afe7547e7c89be/buoyancy-hot-reload.gif&quot; alt=&quot;Buoyancy simulation using Mun struct hot reloading&quot; style=&quot;width: 100%; max-width: 944px;&quot;&gt;
&lt;h4&gt;What’s next?&lt;/h4&gt;
&lt;p&gt;Mun is still in early development, so there is a lot to do. The Mun Core Team operates according to
a tick-tock release cycle. Development of a tick release (Mun v0.2) focuses on implementing new
features, whereas a tock release (Mun v0.3) focuses on using and improving existing features.&lt;/p&gt;
&lt;p&gt;In particular, we’ll focus on making a Rust+Mun game demo that showcases Mun’s hot reloading
capabilities and we’ll be working on a &lt;code&gt;cargo&lt;/code&gt;-like application for better Mun project management.
For a complete roadmap, please visit our
&lt;a href=&quot;https://github.com/mun-lang/mun/milestones&quot;&gt;GitHub Milestones&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As Mun consists of a separate language, runtime, and an ABI that forms the communication protocol
between the two; any language can benefit from the Mun Runtime’s hot reloading capabilities. This
leaves room for others to integrate the Mun ABI with (a semantic subset) of other languages such
as Rust.&lt;/p&gt;
&lt;h4&gt;How can I learn more?&lt;/h4&gt;
&lt;p&gt;To get started, read the &lt;a href=&quot;https://docs.mun-lang.org/v0.2&quot;&gt;Mun Book&lt;/a&gt; and have a look at our
&lt;a href=&quot;https://github.com/mun-lang/mun/tree/master/crates/mun_runtime/examples&quot;&gt;Rust&lt;/a&gt; and
&lt;a href=&quot;https://github.com/mun-lang/example-cpp&quot;&gt;C++&lt;/a&gt; examples.&lt;/p&gt;
&lt;p&gt;If you are interested in helping develop Mun feel free to reach out to us on
&lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;, or pick up one
of our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22&quot;&gt;good first issues&lt;/a&gt; on &lt;a href=&quot;https://github.com/mun-lang/mun&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you cannot personally contribute but would still like to support our cause, please consider
donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Acknowledgments&lt;/h4&gt;
&lt;p&gt;This release would not have been possible without the incredible contributions from the Mun
Community and the generous support of Mozilla - in the form of the &lt;a href=&quot;https://www.mozilla.org/en-US/moss/mission-partners&quot;&gt;MOSS grant&lt;/a&gt;. We are extremely grateful to all of you!&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - April 2020]]></title><description><![CDATA[In our efforts to finalise Mun v0.2, we’ve made a big push for the finish line. Through the
combined efforts of the Mun Community and Core…]]></description><link>https://mun-lang.org/blog/2020/05/02/this-month-april/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/05/02/this-month-april/</guid><pubDate>Sat, 02 May 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In our efforts to finalise Mun v0.2, we’ve made a big push for the finish line. Through the
combined efforts of the Mun Community and Core Team, we were able to release a record amount of new
features, bug fixes, and improvements; the most anticipated new kid on the block being &lt;strong&gt;struct hot reloading&lt;/strong&gt;!&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;This month we had another exemplary case of community contribution. Someone ran into problems while
writing Mun code, logged corresponding &lt;a href=&quot;https://github.com/mun-lang/mun/issues&quot;&gt;issues&lt;/a&gt;, and - with
our help - created several pull requests to resolve the issues themselves:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: use ’-&gt;’ instead of ’:’ for fn return types&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/123&quot;&gt;[PR#123]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() -&amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: add 128-bit integers (&lt;code&gt;i128&lt;/code&gt; and &lt;code&gt;u128&lt;/code&gt;)&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/124&quot;&gt;[PR#124]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; _a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;100_000_000_000_000u128&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; _b = -&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;100_000_000_000_000i128&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;misc: lock cbindgen dependency to 0.14.0&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/126&quot;&gt;[PR#126]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;style: add a missing space to invoke_fn15’s definition&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/132&quot;&gt;[PR#132]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: remainder operator&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/135&quot;&gt;[PR#135]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;2&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;remainder&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(a: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, b: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) -&amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      a % b&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: unary operators&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/136&quot;&gt;[PR#136]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;3&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;negate&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(a: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) -&amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      -a&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As our Core Team only consists of two part-time members, this greatly helps us scale our output!
Another new contributor has picked up one of our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issues&lt;/em&gt;&lt;/a&gt;. Hopefully we will be
able to merge their &lt;a href=&quot;https://github.com/mun-lang/mun/pull/129&quot;&gt;PR&lt;/a&gt; soon.&lt;/p&gt;
&lt;p&gt;We have added one additional &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issue&lt;/em&gt;&lt;/a&gt; on Github, which is a good starting point for
anyone who wants to get involved with Mun:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;refactor(abi): move privacy and name from &lt;code&gt;FunctionSignature&lt;/code&gt; to &lt;code&gt;FunctionInfo&lt;/code&gt;&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/issues/146&quot;&gt;[issue#146]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are interested in helping develop Mun - but are not sure where to start - feel free to reach
out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;. To
support our cause, please consider donating to our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;v0.2 progress&lt;/h4&gt;
&lt;p&gt;The last checkbox we needed to tick for the Mun v0.2 release was &lt;strong&gt;struct hot reloading&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: remove TypeInfo and StructInfo from StructRef&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/109&quot;&gt;[PR#109]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: memory mapping&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/117&quot;&gt;[PR#117]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;../../01/memory-mapping&quot;&gt;[blog]&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix(runtime): ensure loaded Assemblies can be linked&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/139&quot;&gt;[PR#139]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: add casting of fundamental types to memory mapping&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/140&quot;&gt;[PR#140]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: cleanup runtime/memory code&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/142&quot;&gt;[PR#142]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Apart from that we focused on bug fixes, quality of life improvements, and brushing up our documentation for the upcoming release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix: infer invalid struct type&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/111&quot;&gt;[PR#111]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix: fixes #113&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/114&quot;&gt;[PR#114]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;misc: updates to official cbindgen crate&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/115&quot;&gt;[PR#115]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;docs(readme): new Arch Linux install instructions&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/116&quot;&gt;[PR#116]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;improvement: better literal support&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/122&quot;&gt;[PR#122]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;4&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1i8&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0x3a_u32&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0o71234&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1_000_000_u32&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;5i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;3.0f32&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1_000_123.0e-2f32&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: add support for extern functions without a return type&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/127&quot;&gt;[PR#127]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;5&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;extern&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;C&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(a: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;println!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;{}&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, a);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix: fixes #128&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/130&quot;&gt;[PR#130]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;misc: merged file and group ir snapshots&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/131&quot;&gt;[PR#131]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix(codegen): only generate exposed functions&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/134&quot;&gt;[PR#134]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix: color output on linux terminal&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/138&quot;&gt;[PR#138]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;chore(ci): split artifact generation into separate workflow&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/141&quot;&gt;[PR#141]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat(runtime): add cloning of StructRef&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/143&quot;&gt;[PR#143]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: add assignment, bit, and boolean operators&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/144&quot;&gt;[PR#144]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;6&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      a: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Bar&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(Foo);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; b = &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; foo = Foo { a: !b };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      foo.a |= (b ^ &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) &amp;amp;&amp;amp; (b ^ &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; bar = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;Bar&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(foo);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; foo2 = Foo { a: b };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      bar.&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; = foo2;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &amp;gt;&amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With struct hot reloading completed, we are now putting the final touches to our documentation and
C++ bindings - before releasing Mun v0.2. Please stay tuned!&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk7 { color: #B5CEA8; }
  .dark-default-dark .mtk8 { color: #CE9178; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[Hot Reloadable structs: Memory Mapping]]></title><description><![CDATA[The Mun v0.2 release is on the horizon, so we wanted to take this opportunity to delve a little
deeper into this release’s big newcomer: hot…]]></description><link>https://mun-lang.org/blog/2020/05/01/memory-mapping/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/05/01/memory-mapping/</guid><pubDate>Fri, 01 May 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Mun v0.2 release is on the horizon, so we wanted to take this opportunity to delve a little
deeper into this release’s big newcomer: &lt;strong&gt;hot reloadable structs&lt;/strong&gt;. Being able to effortlessly hot
reload data was what we originally set out to do when designing Mun, so we are excited to share how
we brought this feat about.&lt;/p&gt;
&lt;p&gt;At its core Mun leverages function and type information - known as &lt;em&gt;symbols&lt;/em&gt; - that are generated
by the Mun Compiler. When changes to a source file cause a recompilation, the runtime detects this
and attempts to &lt;em&gt;hot reload&lt;/em&gt;; swapping out old functions and types with their new counterparts,
without stopping the host application. Whereas hot reloading of functions can be easily done in
most languages (e.g. by swapping shared libraries with a fixed API), hot reloading data is more
complicated because it requires information about the data layout.&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;OldLayout&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    foo: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;f32&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    bar: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i16&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;NewLayout&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    foo: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;f64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    bar: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i16&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Given the old and new layout of a struct, we can &lt;em&gt;memory map&lt;/em&gt; field values from an old struct
instance to a new instance’s memory locations. Thanks to Mun’s symbols we can now deduce this
mapping - albeit nontrivial. The remainder of this blog will explain the algorithm we’ve developed
to create a “correct” memory mapping from an old list of types to a new list.&lt;/p&gt;
&lt;h4&gt;Myers Diff&lt;/h4&gt;
&lt;p&gt;Another way of thinking about the problem is: given a starting state &lt;em&gt;S&lt;/em&gt; and goal state &lt;em&gt;G&lt;/em&gt;, we can
make a sequence [&lt;em&gt;c&lt;sub&gt;1&lt;/sub&gt;&lt;/em&gt;, &lt;em&gt;c&lt;sub&gt;2&lt;/sub&gt;&lt;/em&gt;, .. &lt;em&gt;c&lt;sub&gt;n&lt;/sub&gt;&lt;/em&gt;] of changes to S - in any
order - such that we arrive in G. In an ideal world we’d know all of the changes &lt;em&gt;c&lt;sub&gt;i&lt;sub&gt;&lt;/em&gt;;
instead we only know &lt;em&gt;S&lt;/em&gt; and &lt;em&gt;G&lt;/em&gt;. Thus, we need to deduce the “correct” set of changes ourselves.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: It might be possible to obtain all changes &lt;em&gt;c&lt;sub&gt;i&lt;sub&gt;&lt;/em&gt; by means of an IDE integration
that converts all key strokes into a change set, but as we cannot assume that everyone will use
our integration - nor that it is perfect - we need a good algorithm for the simplest use case.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Analogous to our problem is &lt;code&gt;git diff&lt;/code&gt;, which determines the set of changes between two lists of
files. By default, git uses Myers diff algorithm to calculate the set of insertions and deletions
to go from a start state &lt;em&gt;S&lt;/em&gt; to a goal state &lt;em&gt;G&lt;/em&gt;. For a thorough explanation of the Myers diff algorithm, I recommend &lt;a href=&quot;https://blog.robertelder.org/diff-algorithm&quot;&gt;this blog&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;enum&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Diff&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Insert,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Delete,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Myers diff algorithm serves as a good starting point to determine what is different, but we need to
refine its result to figure out &lt;strong&gt;how&lt;/strong&gt; two structs might differ.&lt;/p&gt;
&lt;h4&gt;Refined Diff&lt;/h4&gt;
&lt;p&gt;At this point, it’s good to ask ourselves what possible differences could occur between two lists
of structs. Given an old list of struct types,&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;2&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;LayoutA&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    a: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;f32&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    b: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i16&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    c: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u8&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    d: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;LayoutB&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    e: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u128&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    f: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;LayoutC&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    g: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and a new list,&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;3&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;LayoutBB&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; { &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Rename struct + Move struct&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    e: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u128&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    f: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;LayoutA&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; { &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Move struct&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    c: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u8&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,    &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Move field&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    a: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;f64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,   &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Convert field type + move field&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    bb: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i16&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,  &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Rename field + move field&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk3&quot;&gt;//  d: bool,  // Delete field&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    e: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i16&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,   &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Insert field&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk3&quot;&gt;//struct LayoutC { // Delete struct&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk3&quot;&gt;//    g: bool,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk3&quot;&gt;//}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;LayoutD&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; { &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Insert struct&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    z: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;you’ll notice two types of annotated differences: changes related to structs or to struct fields.
The observant reader might already have recognised that in some cases, there are multiple possible
annotations. E.g. the change to &lt;code&gt;LayoutA::bb&lt;/code&gt; could also be classified as a newly inserted field,
causing the old &lt;code&gt;LayoutA::b&lt;/code&gt; field to be deleted. Both would be valid conclusions, but
when designing our algorithm we decided to prefer any choice that would allow for data retention.
We’d rather have a user do extra steps to add a new (reset) field, than have them easily lose data
that they actually wanted to retain. There is no recovery from the latter, after all.&lt;/p&gt;
&lt;p&gt;So, how do we come up with the “correct” mapping? By adding some assumptions and restrictions, we
are able to avoid most (if not all) ambiguous cases. The assumptions we’ve made are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;If an old struct type and a new struct type have the same name, they must be the same type. In
this case, we accept any and all changes to the struct and its fields.&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;LayoutA&lt;/code&gt; is an example of this; the struct name remained the same but it was &lt;em&gt;moved&lt;/em&gt; down by one
position and all of its field were &lt;em&gt;edited&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If an old struct type and a new struct type have different names but their fields are all the
same, then the struct must have been &lt;em&gt;renamed&lt;/em&gt; and can optionally be &lt;em&gt;moved&lt;/em&gt;.&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;LayoutB&lt;/code&gt; is an example of this; the struct was &lt;em&gt;renamed&lt;/em&gt; to &lt;code&gt;LayoutBB&lt;/code&gt; and it was &lt;em&gt;moved&lt;/em&gt; up by
one position, but all of its fields remained the same.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If an old field and new field have the same name and type, they must have remained unchanged. In
this case, the field can be &lt;em&gt;moved&lt;/em&gt;.&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;LayoutA::c&lt;/code&gt; is an example of this; the field name and type remained the same but it was &lt;em&gt;moved&lt;/em&gt;
up two positions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If an old field and new field have the same name, they must be the same field. In this case, we
accept a &lt;em&gt;type conversion&lt;/em&gt; and the field can potentially be &lt;em&gt;moved&lt;/em&gt;.&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;LayoutA::a&lt;/code&gt; is an example of this; the field name remained the same but it was &lt;em&gt;moved&lt;/em&gt; down by
one position and underwent a &lt;em&gt;type conversion&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If an old field and new field have different names but the same type, the field &lt;em&gt;could&lt;/em&gt; have
been renamed. As there can be multiple candidates with the same type, we accept the &lt;em&gt;renamed&lt;/em&gt; and
potentially &lt;em&gt;moved&lt;/em&gt; field that is closest to the original index of the old field.&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;LayoutA::b&lt;/code&gt; is an example of this; the field was &lt;em&gt;renamed&lt;/em&gt; to &lt;code&gt;bb&lt;/code&gt; and it was &lt;em&gt;moved&lt;/em&gt; down by one
position. Another candidate would have been the newly inserted field &lt;code&gt;e&lt;/code&gt; which also has the same
type &lt;code&gt;i16&lt;/code&gt;, but would have been moved 2 positions - making &lt;code&gt;bb&lt;/code&gt; the closest candidate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some restrictions can be derived from these rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A struct cannot simultaneously be renamed and its fields edited.&lt;/strong&gt; This is intended to prevent
cases such as &lt;code&gt;LayoutC&lt;/code&gt; from being &lt;em&gt;renamed&lt;/em&gt; to &lt;code&gt;LayoutD&lt;/code&gt; and their fields being &lt;em&gt;edited&lt;/em&gt;
accordingly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A struct field cannot simultaneously be renamed and its type changed.&lt;/strong&gt; This is intended to
prevent cases such as &lt;code&gt;LayoutA::d&lt;/code&gt; from being &lt;em&gt;renamed&lt;/em&gt; and undergoing a &lt;em&gt;type conversion&lt;/em&gt; to
&lt;code&gt;LayoutA::e&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In both of the above cases, the difference will be recognised as two separate changes: an insertion
and a deletion of the struct/field.&lt;/p&gt;
&lt;p&gt;Based on the above assumptions, we can make two enums to classify changes. For memory mapping,
renaming of a struct won’t affect the memory’s layout, so we don’t have a separate variant for that
case.&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;4&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;enum&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;StructDiff&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Insert,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Edit { diff: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;Vec&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;FieldDiff&amp;gt; },&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Move,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Delete,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;enum&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;FieldDiff&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Insert,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Edit { kind: FieldEditKind },         &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// in-place edit&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Move { edit: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;Option&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;FieldEditKind&amp;gt; }, &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// move &amp;amp; optional edit&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Delete,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;enum&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;FieldEditKind&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    ConvertType,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    Rename,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With this knowledge we can create a &lt;code&gt;refine(insertion: Diff, deletion: Diff) -&gt; Option&amp;#x3C;StructDiff&gt;&lt;/code&gt;
function that tries to map pairs of Myers diff insertions and deletions to a &lt;code&gt;StructDiff::Edit&lt;/code&gt; or
&lt;code&gt;StructDiff:Move&lt;/code&gt;. If a &lt;code&gt;Diff&lt;/code&gt; cannot be refined, it is respectively labelled as
&lt;code&gt;StructDiff:Insert&lt;/code&gt; or &lt;code&gt;StructDiff::Delete&lt;/code&gt;. The pseudocode of our hot reloading algorithm would
look something like this:&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;5&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;hotreload&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(old_lib, new_lib) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; diff = myers::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;diff&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(old_lib.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;struct_types&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(), new_lib.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;struct_types&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; refined_diff = {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; (insertions, deletions) = diff.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; insertion &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; insertions {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; deletion &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; deletions {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// try to find an optimal pair using `refine`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// add unused insertions &amp;amp; deletions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      result&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;map_memory&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(old_lib.struct_instances, refined_diff);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To find &lt;em&gt;an optimal pair&lt;/em&gt; we first calculate the number of changes necessary to convert a deleted
struct’s fields to an inserted struct’s fields - for all possible pairs - using Myers diff
algorithm. Then we perform a greedy search for &lt;code&gt;(insertion, deletion)&lt;/code&gt; pairs with the least number
of changes; until there are no viable candidates left. When a pair does not require any changes to
its fields, the struct was merely &lt;em&gt;moved&lt;/em&gt;; otherwise it was &lt;em&gt;edited&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;For an &lt;em&gt;edited&lt;/em&gt; struct we need to also determine &lt;strong&gt;how&lt;/strong&gt; its fields differ from the old struct.
This is where our assumptions come into play:&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;6&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;field_diff&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(old_fields, new_fields) -&amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;Vec&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;FieldDiff&amp;gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; diff = myers::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;diff&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(old_fields, new_fields);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; (insertions, deletions) = diff.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; (insertions, deletions) = {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; insertion &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; insertions {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; deletion &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; deletions {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// find all fields with the same name and type;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// i.e. `FieldDiff::Move { edit: None }`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Continue the search with all unused differences&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        (unused_insertions, unused_deletions)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; (insertions, deletions) = {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; insertion &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; insertions {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; deletion &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; deletions {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// find all fields with the same name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// If moved, `FieldDiff::Move { edit: Some(FieldEditKind::ConvertType) }`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// else, `FieldDiff::Edit { kind: FieldEditKind::ConvertType }`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Continue the search with all unused differences&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        (unused_insertions, unused_deletions)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; (insertions, deletions) = {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; insertion &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; insertions {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; deletion &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; deletions {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// find all fields with the same type&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// choose the pair with the shortest *move*&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// If moved, `FieldDiff::Move { edit: Some(FieldEditKind::Rename) }`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// else, `FieldDiff::Edit { kind: FieldEditKind::Rename }`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;            }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Continue the search with all unused differences&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        (unused_insertions, unused_deletions)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// add unused insertions &amp;amp; deletions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    result&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Step 2 takes priority over step 3 because the uniqueness of field names in a struct allows us to
assume with reasonable certainty that the fields were intended to be mapped.&lt;/p&gt;
&lt;h4&gt;Memory Mapping&lt;/h4&gt;
&lt;p&gt;That wraps up the calculation of a refined diff between an old and new list of struct types. Using
the refined diff and Mun’s symbols we can now trivially create a mapping that maps old to new memory
addresses for all fields, and apply this mapping to all heap-allocated struct instances.&lt;/p&gt;
&lt;p&gt;Hopefully I was able to convey the algorithm clearly, but in case you have any questions feel free
to ask them on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;.
You can also dive directly into the &lt;a href=&quot;https://github.com/mun-lang/mun/blob/0df0317069e4bdff40005e14b975b300db5fbe50/crates/mun_memory/src/diff/myers.rs#L15&quot;&gt;Myers diff&lt;/a&gt;, &lt;a href=&quot;https://github.com/mun-lang/mun/blob/0df0317069e4bdff40005e14b975b300db5fbe50/crates/mun_memory/src/diff.rs#L167&quot;&gt;struct diff&lt;/a&gt;,
&lt;a href=&quot;https://github.com/mun-lang/mun/blob/0df0317069e4bdff40005e14b975b300db5fbe50/crates/mun_memory/src/diff.rs#L291&quot;&gt;field diff&lt;/a&gt;, &lt;a href=&quot;https://github.com/mun-lang/mun/blob/0df0317069e4bdff40005e14b975b300db5fbe50/crates/mun_memory/src/mapping.rs#L41&quot;&gt;diff to mapping conversion&lt;/a&gt;, or
&lt;a href=&quot;https://github.com/mun-lang/mun/blob/0df0317069e4bdff40005e14b975b300db5fbe50/crates/mun_memory/src/gc/mark_sweep.rs#L205&quot;&gt;memory mapping&lt;/a&gt; source code on our &lt;a href=&quot;https://github.com/mun-lang/mun&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .mtk3 { color: #6A9955; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk15 { color: #C586C0; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - March 2020]]></title><description><![CDATA[A lot of things that we cannot fully control are currently going on in the world. The Mun community and Core Team are trying to make the…]]></description><link>https://mun-lang.org/blog/2020/04/02/this-month-march/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/04/02/this-month-march/</guid><pubDate>Thu, 02 Apr 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A lot of things that we cannot fully control are currently going on in the world. The Mun community and Core Team are trying to make the best of the situation and have once again made great strides; the recently obtained MOSS grant giving us an additional productivity boost!&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;Our community has made great progress on the integration of the &lt;a href=&quot;https://crates.io/crates/annotate-snippets&quot;&gt;annotate-snippets&lt;/a&gt; crate. Hopefully we will be able to merge their &lt;a href=&quot;https://github.com/mun-lang/mun/pull/91&quot;&gt;PR&lt;/a&gt; soon.&lt;/p&gt;
&lt;p&gt;We have added new &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issues&lt;/em&gt;&lt;/a&gt; on Github, so if you want to get involved with Mun please check them out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Replace return type annotation &lt;code&gt;:&lt;/code&gt; with &lt;code&gt;-&gt;&lt;/code&gt;&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/issues/105&quot;&gt;[issue#105]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Implement slab allocator to store &lt;code&gt;ObjectInfo&amp;#x3C;T&gt;&lt;/code&gt;&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/issues/106&quot;&gt;[issue#106]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: add type aliases&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/issues/110&quot;&gt;[issue#110]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;v0.2 progress&lt;/h4&gt;
&lt;p&gt;We still had two major features left on our &lt;a href=&quot;https://trello.com/b/ZcMiREnC/mun-roadmap&quot;&gt;v0.2 roadmap&lt;/a&gt;: &lt;strong&gt;garbage collection&lt;/strong&gt; and &lt;strong&gt;struct hot reloading&lt;/strong&gt;. This month we were able to finish the former and started on foundational work for the latter; with a projected release date of Mun v0.2 by early May:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat(runtime): add marshalling of value structs&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/93&quot;&gt;[PR#93]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      x: int,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      y: int&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;foo_new&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(x: int, y: int): Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      Foo { x: x, y: y, }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;foo_add&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(foo: Foo): int { foo.x + foo.y }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; lib_dir = env::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;nth&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Expected path to a Mun library.&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; runtime = RuntimeBuilder::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(lib_dir)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;spawn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Failed to spawn Runtime&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// The Mun compiler automatically generates a wrapper for `pub fn`s that&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// contain `struct(value)` arguments or return types, which allocates the&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// marshalled data in the runtime&amp;#39;s allocator.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; foo: StructRef = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;foo_new&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;2i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; x = foo.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;x&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; y = foo.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, x + &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      foo.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;x&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, y).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: extern functions&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/96&quot;&gt;[PR#96]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;2&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;/// This is a function that does not have an implementation in Mun but instead is linked &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;/// dynamically when loading the assembly&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;extern&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;tick_the_system&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// The extern functions can be called like any other Mun function&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;tick_the_system&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: object ptr indirection&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/97&quot;&gt;[PR#97]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: size and alignment in type info&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/98&quot;&gt;[PR#98]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: garbage collector (defaults to mark&amp;#x26;sweep)&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/99&quot;&gt;[PR#99]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Quality Assurance&lt;/h4&gt;
&lt;p&gt;Our unceasing efforts to improve code coverage have resulted in several PRs focussed on new tests (and consequent fixes) - including our 100th PR!! 🎉&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Replace grcov with tarpaulin for test coverage&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/100&quot;&gt;[PR#100]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix(code_gen): incremental compilation&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/101&quot;&gt;[PR#101]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;test(code_gen): add incremental compilation test&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/102&quot;&gt;[PR#102]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix: name of type table global&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/108&quot;&gt;[PR#108]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are always trying to improve metrics for objectively tracking quality as we progress. We’ve previously talked about how unit and integration tests are a big part of our development process. This month we’ve added &lt;a href=&quot;https://github.com/mun-lang/mun/pull/104&quot;&gt;performance benchmarks&lt;/a&gt; using &lt;a href=&quot;https://crates.io/crates/criterion&quot;&gt;Criterion&lt;/a&gt;, allowing us to do our first optimisations in the Mun Runtime.&lt;/p&gt;
&lt;img src=&quot;/a0a51c1487face6dc51f5c37c44b8c78/empty-violin.svg&quot; alt=&quot;Violin plot of an `empty` function call&quot; width=&quot;100%&quot;&gt;
&lt;p&gt;The violin plot above compares &lt;strong&gt;function invocation overhead&lt;/strong&gt; of embedded languages (Mun, LuaJIT, Wasm) with the raw performance of Rust by invoking an empty function that merely returns the input argument. The &lt;a href=&quot;https://crates.io/crates/wasmer&quot;&gt;Wasmer&lt;/a&gt; runtime was used to execute Wasm.&lt;/p&gt;
&lt;p&gt;Please note that Rust takes around 675 ps and is thus not visible on the above scale. For clarity, below you can see the respective PDFs of function call times in order of speed (less is better); i.e. for Rust, Mun, Wasm, LuaJIT (from left to right, top to bottom).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/51d9d0eadb8d1d02f059c1689ae2f4c1/empty-rust-pdf.svg&quot; alt=&quot;PDF of an `empty` function call time using Rust&quot; width=&quot;450&quot; height=&quot;300&quot;&gt;&lt;img src=&quot;/e5ee762117b93f38468f30da716bc042/empty-mun-pdf.svg&quot; alt=&quot;PDF of an `empty` function call time using Mun&quot; width=&quot;450&quot; height=&quot;300&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/5fd4b0442903c55657d822907afc3d23/empty-wasm-pdf.svg&quot; alt=&quot;PDF of an `empty` function call time using Wasm (with wasmer runtime)&quot; width=&quot;450&quot; height=&quot;300&quot;&gt;&lt;img src=&quot;/7dfeb4d315a25360706eb2166db8ae47/empty-luajit-pdf.svg&quot; alt=&quot;PDF of an `empty` function call time using LuaJIT&quot; width=&quot;450&quot; height=&quot;300&quot;&gt;&lt;/p&gt;
&lt;p&gt;To test &lt;strong&gt;arithmetic and logic performance&lt;/strong&gt;, we needed to minimise the function invocation overhead; enter Fibonacci. The line chart below shows the mean measured time for each language as the input argument increases (100, 200, 500, 1000, 4000, 8000). Even at this early stage, Mun’s dependence on LLVM as compiler backend allows us to achieve performance comparable to Rust.&lt;/p&gt;
&lt;img src=&quot;/b0f9b6ebde6a0c0a4b908b0a40c2c7bc/fibonacci-lines.svg&quot; alt=&quot;Line plot of `fibonacci` function calls&quot; width=&quot;100%&quot;&gt;
&lt;p&gt;&lt;em&gt;All benchmarks were run on an Intel(R) Core(TM) i7-6700HQ CPU @ 2.6 GHz with 16 GB DDR4 RAM.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The benchmark source code is included with the &lt;a href=&quot;https://github.com/mun-lang/mun&quot;&gt;Mun repository&lt;/a&gt;. Feel free to give it a try, add additional benchmarks, and share your findings with us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;, or &lt;a href=&quot;https://github.com/mun-lang/mun&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Last but not least, some miscellaneous quality of life improvements were also merged:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: only create symbols for public functions&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/92&quot;&gt;[PR#92]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix: removed the codecov token&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/94&quot;&gt;[PR#94]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;improvement: bump parking_lot dependency to 0.10&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/103&quot;&gt;[PR#103]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;improvement: bump failure dependency to 0.1.7&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/107&quot;&gt;[PR#107]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk7 { color: #B5CEA8; }
  .dark-default-dark .mtk8 { color: #CE9178; }
  .dark-default-dark .mtk3 { color: #6A9955; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - February 2020]]></title><description><![CDATA[Mun awarded MOSS grant We are very proud to announce that Mun has been awarded a $15K grant as part of the MOSS Mission Partners track. Its…]]></description><link>https://mun-lang.org/blog/2020/03/10/this-month-february/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/03/10/this-month-february/</guid><pubDate>Tue, 10 Mar 2020 00:00:00 GMT</pubDate><content:encoded>&lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 900px; &quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/da7c723b7f76ac889907dbaa786264f2/c2d13/moss-banner.png&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 27.999999999999996%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAIAAABM9SnKAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA6ElEQVQY03WQP2+DMBDF/WURCxMMzAxI8IkytB0yN1OXSqWqhMDGxoACxBhi+65SEkVR//zGp3t37x3BX1ilFt6cu25hdJOt5o1bV0QEAOccANwniXPOXgAAay0irtsmZFdRJrkYjqPsB2MMXtw/zpAoijzP830/CIIwDMuy1FrXNW2FmKaZMUYpPakVceVfb0/P+6L4lFJeg5Asy9I0TZIkjuM8zyml1lre8GmeORcfRdEwtp0tgu6q993u5fB6qKr6Zn6Mce/jplH1nej7k2xxUfgP5E8VAM3QG8HNeISH1c5dX3bTvgG5WUsVdWVY5gAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Mun awarded MOSS grant&quot; title=&quot;Mun awarded MOSS grant&quot; src=&quot;/static/da7c723b7f76ac889907dbaa786264f2/1cfc2/moss-banner.png&quot; srcset=&quot;/static/da7c723b7f76ac889907dbaa786264f2/3684f/moss-banner.png 225w,
/static/da7c723b7f76ac889907dbaa786264f2/fc2a6/moss-banner.png 450w,
/static/da7c723b7f76ac889907dbaa786264f2/1cfc2/moss-banner.png 900w,
/static/da7c723b7f76ac889907dbaa786264f2/21482/moss-banner.png 1350w,
/static/da7c723b7f76ac889907dbaa786264f2/d61c2/moss-banner.png 1800w,
/static/da7c723b7f76ac889907dbaa786264f2/c2d13/moss-banner.png 2560w&quot; sizes=&quot;(max-width: 900px) 100vw, 900px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;h4&gt;Mun awarded MOSS grant&lt;/h4&gt;
&lt;p&gt;We are very proud to announce that Mun has been awarded a $15K grant as part of the &lt;a href=&quot;https://www.mozilla.org/en-US/moss/mission-partners&quot;&gt;MOSS Mission Partners&lt;/a&gt; track. Its an honour for an established open-source company like Mozilla to put their faith in our mission and capabilities. With Mozilla’s generous support, we are able to boost the Core Team’s efforts to finish hot reloadable data structures during the coming months.&lt;/p&gt;
&lt;p&gt;Our goal is to support Mun code with both stack-allocated and heap-allocated data structures, which can be hot reloaded from Rust, C, and C++. A garbage collector will be used to manage heap-allocated structs. Major milestones include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Language support for structs (records, tuples, unit structs)&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Record&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; { a: float, b: int }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Tuple&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(Record)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Unit&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Language support for structs with different memory management models&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;gc&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Gc&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(int);         &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Garbage collected&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Value&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(int);   &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Passed by value&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Default&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(Value);      &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Defaults to `struct(gc)`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Marshalling of structs to Rust, C, and C++&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;2&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; value: StructRef = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;value_new&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;5i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;assert!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(value.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;10i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;is_ok&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;assert_eq!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(Ok(&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;10i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;), value.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;15i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;assert_eq!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(Ok(&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;15i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;), value.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; default: StructRef = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;default_new&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, value).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;cpp&quot; data-index=&quot;3&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; value = &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;mun&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;mun&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;(*runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;value_new&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;assert&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;assert&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; == *&lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;assert&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; == *&lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;int64_t&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;mun&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;mun&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;(*runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;default_new&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, value).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Our complete roadmap for the MOSS grant milestones can be found on &lt;a href=&quot;https://trello.com/b/ZcMiREnC/mun-roadmap&quot;&gt;Trello&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Acknowledgements&lt;/h4&gt;
&lt;p&gt;We would also like to thank Erlend for introducing us to and encouraging us to apply for the MOSS grant. If it weren’t for his confidence in Mun - at an early stage - we would not have thought ourselves ready to apply.&lt;/p&gt;
&lt;h4&gt;Next steps&lt;/h4&gt;
&lt;p&gt;The MOSS grant marks a great achievement for our team, but we don’t plan on stopping here. We want to keep improving and expanding Mun; and need your help to do so. Are you interested in contributing to Mun or do you just want to receive the latest updates? Then join us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt;, follow us on &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;, or watch us on &lt;a href=&quot;https://github.com/mun-lang/mun&quot;&gt;Github&lt;/a&gt;. If you care about our mission but cannot aid in the development, please consider becoming a sponsor on our &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt;.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .mtk3 { color: #6A9955; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk8 { color: #CE9178; }
  .dark-default-dark .mtk7 { color: #B5CEA8; }
  .dark-default-dark .mtk12 { color: #9CDCFE; }
  .dark-default-dark .mtk15 { color: #C586C0; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - January 2020]]></title><description><![CDATA[The dawning of a new year is often marked by reflection and the conception of resolutions. We felt that the goals we had previously set for…]]></description><link>https://mun-lang.org/blog/2020/01/31/this-month-january/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/01/31/this-month-january/</guid><pubDate>Fri, 31 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The dawning of a new year is often marked by reflection and the conception of resolutions. We felt that the goals we had previously set for Mun v0.2 were still true, so with the help of our community we pushed forward with our &lt;a href=&quot;https://trello.com/b/ZcMiREnC/mun-roadmap&quot;&gt;plans&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;The first PR of the year was made by a new community contributor. Welcome! Their PR was quickly followed by some PRs from a recurring contributor. These are some examples of &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22&quot;&gt;&lt;em&gt;good first issues&lt;/em&gt;&lt;/a&gt; that we hope will invite new contributors into our community, while helping improve the quality of life for our users and developers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: renamed &lt;code&gt;public&lt;/code&gt; to &lt;code&gt;pub&lt;/code&gt; and removed some un-used functions&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/26&quot;&gt;[PR#26]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;test: add test to check if compiler output strings is valid utf8&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/67&quot;&gt;[PR#67]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: replace &lt;code&gt;CStr::from_ptr(ptr).to_str()&lt;/code&gt; with &lt;code&gt;from_utf8_unchecked&lt;/code&gt;&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/66&quot;&gt;[PR#66]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: compiled libraries have &lt;code&gt;munlib&lt;/code&gt; extension instead of &lt;code&gt;dll&lt;/code&gt;/&lt;code&gt;so&lt;/code&gt;&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/75&quot;&gt;[PR#75]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix(hotreloading): no more ‘successfully compiled’ message if code has errors&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/78&quot;&gt;[PR#78]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix(diagnostic): move console cursor to new line after error log&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/79&quot;&gt;[PR#79]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;test: add unit tests for &lt;code&gt;LineIndex::line_str&lt;/code&gt;&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/86&quot;&gt;[PR#86]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A community member independently wrote a &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=0x9ef.vscode-mun&quot;&gt;VSCode plugin&lt;/a&gt; for Mun syntax highlighting (&lt;a href=&quot;https://github.com/0x9ef/vscode-mun&quot;&gt;source&lt;/a&gt;), for which we are very grateful!&lt;/p&gt;
&lt;p&gt;The decision to call hot reloading-enabled libraries &lt;code&gt;*.munlib&lt;/code&gt; is another great example of our community’s involvement. It was coined by one of our community members on our &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt; and consequently received most upvotes.&lt;/p&gt;
&lt;p&gt;If you like our vision of a hot reloading-powered world and would like to be a part of our journey, then join us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt;, follow us on &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;, or watch us on &lt;a href=&quot;https://github.com/mun-lang/mun&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;v0.2 progress&lt;/h4&gt;
&lt;p&gt;In december we had already implemented language support for data structures, but &lt;a href=&quot;https://github.com/mun-lang/mun/pull/64&quot;&gt;[PR#64]&lt;/a&gt; was not merged until earlier this month. That allowed our focus to shift to integrating structs with the Mun runtime, support for external (non-Mun) functions, Mun-Rust interoperability, and Mun-C interoperability:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: use extern functions in dispatch table&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/90&quot;&gt;[PR#90]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;intrinsics!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;/// Allocates a chunk of memory in the runtime.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;malloc&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(size: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, alignment: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) -&amp;gt; *&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;u8&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: add marshalling of structs&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/83&quot;&gt;[PR#83]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;gc&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      n: int,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      b: Bar,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;gc&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Bar&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;foo_new&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(bar: Bar): Foo {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      Foo { n: &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, b: bar, }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;bar_new&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(): Bar { Bar }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;2&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; lib_dir = env::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;nth&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Expected path to a Mun library.&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; runtime = RuntimeBuilder::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(lib_dir)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;spawn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Failed to spawn Runtime&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; bar: Struct = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;bar_new&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; foo: Struct = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;foo_new&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, bar).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; n1 = foo.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;n&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; n2 = foo.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;replace&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;n&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, n1 + &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      foo.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;n&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, n2).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Failed to change `Foo::n`&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;refactor: dynamically include struct information in type information&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/84&quot;&gt;[PR#84]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: add struct as marshallable field type&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/87&quot;&gt;[PR#87]&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;3&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; lib_dir = env::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;nth&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Expected path to a Mun library.&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; runtime = RuntimeBuilder::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(lib_dir)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;spawn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Failed to spawn Runtime&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; bar1: Struct = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;bar_new&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; foo: Struct = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;foo_new&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, bar1).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; bar2: Struct = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;bar_new&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      foo.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;b&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, bar2).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Failed to change `Foo::b`&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat(runtime_capi): add functions for interoperability&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/88&quot;&gt;[PR#88]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some bug fixes and miscellaneous quality of life improvements were also merged:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: add manual generation of abi, runtime-capi&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/69&quot;&gt;[PR#69]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;feat: better error message printing when signature is missing&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/80&quot;&gt;[PR#80]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix: struct initialization fix for non constants&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/81&quot;&gt;[PR#81]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;fix(struct): prevent erroneous caching of struct types&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/89&quot;&gt;[PR#89]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Roadmap&lt;/h4&gt;
&lt;p&gt;Next up on our &lt;a href=&quot;https://trello.com/b/ZcMiREnC/mun-roadmap&quot;&gt;TODO list&lt;/a&gt; are language support for external functions, wrapping up Mun-C interoperability, hot reloading of struct data, and garbage collection.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk3 { color: #6A9955; }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .mtk7 { color: #B5CEA8; }
  .dark-default-dark .mtk8 { color: #CE9178; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - December 2019]]></title><description><![CDATA[December is often perceived as a month that emphasizes family and togetherness. The Mun community for one really did pull together, allowing…]]></description><link>https://mun-lang.org/blog/2020/1/1/this-month-december/</link><guid isPermaLink="false">https://mun-lang.org/blog/2020/1/1/this-month-december/</guid><pubDate>Wed, 01 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;December is often perceived as a month that emphasizes family and togetherness. The Mun community for one really did pull together, allowing the core contributors to focus on making data structures a reality. This month, we’ve implemented:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Parsing of tuple data structures&lt;/strong&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Baz&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(float, int);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parsing and type inferencing of data structure literals&lt;/strong&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Bar&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      a: float,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Baz&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(float, int);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a: Foo = Foo;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; b: Bar = Bar { a: &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1.23&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; c = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;Baz&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1.23&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Indexing of data structure fields&lt;/strong&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;2&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; foo = Foo { a: &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1.23&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      foo.a&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; bar = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;Bar&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1.23&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      bar.&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      bar.&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generation of LLVM IR for data structure declarations, literals, and field indexing&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add data structure information to the Mun ABI&lt;/strong&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;c&quot; data-index=&quot;3&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;typedef&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;/// Struct name&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; *name;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;/// Struct fields&amp;#39; information&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; MunTypeInfo *field_types;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;/// Number of fields&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;uint16_t&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; num_fields;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  } MunStructInfo;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loading data structure information into the Mun Runtime&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We also made some minor fixes for the latest version of Rust and added &lt;a href=&quot;https://github.com/mun-lang/mun/pull/70&quot;&gt;type checking of binary operations&lt;/a&gt;:&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;4&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; b = &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; n = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; _ = b + n; &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// error: invalid binary operation&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Meanwhile, the Mun community has not been standing by idly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;We welcomed our first community contributions (PRs &lt;a href=&quot;https://github.com/mun-lang/mun/pull/66&quot;&gt;#66&lt;/a&gt; &amp;#x26; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/67&quot;&gt;#67&lt;/a&gt;) for two of our &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;good first issues&lt;/a&gt;. This is a great way for community members to gain an understanding of our codebase and workflow, while helping us implement important fixes and improvements.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A community member who works on &lt;a href=&quot;https://gitlab.com/veloren/veloren&quot;&gt;Veloren&lt;/a&gt;, created a proof of concept for Mun-powered hot reloading inside the game:&lt;/p&gt;
&lt;img src=&quot;/a52db7675bfc836cd6fd1599aad65837/veloren-hot-reload.gif&quot; alt=&quot;Mun hot reloading in Veloren&quot;&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Are you interested in contributing to Mun or do you just want to receive the latest updates? Then join us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt;, follow us on &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;, or watch us on &lt;a href=&quot;https://github.com/mun-lang/mun&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk7 { color: #B5CEA8; }
  .dark-default-dark .mtk3 { color: #6A9955; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - November 2019]]></title><description><![CDATA[November marked the first milestone release of Mun, providing the Mun community with a first chance to experiment with native hot reloading…]]></description><link>https://mun-lang.org/blog/2019/12/31/this-month-november/</link><guid isPermaLink="false">https://mun-lang.org/blog/2019/12/31/this-month-november/</guid><pubDate>Tue, 31 Dec 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;November marked the &lt;a href=&quot;../../../11/11/release-mun-v0-1-0/&quot;&gt;first milestone release of Mun&lt;/a&gt;, providing the Mun community with a first chance to experiment with native hot reloading. Leading up to the release we mainly focused on CI, improving documentation, and bug fixes; but also made a few more additions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Statically link &lt;code&gt;mun&lt;/code&gt; against the &lt;code&gt;liblld&lt;/code&gt; linker&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/37&quot;&gt;[PR#37]&lt;/a&gt;
This allows us to release Mun binaries without any external shared libraries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;return&lt;/code&gt; expressions&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/38&quot;&gt;[PR#38]&lt;/a&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(a:int):int {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a &amp;gt; &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      a - &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Start functions that return native types from the CLI&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/45&quot;&gt;[PR#45]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Community&lt;/h4&gt;
&lt;p&gt;We strongly believe that close community collaboration is needed to achieve our goal of natively supported hot reloading. To that end, we’ve published a &lt;a href=&quot;https://github.com/mun-lang/mun/blob/master/CONTRIBUTING.md&quot;&gt;contributing guide&lt;/a&gt;, a &lt;a href=&quot;https://github.com/mun-lang/mun/blob/master/CODE_OF_CONDUCT.md&quot;&gt;code of conduct&lt;/a&gt;, and &lt;a href=&quot;https://github.com/mun-lang/mun/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22&quot;&gt;good first issues&lt;/a&gt;. We’ve also seen an influx of active users on our &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord server&lt;/a&gt;, whom we try to include as much as possible when making design decisions; e.g. when brainstorming or through polls. If you are also interested in contributing to (or even just observing) this process, feel free to join. No restrictions on experience level or whatsoever. We welcome everyone and anyone!&lt;/p&gt;
&lt;h4&gt;Roadmap&lt;/h4&gt;
&lt;p&gt;Having released Mun v0.1, we set out to plan our next releases. Instead of setting ourselves hard deadlines, we work with to do lists that need to be completed before we release the next version. This means that we do not release Mun versions at a fixed cadence, but it does allow us to implement features and improvements with the care that we think they deserve.&lt;/p&gt;
&lt;p&gt;We are also strong believers in the philosophy of using what you make, so henceforth we’ll be adhering to a tick-tock release schedule; i.e. major feature releases are followed by improvement and bug fix releases during which we’ll be making demos that showcase the new Mun features while helping us discover flaws in our own designs.&lt;/p&gt;
&lt;p&gt;For the next version, we are planning to add language and hot reloading support for data structures,
loops, and external C functions. For the full roadmap of Mun, have a look at our &lt;a href=&quot;https://trello.com/b/ZcMiREnC/mun-roadmap&quot;&gt;Trello board&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;v0.2 progress&lt;/h4&gt;
&lt;p&gt;Some of these language features are already available on our &lt;code&gt;master&lt;/code&gt; branch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;loop&lt;/code&gt; expressions&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/60&quot;&gt;[PR#60]&lt;/a&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;fibonacci&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(n:int):int {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; b = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; i = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;loop&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; i &amp;gt; n {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; sum = a + b;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          a = b;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          b = sum;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          i += &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;break&lt;/code&gt; expressions&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/62&quot;&gt;[PR#62]&lt;/a&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;2&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;fibonacci&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(n:int):int {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; b = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; i = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;loop&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; i &amp;gt; n {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;              &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; sum = a + b;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          a = b;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          b = sum;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          i += &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;while&lt;/code&gt; expressions&lt;/strong&gt; &lt;a href=&quot;https://github.com/mun-lang/mun/pull/63&quot;&gt;[PR#63]&lt;/a&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;3&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;fibonacci&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(n:int):int {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; b = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; i = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; i &amp;lt;= n {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; sum = a + b;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          a = b;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          b = sum;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;          i += &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      a&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The most anticipated addition that Mun v0.2 will bring are data structures. As it is a big change that spans across the entire codebase, we maintain a separate branch and &lt;a href=&quot;https://github.com/mun-lang/mun/pull/64&quot;&gt;work-in-progress PR&lt;/a&gt; to track progress. So far we’ve implemented:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Parsing of record and unit data structures&lt;/strong&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;4&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Bar&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;Baz&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      a: float,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      b: int,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Name resolution for data structures&lt;/strong&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;5&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; foo: Foo;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; bar: Bar;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; baz: Baz;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to receive regular updates about our progress, join us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt;, follow us on &lt;a href=&quot;https://twitter.com/munlangorg&quot;&gt;Twitter&lt;/a&gt;, or watch us on &lt;a href=&quot;https://github.com/mun-lang/mun&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk15 { color: #C586C0; }
  .dark-default-dark .mtk7 { color: #B5CEA8; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[Rust 2020: Scalability]]></title><description><![CDATA[After the Rust Core Team’s call for blogs, all of my open-source time was being consumed by the Mun v0.1.0 release. This put me in the…]]></description><link>https://mun-lang.org/blog/2019/11/14/rust-2020-scalability/</link><guid isPermaLink="false">https://mun-lang.org/blog/2019/11/14/rust-2020-scalability/</guid><pubDate>Thu, 14 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After the Rust Core Team’s &lt;a href=&quot;https://blog.rust-lang.org/2019/10/29/A-call-for-blogs-2020.html&quot;&gt;call for blogs&lt;/a&gt;, all of my &lt;em&gt;open-source time&lt;/em&gt; was being consumed by the Mun v0.1.0 release. This put me in the unique position to draw inspiration from other 2020 blogs, before deciding to add my own perspective.&lt;/p&gt;
&lt;p&gt;To give some background, my Rust experience is mostly limited to the periphery. I am an active member of the Rust Gamedev WG, co-creator of and contributor to the Mun language - written in Rust - as well as some other crates relating to IO, web development, and C&amp;#x3C;-&gt;Rust bindings generation. As such I’d classify myself as a Rust language user.&lt;/p&gt;
&lt;p&gt;Following in the footsteps of &lt;a href=&quot;https://repnop.dev/posts/rust-2020&quot;&gt;repnop&lt;/a&gt;, I want to take a moment to acknowledge this years achievements. In particular I’d like to highlight the expansion and hard work of the Rust community by listing 2019’s newly created working groups:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Localization (community)&lt;/strong&gt;: Working on localization of compiler, documentation and websites.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rustfix (devtools)&lt;/strong&gt;: Improve cargo-fix and be a point of contact for other teams.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;async-await (compiler)&lt;/strong&gt;: Implementing async-await.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LLVM (compiler)&lt;/strong&gt;: Working with LLVM upstream to represent Rust in its development.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Meta (compiler)&lt;/strong&gt;: How compiler team organizes itself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MIR Optimizations (compiler)&lt;/strong&gt;: Write MIR optimizations and refactor the MIR to be more optimizable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parallel rustc (compiler)&lt;/strong&gt;: Making parallel compilation the default for rustc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Profile-guided optimization (compiler)&lt;/strong&gt;: Implementing profile-guided optimization for rustc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RFC 2229 (compiler)&lt;/strong&gt;: Make a closure capture individual fields of the variable rather than the entire composite variable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RLS 2.0 (compiler)&lt;/strong&gt;: Experimenting with a new compiler architecture tailored for IDEs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-Profile (compiler)&lt;/strong&gt;: Improving the -Z self-profile feature.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Governance (core)&lt;/strong&gt;: Working on improving Rust Governance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learning (compiler)&lt;/strong&gt;: Make the compiler easier to learn by ensuring that rustc-guide and api docs are ‘complete’.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Triage (release)&lt;/strong&gt;: Triage repositories under rust-lang organisation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secure Code&lt;/strong&gt;: Making it easy to write secure code in Rust.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resources (embedded)&lt;/strong&gt;: Managing various resources owned by the embedded WG.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Polonius (compiler)&lt;/strong&gt;: Experimental work on a new borrow-checker implementation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Game development&lt;/strong&gt;: Focusing on making rust the default choice for game development.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you list all newly &lt;a href=&quot;https://github.com/rust-lang/team&quot;&gt;registered&lt;/a&gt;&lt;sup&gt;1&lt;/sup&gt; working (sub-)groups like this, it’s quite an extensive list. And there are even more! E.g. the &lt;a href=&quot;https://github.com/rust-lang/wg-allocators&quot;&gt;Rust Allocators WG&lt;/a&gt; is not &lt;em&gt;officially&lt;/em&gt; listed on Rust’s team repository. These are efforts done by both Rust &lt;em&gt;core&lt;/em&gt; and &lt;em&gt;edge&lt;/em&gt; teams. It’s great that the Rust language, its ecosystem, and community contributions are growing rapidly, but this inherently comes with risks.&lt;/p&gt;
&lt;p&gt;In the words of Bilbo Baggins, “I feel thin, sort of stretched, like butter scraped over too much bread.” When a userbase grows, so do the number of requests for features and support. As such, the &lt;strong&gt;scalability&lt;/strong&gt; of a product (in this case the Rust language) is bound by the size and efficiency of the product team / community.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://xampprocky.github.io/public/blog/rust-2021&quot;&gt;XAMPPRocky’s blog&lt;/a&gt; points out that Rust contributors are at &lt;strong&gt;risk of burnout&lt;/strong&gt; or have already fallen prey to burnout, and calls for 2020 to be a year dedicated to making the Rust community efforts more sustainable. I couldn’t agree more, but would go a step further in saying that there are also other factors to consider when &lt;strong&gt;sustainably scaling&lt;/strong&gt; Rust.&lt;/p&gt;
&lt;p&gt;At its core, Rust is a systems language pursuing the trifecta: safety, concurrency, and speed. Its versatility has also attracted the attention of &lt;a href=&quot;https://github.com/rust-embedded/wg&quot;&gt;firmware&lt;/a&gt;, &lt;a href=&quot;https://www.arewewebyet.org&quot;&gt;web application&lt;/a&gt;, and &lt;a href=&quot;https://rust-gamedev.github.io/&quot;&gt;game&lt;/a&gt; development - to name a few. Community members spearheading Rust adoption in those fields probably contributed to the influx of new working groups. Whereas a lot of the sub-working groups have overlap in members, it seems that these new &lt;em&gt;edge&lt;/em&gt; teams are comprised of &lt;em&gt;new&lt;/em&gt; domain experts. If we don’t take care to keep the lines of communication short, this puts the Rust ecosystem at &lt;strong&gt;risk of fragmentation&lt;/strong&gt;. A fragmented community would greatly diminish its effectiveness.&lt;/p&gt;
&lt;p&gt;Unfortunately, Rust is still at a tipping point where most contributions happen on a voluntary basis. This means that contributors have at most a couple of hours a day to spend on Rust. Some large organisations are already &lt;a href=&quot;https://users.rust-lang.org/t/rust-in-large-organizations-meeting&quot;&gt;using Rust&lt;/a&gt;, but it would be a huge &lt;strong&gt;influx of resources&lt;/strong&gt; if the private sector would be more involved with the development of Rust itself.&lt;/p&gt;
&lt;h4&gt;Conclusion&lt;/h4&gt;
&lt;p&gt;In my Rust 2020 blog I tried to shy away from specific feature requests, instead zooming out to look at the Rust ecosystem as a whole. As a community, we’ve achieved great things but we should take care not to crumble under the weight of a scaling language and ecosystem. We all need to come together to ensure that Rust can &lt;strong&gt;sustainably scale&lt;/strong&gt; - be it in large organisations, communities, or codebases.&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; My sincere apologies if I missed any working groups. Please let me know and I’ll update the list.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[Release - Mun v0.1.0]]></title><description><![CDATA[We are proud to present Mun v0.1.0 - our
first milestone release. As a language, Mun is still far from production-ready, but this release…]]></description><link>https://mun-lang.org/blog/2019/11/11/release-mun-v0-1-0/</link><guid isPermaLink="false">https://mun-lang.org/blog/2019/11/11/release-mun-v0-1-0/</guid><pubDate>Mon, 11 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We are proud to present &lt;a href=&quot;https://github.com/mun-lang/mun/releases/tag/v0.1.0&quot;&gt;Mun v0.1.0&lt;/a&gt; - our
first milestone release. As a language, Mun is still &lt;em&gt;far from production-ready&lt;/em&gt;, but this release
gives you a glimpse of what natively supported hot reloading will look like in the future. The
purpose of this release is to showcase our progress and
&lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;gather feedback&lt;/a&gt; from those brave souls willing to try out Mun at this
early stage.&lt;/p&gt;
&lt;p&gt;To get started, read the &lt;a href=&quot;https://docs.mun-lang.org/&quot;&gt;Mun Book&lt;/a&gt; and have a look at our
&lt;a href=&quot;https://github.com/mun-lang/mun/tree/master/crates/mun_runtime/examples&quot;&gt;Rust&lt;/a&gt; and
&lt;a href=&quot;https://github.com/mun-lang/example-cpp&quot;&gt;C++&lt;/a&gt; examples.&lt;/p&gt;
&lt;h4&gt;Mun Language&lt;/h4&gt;
&lt;p&gt;So far, the Mun language supports boolean, integer and float native types, variable assignment,
logical and arithmetic operators, function definitions and if-else control flow.&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; result = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;fibonacci&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;nth&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Comments: Mun natively supports bool, float, and int&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; is_true = &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; var: float = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0.5&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk3&quot;&gt;// The order of function definitions doesn&amp;#39;t matter&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;fibonacci&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(n:int):int {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// If-else statements are also expressions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; fib = &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; n &amp;lt;= &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    } &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;fibonacci&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(n-&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) + &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;fibonacci&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(n-&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Mun allows implicit returns&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    fib&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;nth&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(): int {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Mun allows explicit returns&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Mun Runtime&lt;/h4&gt;
&lt;p&gt;The compiler’s counterpart - the Mun Runtime - is capable of hot reloading functions and provides
useful diagnostics when runtime errors occur. As the Mun Runtime is written in Rust, it can be
easily embedded in Rust applications by adding the &lt;code&gt;mun_runtime&lt;/code&gt; crate as a dependency.&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; mun_runtime::{invoke_fn, RetryResultExt, RuntimeBuilder};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; std::env;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; lib_path = env::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;nth&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Expected path to a Mun library.&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; runtime = RuntimeBuilder::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(lib_path)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;spawn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        .&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Failed to spawn Runtime&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;loop&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; n: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;nth&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; result: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;fibonacci&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, n).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;println!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;fibonacci({}) = {}&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, n, result);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk3&quot;&gt;// Hot reload code when there are changes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        runtime.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mun also &lt;a href=&quot;https://github.com/mun-lang/runtime-ffi/releases/tag/v0.1.0&quot;&gt;exposes&lt;/a&gt; a C API and
complementary C++ bindings for the Mun Runtime.&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;cpp&quot; data-index=&quot;2&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk15&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk15&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;mun/runtime.h&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;argc&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;char*&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;argv&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;[]) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; (argc &amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; lib_path = &lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;argv&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; (&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; runtime = &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;mun&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;make_runtime&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(lib_path)) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; (&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; n = &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;mun&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;int64_t&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;(*runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;nth&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; result = &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;mun&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;int64_t&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;(*runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;fibonacci&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, n).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::cout &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;fibonacci(&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &amp;lt;&amp;lt; n &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;) = &amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &amp;lt;&amp;lt; result &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::endl;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk3&quot;&gt;            // Hot reload code when there are changes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;runtime&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Future&lt;/h4&gt;
&lt;p&gt;For the Mun v0.1.0 release, a lot of effort has gone into building the foundations of Mun’s
Compiler, Runtime, test suite, and continuous integration. This will allow the core team and other
contributors to quickly add new language and runtime features in the future.&lt;/p&gt;
&lt;p&gt;For the next version, we are planning to add language and hot reloading support for data structures,
loops, and external C functions. For the full roadmap of Mun, have a look at our &lt;a href=&quot;https://trello.com/b/ZcMiREnC/mun-roadmap&quot;&gt;Trello board&lt;/a&gt;.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk3 { color: #6A9955; }
  .dark-default-dark .mtk7 { color: #B5CEA8; }
  .dark-default-dark .mtk15 { color: #C586C0; }
  .dark-default-dark .mtk8 { color: #CE9178; }
  .dark-default-dark .mtk12 { color: #9CDCFE; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[This Month in Mun - October 2019]]></title><description><![CDATA[We started October with the launch of our website, Discord server, and OpenCollective. Our ideas had advanced far enough that we felt ready…]]></description><link>https://mun-lang.org/blog/2019/10/28/this-month-october/</link><guid isPermaLink="false">https://mun-lang.org/blog/2019/10/28/this-month-october/</guid><pubDate>Mon, 28 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We started October with the launch of our &lt;a href=&quot;https://mun-lang.org&quot;&gt;website&lt;/a&gt;, &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord server&lt;/a&gt;, and &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;OpenCollective&lt;/a&gt;. Our ideas had advanced far enough that we felt ready to share our vision, but it was still exciting to see how the community would receive our ideas. To our surprise the announcement attracted a larger audience than anticipated - thankfully most of the feedback was positive. Where possible we tried to engage with the community to provide clarity and improve our website accordingly. If you still have any feedback on our website or just want more information, feel free to reach out to us on &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Having built a runtime prototype and framework for lexing, parsing, type checking, and LLVM IR code generation; our goal for the remainder of October was to extend, polish, and stabilise this into a Mun v0.1 release.&lt;/p&gt;
&lt;h4&gt;Stability&lt;/h4&gt;
&lt;p&gt;To guarantee that this and future releases operate as expected, we spent a lot of time developing tools to test code quality and integrating those tools into our continuous integration pipeline. As part of this effort we implemented snapshot testing for &lt;a href=&quot;https://github.com/mun-lang/mun/blob/aa42189db032e0cfc2399ef6c8f50ab08c6680f7/crates/mun_syntax/src/tests/lexer.rs&quot;&gt;lexing&lt;/a&gt;, &lt;a href=&quot;https://github.com/mun-lang/mun/blob/aa42189db032e0cfc2399ef6c8f50ab08c6680f7/crates/mun_syntax/src/tests/parser.rs&quot;&gt;parsing&lt;/a&gt;, &lt;a href=&quot;https://github.com/mun-lang/mun/blob/aa42189db032e0cfc2399ef6c8f50ab08c6680f7/crates/mun_hir/src/ty/tests.rs&quot;&gt;type checking&lt;/a&gt;, and &lt;a href=&quot;https://github.com/mun-lang/mun/blob/aa42189db032e0cfc2399ef6c8f50ab08c6680f7/crates/mun_codegen/src/test.rs&quot;&gt;code generation&lt;/a&gt; through the use of the &lt;a href=&quot;https://docs.rs/insta&quot;&gt;insta&lt;/a&gt; crate, &lt;a href=&quot;https://github.com/mun-lang/mun/blob/769bfe5a3a921bcc5289217e692f7f8cf19648ab/crates/mun_runtime/src/test.rs&quot;&gt;integration testing of the compiler and runtime&lt;/a&gt;, &lt;a href=&quot;https://codecov.io/gh/mun-lang/mun&quot;&gt;test coverage metrics&lt;/a&gt;, &lt;a href=&quot;https://dev.azure.com/mun-lang/mun/_build&quot;&gt;CI&lt;/a&gt; that continuously builds our code on all Tier 1 platforms (64-bit Windows, macOS, 64-bit Linux), and &lt;code&gt;cargo fmt&lt;/code&gt; and &lt;code&gt;cargo clippy&lt;/code&gt; compliance. This test suite allows us to confidently accept pull requests without introducing regressions and makes it easier for other developers to &lt;a href=&quot;https://github.com/mun-lang&quot;&gt;contribute to Mun&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Mun language&lt;/h4&gt;
&lt;p&gt;For Mun v0.1 we set out to extend the language specification with &lt;a href=&quot;https://github.com/mun-lang/mun/pull/9&quot;&gt;function calls&lt;/a&gt;, &lt;a href=&quot;https://github.com/mun-lang/mun/pull/23&quot;&gt;boolean operations&lt;/a&gt;, and &lt;a href=&quot;https://github.com/mun-lang/mun/pull/24&quot;&gt;if-then-else statements&lt;/a&gt;. With these features in place, we are able to demo Mun’s hot reloading capabilities using fibonacci:&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;fibonacci&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(n:int):int {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; n &amp;lt;= &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    } &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;fibonacci&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(n-&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) + &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;fibonacci&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(n-&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Mun runtime&lt;/h4&gt;
&lt;p&gt;Whenever we add new semantics to the Mun language, we also want to support hot reloading for it. To hot reload functions, the Mun compiler looks up a function pointer in a dispatch table and calls that function instead of inlining function calls. When the compiled library is loaded into the runtime (i.e. on startup or when hot reloading), a process called &lt;em&gt;runtime linking&lt;/em&gt; ensures that all those function lookups to internal and external functions map to the correct function addresses. This allows us to hot reload any function at the expense of a slight runtime overhead.&lt;/p&gt;
&lt;h4&gt;Embedding&lt;/h4&gt;
&lt;p&gt;When designing embedding of Mun into other languages, we wanted the developer experience to be as straightforward as possible. As such we wanted to offer language-specific bindings for some of the languages most likely to embed Mun. As the Mun runtime is written in Rust it became our first target, but we also developed a C API; its stable ABI allowing for the creation of similar bindings in most other languages. To illustrate this we also developed C++ bindings that utilize the C API.&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;mun&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(a:int, b:int):&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    a==b&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We envisioned three modes of operation for a developer invoking the above Mun function:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Invoke a function (can fail)&lt;/li&gt;
&lt;li&gt;Retry an invocation once (can fail)&lt;/li&gt;
&lt;li&gt;Wait until the invocation succeeds&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both the &lt;code&gt;retry&lt;/code&gt; and &lt;code&gt;wait&lt;/code&gt; operations wait for hot reloaded code before trying again. The Rust and C++ syntax for invoking the &lt;code&gt;equal&lt;/code&gt; Mun function look as follows:&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;rust&quot; data-index=&quot;2&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; mun_runtime::{invoke_fn, MunRuntime, RetryResultExt, RuntimeBuilder};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; std::env;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; lib_dir = env::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;TARGET_LIB_PATH&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Expected path to a Mun library.&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; runtime = RuntimeBuilder::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(lib_dir).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;spawn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; b: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;764&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; c: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; = MunRuntime::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn2&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&amp;amp;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;equal&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, a, b).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;println!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;{} == {}? {}&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, a, b, c);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; c: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;equal&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, a, b).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;println!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;{} == {}? {}&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, a, b, c);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; c: &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;Result&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;_, _&amp;gt; =&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        MunRuntime::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn2&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;i64&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;(&amp;amp;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;equal&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;764&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;retry&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; c.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;is_ok&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;println!&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;{} == {}? {}&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, a, b, c.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;cpp&quot; data-index=&quot;3&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk15&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk15&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk15&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;mun/runtime.h&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;argc&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;char*&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;argv&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;[]) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; (argc &amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; (&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; runtime = &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;mun&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;make_runtime&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;argv&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;])) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;int64_t&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; a = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;int64_t&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; b = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; result1 = &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;mun&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;(*runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;equal&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, a, b).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; result2 = &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;mun&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;(*runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;equal&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, a, b).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;wait&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; result3 = &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;mun&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;invoke_fn&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;&amp;gt;(*runtime, &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;equal&amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;, a, b).&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;retry&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::cout &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Result1: &amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;to_string&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(result1) &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::endl;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::cout &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Result2: &amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;to_string&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(result2) &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::endl;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; (&lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;result3&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;is_ok&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;()) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::cout &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;quot;Result3: &amp;quot;&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;to_string&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;result3&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;()) &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;::endl;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk15&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We are hard at work putting the finishing touches to Mun v0.1, so stay tuned!&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk15 { color: #C586C0; }
  .dark-default-dark .mtk7 { color: #B5CEA8; }
  .dark-default-dark .mtk8 { color: #CE9178; }
  .dark-default-dark .mtk12 { color: #9CDCFE; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[Going live]]></title><description><![CDATA[After a successful first Mun jam, our ideas had advanced far enough that we felt ready to share our vision for Mun with the world. What…]]></description><link>https://mun-lang.org/blog/2019/10/6/go-live/</link><guid isPermaLink="false">https://mun-lang.org/blog/2019/10/6/go-live/</guid><pubDate>Sun, 06 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After a successful first Mun jam, our ideas had advanced far enough that we felt ready to share our vision for Mun with the world. What started as experimentation with hot reloading in Rust, has culminated in Mun: a programming language empowering creation through iteration.&lt;/p&gt;
&lt;h4&gt;Why another programming language?&lt;/h4&gt;
&lt;p&gt;It was never our goal to write a new language. We want to achieve quick developer iteration through natively supported hot reloading for data and functions. As no other language - that we know of - supports this, the easiest way to proof its feasibility is through a novel language. We are happy for existing languages to incorporate our findings in the future, and in that case would consider our goal achieved too.&lt;/p&gt;
&lt;h4&gt;Digital presence&lt;/h4&gt;
&lt;p&gt;Over the course of this week we launched several initiatives to inform, interact with, and muster support from the community. Our website - &lt;a href=&quot;https://mun-lang.org&quot;&gt;mun-lang.org&lt;/a&gt; - serves as a starting point for anyone who is new to Mun. To directly ask questions or provide feedback to the Mun Development Team we launched the &lt;a href=&quot;https://discord.gg/SfvvcCU&quot;&gt;Mun Discord server&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Support Us&lt;/h4&gt;
&lt;p&gt;Mun’s development is being done in our core contributor’s spare time. To further advance the project, we welcome any and all donations on &lt;a href=&quot;https://opencollective.com/mun&quot;&gt;Open Collective&lt;/a&gt;. We are proud to be partnering with the &lt;a href=&quot;https://amethyst.rs&quot;&gt;Amethyst Foundation&lt;/a&gt; as our fiscal sponsor, to ensure that your donations benefit Mun as much as possible.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
&lt;/style&gt;</content:encoded></item><item><title><![CDATA[Mun Jam #1]]></title><description><![CDATA[As we finally found ourselves in the same country, our two-man team decided to
get together for a Mun Jam. Our goal? Define an ABI for…]]></description><link>https://mun-lang.org/blog/2019/9/22/mun-jam-1/</link><guid isPermaLink="false">https://mun-lang.org/blog/2019/9/22/mun-jam-1/</guid><pubDate>Sun, 22 Sep 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As we finally found ourselves in the same country, our two-man team decided to
get together for a Mun Jam. Our goal? Define an ABI for sharing function and
type information between the Mun compiler and runtime, allowing us to integrate
both components into a single pipeline. In Mun, a single file or group of files
is compiled into - what we call - an assembly that can be hot reloaded at
runtime. To guarantee that argument and return types of functions in different
assemblies correspond, we need to expose their function and type information.
The Application Binary Interface (ABI) that is used to express these so-called
symbols adheres to the C ABI, to make it easier to integrate Mun with other
programming languages.&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;c&quot; data-index=&quot;0&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk15&quot;&gt;#ifndef&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;MUN_ABI_H_&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk15&quot;&gt;#define&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk11&quot;&gt;MUN_ABI_H_&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk15&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk8&quot;&gt;&amp;lt;stdint.h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;typedef&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;uint8_t&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk12&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;} MunGuid;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;typedef&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    MunGuid guid;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; *name;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;} MunTypeInfo;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;typedef&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;enum&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    MunPrivacyPublic = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    MunPrivacyPrivate = &lt;/span&gt;&lt;span class=&quot;mtk7&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;} MunPrivacy;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;typedef&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;uint8_t&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;MunPrivacy_t&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;typedef&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; *name;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; MunTypeInfo *arg_types;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; MunTypeInfo *return_type;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; *fn_ptr;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;uint16_t&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; num_arg_types;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk10&quot;&gt;MunPrivacy_t&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; privacy;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;} MunFunctionInfo;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk4&quot;&gt;typedef&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;struct&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; MunFunctionInfo *functions;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;mtk4&quot;&gt;uint32_t&lt;/span&gt;&lt;span class=&quot;mtk1&quot;&gt; num_functions;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk1&quot;&gt;} MunModuleInfo;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;&lt;span class=&quot;mtk15&quot;&gt;#endif&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;LLVM vs C ABI&lt;/h4&gt;
&lt;p&gt;Every assembly contains a get_symbol function that returns symbols for the
top-level module as a MunModuleInfo. As the Mun compiler already has a syntax
tree of all function signatures and types in the assembly, we can easily
generate the required symbols. Or so we thought. When we tested our compiled
assembly in the Rust-written runtime, the returned MunModuleInfo contained
corrupted data. After a search down the internet rabbit hole, we discovered the
cause. Take this function:&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;&quot; data-index=&quot;1&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;MunModuleInfo get_symbols()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Based on our understanding of LLVM, we generated the following IR:&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;&quot; data-index=&quot;2&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;define %struct.MunModuleInfo @get_symbols()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To discover possible discrepencies with C-style IR we ran clang (clang -S
-emit-llvm main.c), resulting in this output:&lt;/p&gt;
&lt;pre class=&quot;grvsc-container dark-default-dark&quot; data-language=&quot;&quot; data-index=&quot;3&quot;&gt;&lt;code class=&quot;grvsc-code&quot;&gt;&lt;span class=&quot;grvsc-line&quot;&gt;&lt;span class=&quot;grvsc-source&quot;&gt;define void @get_symbols(%struct.MunModuleInfo* noalias sret)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It turns out that the sret identifier is the culprit here. sret - which stands
for StructReturn - is apparently the way structs larger than the native pointer
size should be returned from C-style functions.&lt;/p&gt;
&lt;h4&gt;Type GUIDs&lt;/h4&gt;
&lt;p&gt;To communicate and recognize types across compilations, we need to specify a globally unique type identifier - or GUID. The GUID is generated by creating an MD5 hash from the type name and module path. Built-in types are a special case; for those we use the @core module path. E.g. for the &lt;code&gt;float&lt;/code&gt; type, we generate an MD5 hash using the &lt;code&gt;&quot;@core::float&quot;&lt;/code&gt; string.&lt;/p&gt;
&lt;style class=&quot;grvsc-styles&quot;&gt;
  .grvsc-container {
    overflow: auto;
    position: relative;
    -webkit-overflow-scrolling: touch;
    padding-top: 1rem;
    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));
    padding-bottom: 1rem;
    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));
    border-radius: 8px;
    border-radius: var(--grvsc-border-radius, 8px);
    font-feature-settings: normal;
    line-height: 1.4;
  }
  
  .grvsc-code {
    display: table;
  }
  
  .grvsc-line {
    display: table-row;
    box-sizing: border-box;
    width: 100%;
    position: relative;
  }
  
  .grvsc-line &gt; * {
    position: relative;
  }
  
  .grvsc-gutter-pad {
    display: table-cell;
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  .grvsc-gutter {
    display: table-cell;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter::before {
    content: attr(data-content);
  }
  
  .grvsc-source {
    display: table-cell;
    padding-left: 1.5rem;
    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));
    padding-right: 1.5rem;
    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));
  }
  
  .grvsc-source:empty::after {
    content: &apos; &apos;;
    -webkit-user-select: none;
    -moz-user-select: none;
    user-select: none;
  }
  
  .grvsc-gutter + .grvsc-source {
    padding-left: 0.75rem;
    padding-left: calc(var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem)) / 2);
  }
  
  /* Line transformer styles */
  
  .grvsc-has-line-highlighting &gt; .grvsc-code &gt; .grvsc-line::before {
    content: &apos; &apos;;
    position: absolute;
    width: 100%;
  }
  
  .grvsc-line-diff-add::before {
    background-color: var(--grvsc-line-diff-add-background-color, rgba(0, 255, 60, 0.2));
  }
  
  .grvsc-line-diff-del::before {
    background-color: var(--grvsc-line-diff-del-background-color, rgba(255, 0, 20, 0.2));
  }
  
  .grvsc-line-number {
    padding: 0 2px;
    text-align: right;
    opacity: 0.7;
  }
  
  .dark-default-dark {
    background-color: #1E1E1E;
    color: #D4D4D4;
  }
  .dark-default-dark .mtk15 { color: #C586C0; }
  .dark-default-dark .mtk4 { color: #569CD6; }
  .dark-default-dark .mtk11 { color: #DCDCAA; }
  .dark-default-dark .mtk8 { color: #CE9178; }
  .dark-default-dark .mtk1 { color: #D4D4D4; }
  .dark-default-dark .mtk12 { color: #9CDCFE; }
  .dark-default-dark .mtk7 { color: #B5CEA8; }
  .dark-default-dark .mtk10 { color: #4EC9B0; }
  .dark-default-dark .grvsc-line-highlighted::before {
    background-color: var(--grvsc-line-highlighted-background-color, rgba(255, 255, 255, 0.1));
    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, rgba(255, 255, 255, 0.5));
  }
&lt;/style&gt;</content:encoded></item></channel></rss>