According to StackOverflow, Rust has been mentioned among the world’s most popular programming language for six years in a row. What is its secret? The short answer is that many believe Rust is free of many modern programming languages’ weaknesses.
Agda is a relatively unknown functional language, but in some scenarios, it works better than Rust. So, let’s take a look at how Rust differs from Agda and copes with the problems of this language and vice versa.
Agda is a purely functional programming language with dependent types (that can be indexed by values). The theoretical basis of Agda is the Martin-Loeff intuitionist theory, which is extended with a set of constructs useful for practical programming.
Agda is also an automatic proof system. Logical statements are written as types, and proofs are programs of the appropriate type.
Agda supports inductive data, pattern matching (which flexibly makes use of dependent types), a system of parameterized modules, program completion checking, and mixfix syntax for operators. Support for implicit arguments greatly simplifies programming with dependent values. Agda programs are characterized by extensive use of Unicode.
Rust is a multi-paradigm programming language with an emphasis on performance and security. In terms of syntax, Rust is similar to C++. And in terms of memory safety, Rust gets rid of garbage collection, and instead, it has a borrow checker system. You can learn more about Rust programming language in this review.
Agda vs Rust
Rust is an interesting language to compare Agda to. It has a resembling syntax. But it’s not as similar as Elm or Purescript.
What is special about Rust:
- A concise syntax with keywords, similar to C syntax.
- A code parser to help avoid memory leaks and multi-threading errors.
- The self-control of memory locations (using pointers).
- No garbage collection.
- Powerful statistical typing.
The following features characterize Agda:
- Data immutability;
- Use of pure functions as indivisible units of composition;
- The developer does not need to worry about random variable changes outside a given function;
- Reference transparency, which makes it possible to replace an expression with the corresponding value without changing the program;
- A modular design that allows the creation of small modules and new add-ons based on them.
Rust has several key differences that make it better than Agda for some tasks. One huge change is that Rust gives you more control over the allocation of memory in your program.
Agda is a language with a garbage collector, and this means that the programmer has no control over when items are allocated or released. Occasionally, your program will stop completely. It goes through all the allocated objects and frees those no longer needed. It simplifies the programming task because you do not have to worry about memory. It helps enable language functions like laziness. But it makes the performance of your program much less predictable. Type safety in Agda is appropriate for safety-critical programs.
With more control over memory, the programmer can make more performance claims. They can be sure that the program never uses too much memory and that it will not stop the computation. Beyond this principle, Rust as a whole is made more productive. It tends to be similar to C, perhaps the most productive of all the major languages.
As we said in the beginning, Rust is the most popular language among functional programmers. A larger community brings certain advantages, such as a broader ecosystem. Employers are more likely to use Rust than Agda because it is easier to find and hire engineers and, more importantly, get engineers with non-functional experience into Rust.
However, Rust still has a lot in common with Agda! Both languages support strict type systems. They see the compiler as a key element in verifying that your program is correct. Both include useful syntactic functions such as sum types, type classes, polymorphism, and type inference. Both languages also use immutability to make it easier to write correct programs.
As you can see, Rust and Agda have their advantages and weaknesses: Rust is indispensable when working on DevOps tools, while Agda can be used as a proof assistant, allowing to prove mathematical theorems and to run such proofs as algorithms. Thou Rust is much more popular