Kotlin way vs Rust way

1 view
Skip to first unread message

Mario Alexandro Santini

unread,
Oct 25, 2022, 3:43:09 AM10/25/22
to socr...@googlegroups.com
Buongiorno,

ho appena letto un thread interessante che potrebbe essere utile a chi in questa lista vuole approfondire Rust e magari conosce Kotlin.

E' solo un piccolo esempio di codice:

import kotlin.test.* fun main() { val a = listOf(1, 2, 3, 4, 5) val b = a.filter { it < 3 } a[0] = 10 assertEquals( b[0], 10, "Modifying a results in modifying b, because the elements are references" ) }

Ora, nella discussione si chiede come scrivere questo codice in Rust.
Una traduzione pari pari non è ovvia, dato che in Rust le regole di
ownership richiedono che ci sia un solo owner, mentre in questo codice,
pare proprio che ce ne siano 2.

Un tentativo semplice di traduzione potrebbe essere usando l'interior mutability.
Ma di seguito vi mostro quello che ho trovato più interessante:

fn main() { let mut a = [1, 2, 3, 4, 5]; let b_indices: Vec<usize> = (0..a.len()).filter(|i| a[*i] < 3).collect(); a[0] = 10; assert_eq!(a[b_indices[0]], 10); } 

La cosa interessante in questo codice, è che si ripensa l'algoritmo individuando il reale owner _a_ e trasformando _b_ in un riferimento ad _a_, utilizzando gli indici.


Non serve l'account, potete leggere la discussione senza problemi.


Mario

PS Per brevità ho usato _vs_ nel titolo, ma intendevo confronto. Il mio scopo con questo post è quello di mostrare 2 esempi, uno in Kotlin ed uno in Rust che fanno la stessa cosa, ma che hanno approcci differenti legati a come funziona il linguaggio.



Reply all
Reply to author
Forward
0 new messages