L’utilitaire permettant de générer les histoires à télécharger dans le Raconteur se nomme RecetteDHistoire. Il est développé en Rust. C’est une bonne excuse pour apprendre ce nouveau langage.
Un des reproche actuel fait à ce langage de programmation système est qu’il n’est pas encore très mature, ses interfaces ne sont pas encore très stable.
Pour le moment, le développement de RecetteDHistoire n’est pas ralenti par des problèmes de stabilitées de ses interfaces. L’apprentissage du langage lui même est déjà suffisamment chronophage 😉
On peut noter cependant que les versions des bibliothèques utilisées (on parle de crate dans le langage du crabe) sont majoritairement en dessous de leurs version 1.0.0 lorsque l’on compile le logiciel:
$ cargo build
Compiling autocfg v1.1.0
Compiling libc v0.2.132
Compiling cfg-if v1.0.0
Compiling memchr v2.5.0
Compiling proc-macro2 v1.0.43
Compiling unicode-ident v1.0.3
Compiling quote v1.0.21
Compiling syn v1.0.99
Compiling cc v1.0.73
Compiling once_cell v1.13.1
Compiling log v0.4.17
Compiling bitflags v1.3.2
Compiling futures-core v0.3.23
Compiling adler v1.0.2
Compiling futures-sink v0.3.23
Compiling pin-project-lite v0.2.9
Compiling scopeguard v1.1.0
Compiling unicode-width v0.1.9
Compiling crossbeam-utils v0.8.11
Compiling pkg-config v0.3.25
Compiling gimli v0.26.2
Compiling futures-task v0.3.23
Compiling bytes v1.2.1
Compiling glob v0.3.0
Compiling cfg-if v0.1.10
Compiling version_check v0.1.5
Compiling futures-channel v0.3.23
Compiling futures-util v0.3.23
Compiling regex-syntax v0.6.27
Compiling proc-macro2 v0.4.30
Compiling lazy_static v1.4.0
Compiling rustc-demangle v0.1.21
Compiling hashbrown v0.12.3
Compiling fnv v1.0.7
Compiling quick-error v1.2.3
Compiling futures-io v0.3.23
Compiling termcolor v1.1.3
Compiling pin-utils v0.1.0
Compiling rayon-core v1.9.3
Compiling byteorder v1.4.3
Compiling itoa v1.0.3
Compiling unicode-xid v0.1.0
Compiling foreign-types-shared v0.1.1
Compiling openssl v0.10.41
Compiling ansi_term v0.12.1
Compiling crc32fast v1.3.2
Compiling strsim v0.8.0
Compiling serde_derive v1.0.144
Compiling bindgen v0.49.4
Compiling vec_map v0.8.2
Compiling matches v0.1.9
Compiling peeking_take_while v0.1.2
Compiling shlex v0.1.1
Compiling tinyvec_macros v0.1.0
Compiling serde v1.0.144
Compiling either v1.8.0
Compiling native-tls v0.2.10
Compiling smallvec v1.9.0
Compiling httparse v1.7.1
Compiling io-lifetimes v0.7.3
Compiling rustix v0.35.9
Compiling percent-encoding v2.1.0
Compiling openssl-probe v0.1.5
Compiling try-lock v0.2.3
Compiling encoding_rs v0.8.31
Compiling tower-service v0.3.2
Compiling httpdate v1.0.2
Compiling linux-raw-sys v0.0.46
Compiling weezl v0.1.7
Compiling ryu v1.0.11
Compiling unicode-bidi v0.3.8
Compiling adler32 v1.2.0
Compiling os_str_bytes v6.3.0
Compiling endian-type v0.1.2
Compiling linked-hash-map v0.5.6
Compiling bit_field v0.10.1
Compiling lebe v0.5.2
Compiling color_quant v1.1.0
Compiling half v1.8.2
Compiling unicode-segmentation v1.9.0
Compiling ipnet v2.5.0
Compiling utf8parse v0.2.0
Compiling textwrap v0.15.0
Compiling scoped_threadpool v0.1.9
Compiling bytemuck v1.12.1
Compiling strsim v0.10.0
Compiling number_prefix v0.3.0
Compiling bytes v0.5.6
Compiling pin-project-lite v0.1.12
Compiling mime v0.3.16
Compiling base64 v0.13.0
Compiling main_error v0.1.2
Compiling tracing-core v0.1.29
Compiling miniz_oxide v0.5.3
Compiling slab v0.4.7
Compiling memoffset v0.6.5
Compiling crossbeam-epoch v0.9.10
Compiling indexmap v1.9.1
Compiling tokio v1.20.1
Compiling lock_api v0.4.7
Compiling num-traits v0.2.15
Compiling rayon v1.5.3
Compiling num-integer v0.1.45
Compiling num-rational v0.4.1
Compiling textwrap v0.11.0
Compiling getopts v0.2.21
Compiling nom v4.2.3
Compiling clang-sys v0.28.1
Compiling humantime v1.3.0
Compiling openssl-sys v0.9.75
Compiling backtrace v0.3.66
Compiling libloading v0.5.2
Compiling fxhash v0.2.1
Compiling http v0.2.8
Compiling foreign-types v0.3.2
Compiling tinyvec v1.6.0
Compiling itertools v0.10.3
Compiling nibble_vec v0.1.0
Compiling form_urlencoded v1.0.1
Compiling addr2line v0.17.0
Compiling deflate v1.0.0
Compiling clap_lex v0.2.4
Compiling yaml-rust v0.4.5
Compiling gif v0.11.4
Compiling tracing v0.1.36
Compiling radix_trie v0.2.1
Compiling http-body v0.4.5
Compiling unicode-normalization v0.1.21
Compiling aho-corasick v0.7.19
Compiling object v0.29.0
Compiling want v0.3.0
Compiling crossbeam-channel v0.5.6
Compiling flate2 v1.0.24
Compiling png v0.17.5
Compiling quote v0.6.13
Compiling num_cpus v1.13.1
Compiling atty v0.2.14
Compiling mio v0.8.4
Compiling socket2 v0.4.6
Compiling getrandom v0.2.7
Compiling iovec v0.1.4
Compiling net2 v0.2.37
Compiling terminal_size v0.1.17
Compiling dirs-sys-next v0.1.2
Compiling dirs-sys v0.3.7
Compiling signal-hook-registry v1.4.0
Compiling nix v0.23.1
Compiling spin v0.9.4
Compiling idna v0.2.3
Compiling regex v1.6.0
Compiling cexpr v0.3.6
Compiling clap v2.34.0
Compiling clap v3.2.17
Compiling threadpool v1.8.1
Compiling nanorand v0.7.0
Compiling console v0.15.1
Compiling mio v0.6.23
Compiling dirs-next v2.0.0
Compiling dirs v4.0.0
Compiling crossbeam-deque v0.8.2
Compiling url v2.2.2
Compiling fd-lock v3.0.6
Compiling env_logger v0.6.2
Compiling indicatif v0.15.0
Compiling mio-uds v0.6.8
Compiling rustyline v9.1.2
Compiling failure v0.1.8
Compiling tokio-util v0.7.3
Compiling which v2.0.1
Compiling futures-macro v0.3.23
Compiling openssl-macros v0.1.0
Compiling pin-project-internal v1.0.12
Compiling tokio-macros v0.2.6
Compiling jpeg-decoder v0.2.6
Compiling tiff v0.7.3
Compiling tokio v0.2.25
Compiling pin-project v1.0.12
Compiling flume v0.10.14
Compiling exr v1.5.0
Compiling tokio-native-tls v0.3.0
Compiling h2 v0.3.14
Compiling futures-executor v0.3.23
Compiling discid-sys v0.4.0
Compiling futures v0.3.23
Compiling image v0.24.3
Compiling hyper v0.14.20
Compiling discid v0.4.4
Compiling serde_urlencoded v0.7.1
Compiling serde_yaml v0.8.26
Compiling hyper-tls v0.5.0
Compiling reqwest v0.11.11
Compiling rdhist v0.1.0 (/home/user/projets/RecetteDHistoire/rdhist)
Finished dev [unoptimized + debuginfo] target(s) in 53.79s
Ça fait un beau paquet de dépendances ! Mais ça se compile sans problème, et c’est même une des grandes qualité du langage : son outil de compilation et de gestion des bibliothèque.
Sur les 191 paquets utilisés nous avons :
- 131 en version 0.x.x
- 47 en version 1.x.x
- 7 en version 2.x.x
- 2 en version 3.x.x
- 2 en version 4.x.x
- 1 en version 6.x.x
- 1 en version 9.x.x
Je ne sais pas si la version des dépendances est un bon indicateur de stabilité d’un langage. Mais il est indubitablement un indicateur de sa jeunesse à mon avis.