Ho iniziato da poco un progetto sulla piattaforma Meetup.com per creare un gruppetto di studio sul linguaggio Rust (www.rust-lang.org).
Mittelab (grazie @g5pw!) ci ha gentilmente ospitati per gli ultimi due appuntamenti e finche’ il gruppo e’ molto piccolo sembra la sistemazione logistica che mette tutti d’accordo.
Meetup.com come piattaforma per tenersi in contatto non e’ il massimo, quindi eccomi anche sul vostro forum . L’idea e’ di provare a dare visibilita’ a questo piccolo progetto con lo scopo di imparare insieme il linguaggio, le API della standard library e il modo idiomatico di scrivere in Rust.
A dicembre sono praticamente morto (casini vari) ma a gennaio ho in programma di risorgere come la fenice e riprendere gli appuntamenti.
Ciao! Scusate il silenzio stampa (casini vari); a me tornerebbe meglio la prox settimana.
Se qui va bene a tutti merc 17/01, fra un paio di gg apro anche il RSVP su meetup, proviamo a trainare qualche nuovo member che si e’ unito di recente.
Perché, se ti riferisci alla volta in cui ero io ad avere problemi, usavo Firefox! La nuova versione sembra avere ancora qualche problema di gioventù…in seguito l’abbiamo provato io e @Telespalla con browser Chromium-based e andava benissimo
Ieri sera si discuteva con @jman che potremmo pensare di fare i meetup durante il weekend, ad esempio sabato pomeriggio, per essere più rilassati, e così @michelezamuner riesce a mangarsi il panino Che ne pensate?
Sul tema degli unittest, ho dato un’occhiata piu’ approfondita alla documentazione.
In sostanza avevamo capito al 90% la cosa:
Tu scrivi una libreria e metti tutto in src/lib.rs
In src/lib.rs aggiungi il modulo per i test (mod tests, completamente separato)
Se scrivi un’applicazione in Rust, (con un src/main.rs e nonsrc/lib.rs) secondo loro non hai bisogno test di integrazione, perche’ li hai gia’ fatti nel codice della tua libreria.
Capisco la logica di questo approccio, mi sembra un po’ strana.
Il nostro client Meetup e’ un’applicazione mista: un binario ma con la parte di “libreria” (che pero’ non e’ in src/lib.rs). Dovremmo rifattorare il codice creando un src/lib.rs e ci mettiamo il codice della libreria, oppure un src/lib.rs vuoto che importa gli moduli (come aveva provato @michelezamuner).
Questo src/lib.rs e’ un entrypoint necessario per un progettodi tipo libreria, mi sembra che non si scappa.
In questo post ci sono spiegate alcune cose di base, anche sull’organizzazione dei file in un progetto:
Una cosa che ho notato e’ che l’stdout/stderr delle print viene gettato via se il test ha successo, mentre vengono visualizzate se il testa fallisce, ad es.:
$ cargo test test_sum
...
running 1 test
test meetup_client::tests::test_sum ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out
$ cargo test test_sum
...
running 1 test
test meetup_client::tests::test_sum ... FAILED
failures:
---- meetup_client::tests::test_sum stdout ----
Print this debugging, pretty please
thread 'meetup_client::tests::test_sum' panicked at 'assertion failed: `(left == right)`
left: `4`,
right: `3`', src/meetup_client.rs:80:8
....
Come costruirsi una enum per fare il catch-and-rethrow-my-own-exception
Refactor del client meetup splittando la libreria (che ha un suo nuovo repo) dal client che implementera’ suddetta libreria
Integration tests
Utilizzo degli impl e traits per implementare una classe astratta del client HTTP e poter avere due implementazioni: una reale (che si connette al backend di Meetup) e una come mock da essere utilizzata negli integration tests
Oggi estremamente produttivo, ho cominciato a capire diverse cose! Il fatto che voi siate proficient su C/C++ mi e’ di grande aiuto perche’ afferrate piu’ velocemente alcuni concetti di Rust coi quali fatico di piu’ a familizarizzare! Grazie mille per l’aiuto.
Riguardo i libri di programmazione, crescendo di expertise, ho maturato sentimenti contrastanti.
All’inizio erano uno strumento insostituibile (specie quando S.O. non c’era) e leggevo le parti che mi interessavano. Piu’ avanti negli anni ho preferito un approccio piu’ trial-and-error perche’ mi sembrava piu’ rapido l’apprendimento, ad es. i ns. pimi meetup su Rust erano una guerra contro il compiler
Voi che opinione avete in merito?
Speaking of which, ho appena perso una $undisclosed_amount_of_time per via di una peculiarita' di Rust. Secondo voi questo snippet cosa stampa?
.
.
.
.
.
Risposta sbagliata : -)
(se vi e’ sembrato di vedere angeli cadere dal cielo in fiamme, non fateci caso, ero io)
E’ uscito Rust 1.2.4! Finalmente hanno messo nel canale stable una versione di preview del linter (rustfmt). Adesso non occorre piu’ compilarsi Rust unstable per averlo! \o/
Mi piace e approvo questo ciclo di release ogni 6 settimane. Tengono viva l’attenzione della comunita’.