mboost-dp1

Rust @ Google


Gå til bund
Gravatar #2 - Claus Jørgensen
28. jun. 2023 11:07
Jeg har aldrig forstået hvorfor folk siger at Rust er et svært sprog. Måske svært for C udviklere, men mange af koncepterne er ikke nye for folk der ellers har arbejdet i moderne programmeringssprog.

Gravatar #3 - arne_v
28. jun. 2023 13:15
#2

Deres memory ownership model er speciel. Det er en af de grundene til at vælge Rust - undgå memeory allokering/deallokering problemer uden at skulle leve med de dårlige realtime egenskaber som følger med GC. Men speciel.

Muligheden for unsafe of specielt samspillet mellem safe og unsafe kode. Det er et must at have muligheden for unsafe til mange af de ting Rust bruges til og safe er igen en af grundene til at vælge Rust, så der er gode grunde til at man er endt hvor man er, men jeg vil ikke kalde det nemt. C# har faktisk også unsafe men praktisk talt ingen bruger det.

Rust async/await er mere tricky end C# ditto. Tingene starter ikke af sig selv men skal eksplicit startes. Det der kommer med Rust er kun demo funktionalitet - rigtig funcktionalitet kræver noget eksternt (kaldet "runtime" i Rust terminologi, men det er ikke det samme som runtime i andre sprog) som f.eks. tokio.

Givet hvor nyt sproget er, så er eksterne biblioteker "crates" situationen mere rodet med inkompatible API og versions afhængigheder end man kunne forvente (det er ligesom mere naturligt at 25 eller 50 år gamle sprog har noget bagage med).


Gravatar #4 - arne_v
29. jun. 2023 13:19
#3

Re async/await så kan jeg godt forstå at Rust har lavet det de har. Det duer ikke at hvis en udvikler sætter en async og await ind i noget device driver kode så forsøger den at starte en tråd.

Men anderledes.
Gravatar #5 - Claus Jørgensen
29. jun. 2023 14:11
#4

https://rust-lang.github.io/async-book/01_getting_... virker da meget simpelt.

Det er vel reelt set bare Futures. Og Futures er simpelt sagt en måde at inline completion/result closures så koden er nemmere at læse.



Gravatar #6 - arne_v
29. jun. 2023 16:55
#5

Koden er simpel. Men den virker anderledes end i C#.

Rust:


use futures::executor::block_on;

async fn m() {
println!("m");
}

fn main() {
let t = m();
println!("main");
block_on(t);
}


virker ikke som C#:


using System;
using System.Threading.Tasks;

namespace AsyFun
{
public class Program
{
async private static Task M()
{
Console.WriteLine("M");
}
public static void Main(string[] args)
{
Task t = M();
Console.WriteLine("Main");
t.Wait();
}
}
}


men som C#:


using System;

namespace NotAsyFun
{
public class Program
{
private static void M()
{
Console.WriteLine("M");
}
private delegate void Task();
public static void Main(string[] args)
{
Task t = M;
Console.WriteLine("Main");
t();
}
}
}


Gravatar #7 - arne_v
29. jun. 2023 16:59
Og ikke nok med at den implementation ikke gør ret meget - den kræver alligevel en masse eksterne crates.

Compiling proc-macro2 v1.0.63
Compiling quote v1.0.29
Compiling unicode-ident v1.0.9
Compiling futures-core v0.3.28
Compiling autocfg v1.1.0
Compiling slab v0.4.8
Compiling futures-task v0.3.28
Compiling memchr v2.5.0
Compiling futures-channel v0.3.28
Compiling syn v2.0.22
Compiling futures-sink v0.3.28
Compiling futures-util v0.3.28
Compiling pin-utils v0.1.0
Compiling futures-io v0.3.28
Compiling pin-project-lite v0.2.9
Compiling futures-macro v0.3.28
Compiling futures-executor v0.3.28
Compiling futures v0.3.28

Gravatar #8 - Claus Jørgensen
29. jun. 2023 19:04
#9

Det er mere ala. Swift


async let t = M()
print "Main"
await t
Gravatar #9 - arne_v
30. jun. 2023 13:58
#8

Jeg er ikke Swift kyndig, men hvis den kode virker som:

async let t = M() // gem reference til M i t
...
await t // kald det som t peger på

så er det ens.
Gravatar #10 - arne_v
30. jun. 2023 14:12
Og for en god ordens skyld. Man kan godt få Rust til at udføre async metoder parallelt i en tråd. Men man skal eksplicit requeste det.
Gravatar #11 - arne_v
11. sep. 2023 00:20
En anden som ikke kan lide Rust async:

https://bitbashing.io/async-rust.html
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login