<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>rust Archives - ClickedyClick</title>
	<atom:link href="https://gergely.imreh.net/blog/tag/rust/feed/" rel="self" type="application/rss+xml" />
	<link>https://gergely.imreh.net/blog/tag/rust/</link>
	<description>Life in real, complex and digital.</description>
	<lastBuildDate>Tue, 08 Dec 2015 05:18:51 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Language of the Month: Rust, the results</title>
		<link>https://gergely.imreh.net/blog/2015/12/lotm-rust-results/</link>
					<comments>https://gergely.imreh.net/blog/2015/12/lotm-rust-results/#comments</comments>
		
		<dc:creator><![CDATA[Gergely Imreh]]></dc:creator>
		<pubDate>Mon, 07 Dec 2015 06:13:43 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[bitmessage]]></category>
		<category><![CDATA[lotm]]></category>
		<category><![CDATA[rust]]></category>
		<guid isPermaLink="false">https://gergely.imreh.net/blog/?p=2167</guid>

					<description><![CDATA[<p>Every now and then I do a &#8220;Language of the Month&#8221; feature when I spend one month to learn a new programming language. This last month in November I&#8217;ve spent with Rust, and it&#8217;s time to take stock. Will look at the impression I had in this short time, show one project that I get done [&#8230;]</p>
<p>The post <a href="https://gergely.imreh.net/blog/2015/12/lotm-rust-results/">Language of the Month: Rust, the results</a> appeared first on <a href="https://gergely.imreh.net/blog">ClickedyClick</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Every now and then I do a &#8220;Language of the Month&#8221; feature when I spend one month to learn a new programming language. This last month in November <a href="https://gergely.imreh.net/blog/2015/11/language-of-the-month-rust/">I&#8217;ve spent with Rust</a>, and it&#8217;s time to take stock. Will look at the impression I had in this short time, show one project that I get done in Rust, and some ideas what I&#8217;d like to do with Rust in the future!</p>
<h2>Experience</h2>
<p>According to my time log, I have spent about 20 hours this month learning Rust. That&#8217;s way too little to have a good understanding, but definitely enough to have some educated guesses (and excitement, and horror , as appropriate). This time I&#8217;m generally very impressed as Rust comes across as indeed a very modern and smart language, although that modernness is mostly in the tooling and non-essential parts. It is also changing very quickly, for good and bad. Here are some, admittedly subjective and incomplete list of observations. Good is what I like, Bad what&#8217;s less nice IMHO, and Ugly is what&#8217;s imperfect or confusing (at this stage of my Rust learning):</p>
<h3>Good</h3>
<p>It&#8217;s great to see that <strong>documentation</strong> is a not an afterthought, but a <a href="https://doc.rust-lang.org/stable/book/documentation.html">core part</a>, that is making use a lot of modern development experience. Having a standard way to include example code in docstrings and actual tests are run on them to make sure the examples are also up-to-date with the code is a very cool concept. Also being able to auto-generate HTML documentation from the code is probably going to be standard in most new languages (I think <a href="http://golang.org/">Go</a> does that also, and other languages have gained similar optional tools)</p>
<p><span id="more-2167"></span></p>
<p>It&#8217;s also great to see how <strong>testing</strong> is a not an afterthought either. There are <a href="https://doc.rust-lang.org/stable/book/testing.html">a bunch of different ways</a> of including tests (in the same file, test file, directory with test, in documentation&#8230;), though most of the time there&#8217;s probably one way that fits the project the best and can use that.</p>
<p>Rust has some very interesting foundations, mostly on top of the <a href="https://doc.rust-lang.org/stable/book/references-and-borrowing.html">memory model</a> and <a href="https://doc.rust-lang.org/stable/book/traits.html">traits</a>, that take quite a bit of time to wrap one&#8217;s head around (I&#8217;m not there yet), but goes a very long way to <strong>eliminate programming by accident</strong> (or <a href="https://en.wikipedia.org/wiki/Programming_by_permutation">programming by permutation</a>): it makes the it much harder to write something, see whether it works as hoped, and if not, then try to change something little and try again. Here it does not really work anymore as there are way too many things that have to be correct for the code to run, and the best to get there is to <em>actually understand</em> how the code should work.</p>
<p><strong>Traits</strong> are intriguing, <a href="https://doc.rust-lang.org/stable/book/traits.html">they</a> remind me a bit of Python&#8217;s <a href="https://en.wikipedia.org/wiki/Duck_typing">duck typing</a>, though only similar. This also includes <a href="https://doc.rust-lang.org/book/generics.html">generics</a>, or parametric polymorphism. <a href="http://manishearth.github.io/blog/2015/05/27/wrapper-types-in-rust-choosing-your-guarantees/">Composed types</a> are also the bomb &#8211; once you understand it and stop doing permutations of them to try to get the code to compile. :)</p>
<p>Interesting use <strong>semicolons</strong>,  in particular for returning value when it is omitted on the last expression in a function (a bit like <a href="https://en.wikipedia.org/wiki/MATLAB">Matlab</a>, where it is used as which function results to print on the debug console, and which just use silently).</p>
<p>Having a way to mark <strong>unimplemented</strong> sections (as <a href="https://doc.rust-lang.org/std/macro.unimplemented!.html">part of the standard library</a>) is very pragmatic, I&#8217;m sure it came out of a lot of engineering experience.</p>
<p><a href="https://doc.rust-lang.org/book/strings.html">Strings</a> being <strong>UTF-8 by default</strong> is a great choice and probably necessary nowadays, even if more complex. (Python goes a long way, but not quite there yet)</p>
<p>I&#8217;m glad to see that <strong>lists can have trailing commas</strong> after the last element. That&#8217;s a little thing, but boy how much I cannot stand Javascript lists because of the lack of this leniency.</p>
<p><strong>Macros</strong> are a whole different level of power, if and when <a href="https://doc.rust-lang.org/stable/book/macros.html">understood</a>. It feels strange sometimes to mix &#8220;normal&#8221; functions and method with something that is just &#8220;sort of like a function&#8221;, but this is all part of the metal model. I see that they are useful, though they also come across as necessary only because of the design principles used in the language (and its relative verbosity). That also mean, that advanced Rust probably makes more use of macros than beginner&#8217;s Rust.</p>
<p><a href="https://doc.rust-lang.org/stable/book/enums.html">Enums</a> are data types containing a list of variants. <strong>Coverage checking in enum matching</strong> (&#8220;did I handle all possible cases?&#8221;) shows again that plenty of lessons learned are put to use in making Rust.</p>
<p><strong>Loop labels</strong> are cool too, they can come handy with <a href="http://rustbyexample.com/flow_control/loop/nested.html">nested loops</a> to handle things clearly with less boilerplate / extra variables.</p>
<p><strong>Cargo</strong> is a very interesting <a href="https://crates.io/">package manager</a>. Have separate concept for binaries and libraries, for debug and release builds, running tests, lint, documentation, set up cross-compiling, and so on. I can also see from bits and pieces that there&#8217;s a lot to learn about this too to enable really cool use cases.</p>
<h3>Bad</h3>
<p>Most of the difficulty I had was connected to the combined fact of Rust is <strong>pretty new and changes quickly</strong>. Because of this others&#8217; projects where I found answers to my questions could be already obsolete, the docs don&#8217;t go into enough detail to actually understand things well enough without a lot of practical trial and error, could find a programming pattern for a problem and it being already removed from the language, or the fact that (I think) the nightly builds are recommended to be used as they have the latest features enabled? This of course is not all bad, I feel that being a Rust developer now one could really leave a mark and contribute, learn a lot in unchartered territory and teach a lot of people because too few teachers are out there. It&#8217;s only troublesome when one just want to &#8220;solve a problem&#8221;, but then maybe other language is better to use.</p>
<p>Would love to see <strong>more documentation</strong> (and actual practical examples) to explore the memory model, reference and borrowing, traits, macros &#8211; these most powerful and useful parts of the language. This is connected to the previous step, and I think it&#8217;s up to us users to use them more, boil the examples down by experience and write the things up&#8230;</p>
<h3>Ugly</h3>
<p><strong>Type declarations</strong> are required for functions, but for variable assignments they are inferred. The <a href="https://doc.rust-lang.org/book/functions.html">docs say</a> it&#8217;s a sweet spot, but it strikes me a bit of schizophrenic. I often find that adding an explicit type to assignments makes things work a lot better here.</p>
<p>I find the <strong>docstrings</strong> hard to get going, eg. making them compatible to generate the library docs from inline documentation. I might have done something wrong, but even the example code in the Rust book does not seem to play with doc generation very well. Also include example code and testing code in the docstrings and the confusion amplifies.</p>
<p>The <strong>difference of method syntax</strong> between <a href="https://doc.rust-lang.org/book/method-syntax.html">associated functions and method calls</a> is probably a necessary one, it still feels somehow a bit of mental burden to carry (at least in the beginning, I&#8217;m sure it&#8217;s a beginner&#8217;s issue).</p>
<p><strong>Diverging functions</strong> are an interesting beast too: there&#8217;s a <a href="https://doc.rust-lang.org/reference.html#diverging-functions">different declaration</a> for functions that have no return value. I kinda see how doing things this way can fit Rust&#8217;s model of doing things, but is it really necessary to create a whole new concept and different patterns for it? I guess this case could be handled conceptually in many ways and this is just one&#8230;</p>
<p><strong>Need to import types</strong> from the standard library to be able to use some of their features, but some other features work automatically. This feels a bit of a halfway solution, though, might be necessary to keep the resulting binaries down (by not including what&#8217;s not needed), but that could probably be achieved more automatically?</p>
<p><strong>Attributes</strong> are flags in the code to (sort of) <a href="http://rustbyexample.com/attribute.html">tell Rust</a> to how to handle the different code sections. Enabling debug mode, adding info about tests (that the next test should actually fail to consider it a pass, etc..), and a lot more. They are very powerful so could be considered good, but there are so many of them and so sparsely discussed most of the time that they belong for me more to this section. Need more documentation, I believe.</p>
<h2>Project: Bitmessage Proof-of-Work library</h2>
<p>I wanted to actually do a project in Rust for practical experience. To do something short but still somewhat useful, I decided to create a <a href="https://bitmessage.org/wiki/Main_Page">Bitmessage</a> proof-of-work (PoW) library. I&#8217;ve already worked on it for a bit for other projects (trying to make some  OpenGL, and Parallella accelerated versions) so it was kinda familiar and tractable task in during the month.</p>
<p>The Bitmessage <a href="https://bitmessage.org/wiki/Proof_of_work">proof of work</a> in pseudocode is something like:</p>
<pre class="lang:default decode:true" title="Bitmessage proof-of-work pseudocode">initialHash = hash(dataToCheck)
resultHash = hash(hash( nonce || initialHash ))
trialValue = the first eight bytes of resultHash converted to an integer</pre>
<p>where &#8220;hash&#8221; is <a href="https://en.wikipedia.org/wiki/SHA-2">SHA512</a>, and the trialValue is compared to a target calculated from  the time-to-live of the message to be sent.</p>
<p>I took most of the inspiration from the Python version of this in the reference client, that reads:</p>
<pre class="lang:python decode:true" title="Bitmessage Proof-of-Work in Python">trialValue, = unpack('&gt;Q',hashlib.sha512(hashlib.sha512(pack('&gt;Q',nonce) + initialHash).digest()).digest()[0:8])</pre>
<p>Hard to beat a practical one-liner for clarity, but there&#8217;s a bit to say about performance.</p>
<p>I ended up creating <a href="https://github.com/imrehg/bmpow-rust">bmpow-rust</a>, that runs multithreaded calculation for this algorithm, using the <a href="https://github.com/DaGenix/rust-crypto">rust-crypto</a>. I&#8217;ve been through quite a bit of trial and error, both for the PoW algorithm and the threading.</p>
<p>For the PoW the hardest part was casting the data into suitable types that the different functions can pass them around correctly. How to get data from a caller in a shared library, how to <a href="https://github.com/BurntSushi/byteorder">set the endiannes</a>, how to pass it to the hasing function, then get the data out again. I know the current version is not great, especially as some modifications to the code that I think should not change the outcome actually does end up with changing it.</p>
<p>Basic threading  is dead simple as Rust promises it to be, but then the issue I had there is how to send data out of the different threads when a thread finds the right nonce and signal to the other threads to stop working. <a href="http://rustbyexample.com/std_misc/channels.html">Channels</a> are there to help (and they are brilliant), but the the memory model (borrowing and referencing) didn&#8217;t fit to how I thought it should be. Tried out 2-3 other libraries that implement similar messaging methods between threads, but in the end it turned out that channels are indeed the right choice &#8211; the trick was that I didn&#8217;t need to explicitly shut down threads, they were killed when the calling function finished, making the whole setup much simpler. I know I should add some more error checking into the code for niceness, though I think not strictly required by the problem being solved (and race conditions doesn&#8217;t matter, if multiple threads find nonces, any of them are suitable).</p>
<p>The result is this (likely horrifyingly bad) code to find the right nonce (so it does more than the pseudocode above):</p>
<pre class="lang:rust decode:true " title="Bitmessage proof-of-work worker">fn bmpow(target: u64, hash: [u8; 64], starter: u64, stepsize: u64, chan_out: Sender&lt;u64&gt;) {
    let mut nonce: u64 = starter;
    let mut algoresult;

    loop {
        let mut wtr = vec![];
        let mut result: [u8; 64] = [0; 64];
        let mut hasher_inner = Sha512::new();
        let mut hasher_outer = Sha512::new();

        nonce += stepsize;
        match wtr.write_u64::&lt;BigEndian&gt;(nonce) {
            Ok(_) =&gt; {},
            Err(e) =&gt; { println!("error writing endian: {}", e) },
        }
        hasher_inner.input(&amp;wtr);
        hasher_inner.input(&amp;hash);

        hasher_inner.result(&amp;mut result);
        hasher_outer.input(&amp;result);

        let mut result_outer: [u8; 64] = [0; 64];
        hasher_outer.result(&amp;mut result_outer);

        let mut r2 = vec![0; 64];
        hasher_outer.result(&amp;mut r2);
        let mut rdr = Cursor::new(r2);
        // Converting from BigEndian to the endinannes of the system
        algoresult = rdr.read_u64::&lt;BigEndian&gt;().unwrap();
        if algoresult &lt; target {
            chan_out.send(nonce).unwrap();
            return;
        }
    }
}</pre>
<p>The resulting library is pretty good, compared to the multithreaded Python solution that clocks in ~400,000 check/s on my X201, on single thread it does 800,000+ check/s. When using multiple threads, it does not scale linearly, though, and much more variable: I&#8217;m getting 800,000 &#8211; 1,800,000 hash/s, different on each run. I guess spreading the work between cores is not very consistent in Rust yet? Will need to investigate more as the  higher performance would be very nice to have reliably.</p>
<p>In the meantime, the <a href="https://github.com/imrehg/bmpow-rust">library is available on Github</a>. Feel free to send me a bitmessage at <span class="lang:default decode:true crayon-inline ">BM-NBooR8MZhawaba2hW6nwPHvNiQKrTVCB</span> .</p>
<h2>Future</h2>
<p>I&#8217;ll definitely explore Rust more, it&#8217;s a very interesting language, and even through the difficulties understanding some parts I felt a strange happiness working with it. It feels good, even though I don&#8217;t quite know why, yet.</p>
<p>Some projects that I took a note to do (eventually):</p>
<p>An <strong>IPython kernel</strong> for Rust. Not sure whether it really makes sense, or even possible, but when I see s<a href="https://github.com/ipython/ipython/wiki/IPython-kernels-for-other-languages">o many languages listed</a> to have kernels for <a href="http://jupyter.org/">IPython/Jupyter</a>, it has to be!</p>
<p>Rust is aimed to be a systems programming language, and it&#8217;s fun to see how people use it to cross-compile for different architectures. Combining inspiration from <a href="http://www.randomhacks.net/bare-metal-rust/">Bare Metal Rust</a> and some other language&#8217;s demo to cross-compile for the Pebble (lost the link), thinking about making <strong>Rust binding for the Pebble SDK</strong> to make watchfaces and apps in Rust. This is not a fully formed idea, and there other who already done some first steps (e.g. <a href="https://github.com/franc0is/RustyPebble">a Pebble app written in Rust</a>), but I&#8217;m sure there&#8217;s a lot more path to map.</p>
<p>These are just samples, more ideas will likely come as I have more projects to do (boy, do I have a lot of projects already that I want to do&#8230;)</p>
<h2>Links of Note</h2>
<p>Some links that might be useful for others as well:</p>
<ul>
<li><a href="https://github.com/kud1ing/awesome-rust">Awesome Rust</a>: a collection of awesome rust code and resources, a lot of things!</li>
<li><a href="https://play.rust-lang.org/">Rust Playground</a></li>
<li><a href="https://crates.io/">Cargo</a>, though I&#8217;m sure every Rust programmer knows this</li>
<li><a href="http://rustbyexample.com/">Rust by Example</a></li>
<li><a href="https://doc.rust-lang.org/stable/reference.html">Rust Reference</a>, the <a href="https://doc.rust-lang.org/std/">Rust Standard Library</a></li>
<li><a href="http://lucumr.pocoo.org/2015/5/27/rust-for-pythonistas/">Rust for Pythonistas</a>, <a href="https://www.gitbook.com/book/aminb/rust-for-c/details">Rust for C++ Programmers</a></li>
</ul>
<p>Similar writeups than this:</p>
<ul>
<li><a href="http://zsiciarz.github.io/24daysofrust/">24 Days of Rust</a> (might be a bit old now, though)</li>
<li><a href="http://scattered-thoughts.net/blog/2015/06/04/three-months-of-rust/">Three Months of Rust</a></li>
</ul>
<p>Also, thanks for <a href="https://this-week-in-rust.org/">This Week in Rust</a> to mention my the previous post of this Language of the Month feature, and all the people who left a comment there to educate me about Rust, really appreciated!</p>
<p>The post <a href="https://gergely.imreh.net/blog/2015/12/lotm-rust-results/">Language of the Month: Rust, the results</a> appeared first on <a href="https://gergely.imreh.net/blog">ClickedyClick</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gergely.imreh.net/blog/2015/12/lotm-rust-results/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Language of the Month: Rust</title>
		<link>https://gergely.imreh.net/blog/2015/11/language-of-the-month-rust/</link>
					<comments>https://gergely.imreh.net/blog/2015/11/language-of-the-month-rust/#comments</comments>
		
		<dc:creator><![CDATA[Gergely Imreh]]></dc:creator>
		<pubDate>Fri, 06 Nov 2015 14:41:16 +0000</pubDate>
				<category><![CDATA[Learning]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[lotm]]></category>
		<category><![CDATA[rust]]></category>
		<guid isPermaLink="false">https://gergely.imreh.net/blog/?p=2129</guid>

					<description><![CDATA[<p>I found it hard to believe, that it&#8217;s been 4 years now since I finished the previous installment of &#8220;language of the month&#8221; column, in which I pick a programming language and dive in for a month to see something new. In that 4 years I have learned a lot of programming for sure &#8211; though probably [&#8230;]</p>
<p>The post <a href="https://gergely.imreh.net/blog/2015/11/language-of-the-month-rust/">Language of the Month: Rust</a> appeared first on <a href="https://gergely.imreh.net/blog">ClickedyClick</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>I found it hard to believe, that it&#8217;s been 4 years now since I finished the previous installment of &#8220;<a href="/blog/tag/lotm/">language of the month</a>&#8221; column, in which I pick a programming language and dive in for a month to see something new. In that 4 years I have learned a lot of programming for sure &#8211; though probably very little computer science, and barely any new languages. It&#8217;s time to chance, and for the revival of this I&#8217;m checking out <a href="https://www.rust-lang.org/">Rust</a>.</p>
<p><span id="more-2129"></span></p>
<p>A bit about the LotM first, though. I was previously learning <a href="https://gergely.imreh.net/blog/2011/10/language-of-the-month-javascript/">Javascript</a>, <a href="https://gergely.imreh.net/blog/2011/09/language-of-the-month-prolog-part-2/">Prolog</a>, <a href="https://gergely.imreh.net/blog/2011/07/language-of-the-month-lua-part-2/">Lua</a>, and <a href="https://gergely.imreh.net/blog/2011/06/language-of-the-month-scala-part-3/">Scala</a>. Each time aim is to go beyond the tutorials and example code, and do something more that lets me discover the the language&#8217;s real face &#8211; strengths and weaknesses included. At the beginning of the month announcing the language like in this post, and at the end of the month in another post recap what have I learned.</p>
<h2>Getting started</h2>
<p>First start with a confession &#8211; I actually wanted to try out &#8220;the language that <a href="http://www.itworld.com/article/2978142/development/why-john-carmack-thinks-racket-is-aces-for-beginning-programmers.html">John Carmack</a> is playing with these days&#8221;, but then messed up since that is <a href="http://racket-lang.org/">Racket</a>, not Rust. I guess I&#8217;m <a href="https://news.ycombinator.com/item?id=9253585">not the only one</a> making this mistake, and never mind, that will be good for another month! I guess maybe Rust has enough mindshare on <a href="https://news.ycombinator.com">Hacker News</a> to stick in my mind.</p>
<p>So then, <a href="https://www.rust-lang.org/">Rust</a> is a systems programming language that aims to be safe, fast, and play with threads nicely. <a href="https://en.wikipedia.org/wiki/Rust_(programming_language)">Its Wikipedia article</a> has a bit more too. Searching for books, tutorials, examples, and projects that use it didn&#8217;t turn up as many sources as the previous languages I tried (though it&#8217;s much younger language too, so that&#8217;s only fair, I guess). On the other hand, it has an extensive <a href="https://doc.rust-lang.org/stable/book/">official book</a>, so that was a good place to start.</p>
<h2>First Impressions</h2>
<p>So far I&#8217;ve spent two half-evening with Rust, besides collecting the learning material I went through the first few sections of the book (no I&#8217;m in the middle of section 4, <a href="https://doc.rust-lang.org/stable/book/effective-rust.html">Effective Rust</a>).</p>
<p>Setting up Rust was pretty simple, I got to know Cargo, its package manager (and sort of build system, and sort of tooling, I guess), and did code the guided examples (both the binary and library ones), though the testing and documentation sections just read through.</p>
<pre class="lang:rust decode:true">// FizzBuzz not from the docs
fn main() {
    for num in (1..36) {
        if num % 15 == 0 {
            println!("Fizz Buzz");
        } else if num % 3 == 0 {
            println!("Fizz");
        } else if num % 5 == 0 {
            println!("Buzz");
        } else {
            println!("{}", num);
        }
    }
}</pre>
<p>So far it&#8217;s relatively straightforward, interesting, but I have seen very little where its strength lies. Having first class concept of documentation in code, directly including tests, debug &amp; release builds by default, easy project setup boilerplating are good, though I guess those sort of should be default for every new language as &#8220;best practice&#8221;.</p>
<p>What I&#8217;ve seen a bit instead, is quite a bit of arbitrariness in language. I do accept that it would be strange if first time seeing a new language  everything made sense, and try to cut it some slack. Still, for example why is there so much mixing between lowercase and uppercase type names, as well as abbreviated and not abbreviated versions, eg. <span class="lang:rust decode:true  crayon-inline ">String</span>  and <span class="lang:rust decode:true  crayon-inline ">&amp;str</span> ? I wonder. Having seen a few expression compositions in the <a href="https://doc.rust-lang.org/stable/book/learn-rust.html">tutorial projects</a>, they also feel quite arbitrary (ie. the method names don&#8217;t give a good idea what they are supposed to be doing &#8211; why <span class="lang:rust decode:true  crayon-inline ">.unwrap()</span> after a thread <span class="lang:rust decode:true  crayon-inline ">.join()</span> ? Will get there, but it&#8217;s hazy at the moment.) That might be just the issue of the tutorials, so I give that time too. And try to remember, that even though e.g. Python feels so &#8220;homely&#8221; now for me, there must have been some time when it wasn&#8217;t. Curiosity will help with this, and Rust has my attention.</p>
<p>In the meantime onwards with the documentation, and I&#8217;m looking for some project ideas and others&#8217; existing projects to look at (suggestions are welcome).</p>
<p>The post <a href="https://gergely.imreh.net/blog/2015/11/language-of-the-month-rust/">Language of the Month: Rust</a> appeared first on <a href="https://gergely.imreh.net/blog">ClickedyClick</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gergely.imreh.net/blog/2015/11/language-of-the-month-rust/feed/</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Object Caching 8/30 objects using APC
Page Caching using Disk: Enhanced 
Lazy Loading (feed)

Served from: gergely.imreh.net @ 2026-10-26 21:27:19 by W3 Total Cache
-->