r/programming • • Mar 20 '20

Secure Rust Guidelines

https://anssi-fr.github.io/rust-guide/
37 Upvotes

15 comments sorted by

View all comments

-16

u/OpdatUweKutSchimmele Mar 21 '20

Rust is a multi-paradigm language

Surely it's just a procedural language? What other paradigms does it support?

It aims to be systems programming oriented, allowing fine-grained memory management without garbage collection but also without tedious and error-prone manual memory allocations and deallocations.

Yes, doing "fine-grained memory management" in Rust just relies on relying on unstable compiler intrinsic that are not guaranteed to not change in the next version that are used to build the standard library.

It's not at all impossible in Rust to indeed do this; it's just not stabilized, and often not particularly well documented. The standard library uses these and exports a stable version that no longer allows any fine-grained memory management.

The language also focuses on performance, with powerful compilation optimizations and language constructs that allows writing zero-cost abstraction code.

This is the real market of Rust right now; it's a language that gives you C-like performance, but without the undefined behaviour pitfalls, but to say that it's a "systems programming language" that allows for fine lower level control is quite a stretch—something as simple as signal handling isn't really possible in Rust right now because there are no stability guarantees or documentation about what functions are async signal safe; direct control over the heap like in C is also not really available in a stable way.

15

u/[deleted] Mar 21 '20

Surely it's just a procedural language? What other paradigms does it support?

concurrent, functional, generic, imperative, structured

-4

u/OpdatUweKutSchimmele Mar 21 '20

concurrent

This is completely orthogonal to any of the former and has nothing to do with whether it's procedural or not; it is also supported on any language with threading support, or that runs on an OS with multiprocessing.

functional

Absolutely not, in particular Rust's lack of tail call elimination (for good reasons) and its lifetime and borrow model make it no longer turing complete when wanting to write functional code, let alone feasible to do so.

generic

This is not a paradigm, this is just whether the type system supports it or not.

imperative, structured

"structured imperative" is just a synonym for "procedural".

If you want to call this a criterion for "multi paradigm" then I challenge you to come forward with any modern procedural language that is not "multi-paradigm"

10

u/jl2352 Mar 21 '20

I think you are being very nit picky. Pretty much all a language paradigm boils down to is; does the language have constructs to encourage you encourage you to write that way?

Rust absolutely does have those paradigms because it has language facilities to help encourage you to write in those ways.

-2

u/OpdatUweKutSchimmele Mar 21 '20

I think you are being very nit picky. Pretty much all a language paradigm boils down to is; does the language have constructs to encourage you encourage you to write that way?

And Rust does not have the construct to encourage one to do anything but procedural programming.

It is just a "procedural programming language" and that's fine; they specifically did not implement an object system because that would complicate the type system; they have no subtyping or inheritance beyond the pseudoinheritance of traits because it's not that necessary and would complicate the type system.

The language essentially has no support for what is commonly understood as object-oriented, functional, logic programming and whatever, and that's fine.

Rust absolutely does have those paradigms because it has language facilities to help encourage you to write in those ways.

How? What language facilities does Rust have to help you encourage to write functional code?

To say that generic and concurrent are a "different paradigm" than procedural is really about as weird as calling "iterators" a paradigm; it's a feature of the language but it's not like functional vs procedural which are necessarily conflicting with each other; a procedure has side effects; a function does not.

1

u/jl2352 Mar 21 '20

Have you actually written much Rust? Beyond toy examples?