Wikifunctions:Mise à jour/2024-11-01
◀ | Wikifunctions Status updates | ▶ |
Réécriture du backend
L'équipe de la Wikipédia abstraite travaille à réécrire nos services backend dans un langage de programmation différent, probablement Rust. Node/JS nous a bien servi, mais nous avons rencontré des limites qui seraient mieux traitées en passant à un autre écosystème.
Le travail immédiat porte sur la façon dont nous pourrions mieux interagir avec WebAssembly (WASM). Il y a presque exactement un an, nous avons annoncé que nous allions commencer à exécuter du code Python et JS dans WASM pour ses caractéristiques de bac à sable. Depuis lors, nous avons interagi avec WASM via l'interface WebAssembly System Interface (WASI), qui permet aux commandes WASM d'avoir un accès sélectif au système d'exploitation sous-jacent.
While WASI has made our code executors more secure, the use of this tool has caused some bumps. The Node tooling around WASI is not particularly rich. At the time of adoption, we found that our best option was to use WASI command-line interfaces. We decided to run these interfaces in subprocesses. The use of subprocesses has resulted in system stability issues, mainly related to the impossibility of cleaning up subprocesses under certain conditions.
The WASI ecosystem in Rust is much more advanced. Several WASI runtimes provide tools which offer fine levels of control over the binding of WASM commands to syscalls. With these tools, we can streamline our use of WASI. We can run our code executors directly inside of the host Rust program, eliminate subprocesses, and thereby avoid several sources of system instability. As an added bonus, this level of control means that we can also improve our sandboxing–a security win–and, in the far (or not so far?) future, co-opt certain system calls to implement new features for our code executors.
Prochain « coin des bénévoles » le 4 novembre
La semaine prochaine, lundi 4 novembre 2024, à 18h30 UTC, nous aurons notre coin mensuel des bénévoles. À moins que vous n'ayez beaucoup de questions, nous suivrons notre ordre du jour habituel, en donnant des mises à jour sur les plans à venir et les activités récentes, en disposant de beaucoup de temps et d'espace pour vos questions, et en construisant une fonction ensemble. Au plaisir de vous voir lundi !
Fonction de la semaine : langue d’un lexème
La fonction language of lexeme (Z19295) est une fonction simple : elle prend un seul argument, un lexème, et renvoie la langue (naturelle) du lexème. Chaque lexème dans Wikidata appartient à une seule langue, par exemple si nous regardons le lexème L610505, mkpụrụokwu, cela nous indique que c'est un mot en langue igbo.
Ainsi, si on choisit le lexème mkpụrụokwu sur la page de la fonction langue du lexème, celle-ci nous renvoie l’objet langue et affiche le code langue ig
(qui signifie igbo).
La fonction a un testeur, qui prend le lexème pour le nom anglais « dog » et renvoie l'objet représentant la langue anglaise.
Il existe une implémentation, une composition : elle utilise la fonction valeur par clé, une fonction fondamentale pour travailler avec des objets dans Wikifunctions. Chaque lexème est composé de sept clés, comme défini sur la page de type pour les lexèmes. Pour obtenir la valeur d'une clé spécifique, nous pouvons utiliser la fonction valeur par clé avec deux arguments : la clé que nous voulons rechercher, et l’objet lui-même sur lequel nous effectuons la recherche de clé.
It makes sense for most types to have a function for each key to decompose objects of that type. Language of Lexeme is such a function: it simply picks one of the keys of the Lexeme object and returns that.