diff --git a/blog/posts/2021-04-18-first-impression-of-rust.cfg b/blog/posts/2021-04-18-first-impression-of-rust.cfg new file mode 100644 index 0000000..249a12e --- /dev/null +++ b/blog/posts/2021-04-18-first-impression-of-rust.cfg @@ -0,0 +1,5 @@ +filename = 2021-04-18-first-impression-of-rust.html +title = First Impression of Rust +description = After some time using Rust, and initially being very skeptical, I give my first impressions of the Rust programming language. +created = 2021-04-18 +updated = 2021-04-18 diff --git a/blog/posts/2021-04-18-first-impression-of-rust.html b/blog/posts/2021-04-18-first-impression-of-rust.html new file mode 100644 index 0000000..afc5f17 --- /dev/null +++ b/blog/posts/2021-04-18-first-impression-of-rust.html @@ -0,0 +1,100 @@ +

I'd like to make it clear first that I by no means have extensive +experience with the Rust programming language, nor will I be diving into +the more technical aspects of Rust as a language. This is simply my +first impressions as someone who is largely a fan of C/C++.

+ +

Now, this being said, I have lately been porting one of my favorite +projects, Indivisible[1] to the Rust +programming language. I started this journey when a good friend of mine +sent me a link to a video about Rust which had challenged a few things I +had thought erroneously about the language in practical terms. My main +critiques of Rust prior to seeing this video were that it uses garbage +collection, that it is incompatible with C/C++ and therefore would never +kick off, and that it doesn't allow you to use pointers (because of +garbage collection). What I had found was that all these are completely +wrong, especially this last one since the Rust compiler won't stop +bothering me about memory references. The fact of the matter is that +Rust's memory management is basically like using smart pointers in C++, +but with a compiler that makes sure you're using them appropriately (and +is really annoying about it). And as for compatibility with C/C++, it +was made to be compatible.

+ +

For me, this last point about compatibility is especially important +if I'm going to learn a systems language since the last thing any +serious code project (like the Linux kernel) is going to do is to +rewrite their entire code base in a new language. It simply doesn't make +sense. And although there are (apparently) many Rust fanatics who will +propose such insanities, the real power of Rust is not in being a tool +to rewrite existing code, but to be used on top of existing C/C++ code. +As such, I see it as at least plausible that Rust may be used as a +serious language for systems programming for future code bases and +modules to existing code bases, making it a valuable investment of my +time.

+ +

Getting into some of the details, I can very much appreciate the Rust +compiler. I've said in another post that I'm very much a fan of running +compilers with strict options to have a safer code base. Well, for Rust +this is basically the default mode of the compiler. Granted, sometimes +it's annoying, but being someone who always adds a bunch of flags to his +compiler options to make it as strict as possible, it's something I'm +used to. It's also worth noting that the Rust compiler is extremely +helpful when it gives an error or warning, often proposing solutions, +providing a command to get documentation found locally on your system - +which is always a plus for me, since I dislike having to open my browser +for things like this. I must also admit that I enjoy the build system +from what I've seen so far. I've always been critical of +language-specific package managers (e.g. pip), but I have no problem in +making an exception for cargo. It's probably not very UNIX of me, but +the fact that cargo is a build system and a package manager at the same +time makes my life a whole lot easier. Managing dependencies in +languages like C and C++ has generally always been a pain. And unlike +pip, which tries to install on your system, or some home folder or +something, cargo does everything on a project-by-project basis, which I +very much appreciate.

+ +

Now, getting into the syntax of the language itself, I must say that +there are things I like, things I dislike, and some which I've grown to +like. I must say that I miss the typical var++, but it's +something I'm willing to get over. I also found for-loops to be somewhat +confusing originally, since sometimes I have to do weird things with +for-loops which are quite easy with the standard format we're all used +to: for(<initial definition>; <end condition>; +<variable change>), but it's something I can look past, as +I simply have to get used to the new format.

+ +

I am also very happy with the mut keyword. That is, in +Rust every variable is constant by default. In order for a variable to +be mutable you must add the mut keyword. Typically +compilers will make use of constant variables in order to compile more +optimized assembly code, but unfortunately many folks don't use these +keywords (e.g. const in C/C++), so they hardly end up being +used. I've always tried making a point to restrict my variables as much +as possible when programming in C/C++, but with Rust this is once again +the default. This makes it more likely that programmers will make use of +stricter variable definitions, and therefore help the compiler to +optimize the code.

+ +

Perhaps the one thing I dislike about Rust is the prevalence of type +inference. I'm generally not a fan of ambiguity, and I think that type +inference is just one of those things I'm never going to actually +appreciate. I always feel as though the compiler/interpreter is going to +get it wrong, especially when we're talking about a language which +differentiates between differently sized data types like 64-bit and +32-bit integers. That being said, the fact that the norm in Rust when +defining variable types is to use keywords like u64 and +i64 is something I do actually appreciate rather than the +C/C++ way of adding the unsigned keyword to the data type. +By including all the information in one, it gets rid of ambiguity. I +have no doubt as to the size, or whether or not it is signed. And since +all this is defined in a single keyword, when one wishes to define the +variable type one will inevitably have to consider both these aspects +instead of intuitively using int.

+ +

Obviously, this is very superficial and not very technical, but I +also don't have much experience with Rust as of yet. However, from what +I have seen it is quite a cool language, and I'm interested in seeing +where it goes from here.

+ +
    +
  1. Indivisible GitLab Page
  2. +