Une histoire sur le portage du code de "Essayez de comprendre comment fonctionne Linux" sur Rust

"Essayez de comprendre comment fonctionne Linux"

Dans Amazon, il est nommé "[Essayez de comprendre] Comment fonctionne Linux ~ Connaissance de base du système d'exploitation et du matériel acquise grâce à des expériences et des illustrations". .. On l'appelle souvent un livre sat en raison du nom de pseudo de l'auteur Takeuchi-san.

Le code C distribué par M. Takeuchi est ici, et le code que j'ai réécrit dans Rust est [ici](https: //) Il peut être trouvé sur github.com/gyu-don/linux-in-practice).

Ci-dessous le poème.

Impressions du livre

J'avais moi-même un certain intérêt pour Linux et la mémoire, donc il n'y avait pas beaucoup de nouveau contenu. Cependant, je me sens très bien de le lire. Comme il est étiqueté «Essayer et comprendre», vous pouvez réellement essayer ce qui est écrit pour approfondir votre compréhension. Je l'ai entendu d'une manière ou d'une autre, mais je suis vraiment content d'avoir pu essayer quelque chose que je n'avais pas vraiment essayé.

Pourquoi porté à Rust

  1. Ma théorie est: "Il vaut mieux l'écrire vous-même parce que vous pouvez le copier, plutôt que de simplement lancer le programme." Cependant, c'est ennuyeux si ce n'est qu'une copie, alors je l'ai déplacé vers Rust.
  2. Je voulais découvrir "Rust convient à la programmation système, mais comment est-ce réellement? Est-ce plus facile à faire que C?"

Était-ce facile à faire?

pros: --Il n'y a aucun doute (du moins pour moi) que Rust est plus facile à écrire que C pour autre chose que les appels système.

cons: «J'ai décidé de faire de mon mieux pour écrire les parties qui n'avaient pas d'emballage ou qui ne se sentaient pas très bien. --C La chaîne de terminaison NUL est difficile à créer sans utiliser le tas (si le tas est correct, CString :: new (...) semble bon)

Et après tout?

Je voulais le terminer avec Rust Vive, mais après tout, tant que l'interface était à l'origine basée sur C, ce ne serait pas pratique sans compter sur un wrapper, et j'ai senti que le wrapper n'était pas parfait. Pourtant, je pense que c'est vraiment pratique de pouvoir gérer les erreurs avec Result, et même si vous n'aimez pas le wrapper, vous pouvez le faire vous-même sans trop de tracas, et cela ne semble pas être mauvais.

Recommended Posts

Une histoire sur le portage du code de "Essayez de comprendre comment fonctionne Linux" sur Rust
L'histoire du portage du code de C vers Go (et vers la spécification du langage)
Une histoire sur la façon de traiter le problème CORS
[Linux] [C / C ++] Comment obtenir la valeur d'adresse de retour d'une fonction et le nom de fonction de l'appelant
Comment sensibiliser VS Code à l'environnement venv et à ses avantages
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
[CleanArchitecture avec Python] Appliquez CleanArchitecture à une API simple étape par étape, et essayez de comprendre "quel type de changement est fort" dans la base de code.
Un mémo pour comprendre visuellement l'axe des pandas.
Une histoire sur le changement du nom principal de BlueZ
L'histoire du serveur Web et du DAG d'Airflow, dont le chargement prend beaucoup de temps
Je suis à Singapour en ce moment Une histoire sur la création d'un LineBot et la volonté de faire un travail mémorable
[Ubuntu] Comment supprimer tout le contenu du répertoire
Un résumé approximatif des différences entre Windows et Linux
Comment trouver le coefficient de mise à l'échelle d'une ondelette bipolaire
Après tout, l'histoire du retour de Linux à Windows
[Introduction à Tensorflow] Comprendre correctement Tensorflow et essayer de créer un modèle
Commandes et fichiers pour vérifier la version de CentOS Linux
Comment insérer un processus spécifique au début et à la fin de l'araignée avec la tremblante
Comment connecter le contenu de la liste dans une chaîne de caractères
Une histoire sur la prédiction des préfectures à partir des noms de villes avec Jubatus
Apprenez le flux de l'estimation bayésienne et comment utiliser Pystan grâce à un modèle de régression simple
Comment afficher une colonne de fichiers spécifiée sous Linux (awk)
Présentation de la création d'un socket serveur et de la création d'un socket client
Comment déterminer l'existence d'un élément sélénium en Python
Comment implémenter du code Java en arrière-plan de Red Hat (Linux ONE)
[EC2] Comment installer Chrome et le contenu de chaque commande
[Python] Comment obtenir le premier et le dernier jour du mois
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
[Linux] Comment désactiver la mise à jour automatique du fichier /etc/resolv.conf (AmazonLinux2)
Comment trouver l'adresse mémoire de la valeur de la trame de données Pandas
Ecrire un programme qui abuse du programme et envoie 100 e-mails
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
J'ai résumé comment changer les paramètres de démarrage de GRUB et GRUB2
Essayer d'implémenter et de comprendre les arborescences de segments étape par étape (python)
[python] Une note que j'ai commencé à comprendre le comportement de matplotlib.pyplot
L'histoire de l'exportation d'un programme
Comment exécuter le code pratique du livre "Making Profitable AI with Python" sur Google Colaboratory
[Pour les débutants chez AtCoder] Parlez de la quantité de calcul que vous voulez connaître approximativement
Comment copier et coller le contenu d'une feuille au format JSON avec une feuille de calcul Google (en utilisant Google Colab)
Une histoire sur la création d'un programme qui augmentera le nombre d'abonnés Instagram de 0 à 700 en une semaine
Une histoire d'essayer d'exécuter JavaScripthon sur Windows et d'abandonner.
[Python] Comment spécifier la position d'affichage de la fenêtre et la taille de matplotlib
Comment diviser et traiter une trame de données à l'aide de la fonction groupby
Réfléchissez à la façon d'écrire un filtre avec les versions Shotgun API-Contact
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
[Linux] Une commande pour obtenir une liste des commandes exécutées dans le passé
[NNabla] Comment ajouter une couche de quantification à la couche intermédiaire d'un modèle entraîné
Comment mettre un numéro de ligne au début d'un fichier CSV
L'histoire de l'abandon d'essayer de se connecter à MySQL en utilisant Heroku
Essayez d'écrire du code python pour générer du code go - Essayez de porter JSON-to-Go et ainsi de suite
L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
Une note sur les fonctions de la bibliothèque Linux standard qui gère le temps
Code Python pour déterminer les signaux mensuels pour les investissements de force relative
Comment lire une vidéo tout en regardant le nombre d'images (Mac)