Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

French - Basics/Containers #18

Open
wants to merge 13 commits into
base: development
Choose a base branch
from
Open

Conversation

Maeevick
Copy link
Contributor

@Maeevick Maeevick commented Jun 11, 2021

Related to #9

Just started - only intro for the moment

@Maeevick Maeevick requested a review from Kleidukos June 11, 2021 12:53
@Maeevick Maeevick self-assigned this Jun 11, 2021
@Maeevick Maeevick linked an issue Jun 11, 2021 that may be closed by this pull request
@Maeevick Maeevick force-pushed the fr/basic-containers branch from cf441f0 to ba05b9d Compare June 14, 2021 15:05
@Maeevick Maeevick force-pushed the fr/basic-containers branch from 71f00b2 to 8d109d2 Compare June 20, 2021 21:17
@Maeevick
Copy link
Contributor Author

Far from perfect but review and feedback are welcome, please and thanks in advance 😄 🙏

@Maeevick Maeevick marked this pull request as ready for review June 20, 2021 21:20
@Maeevick Maeevick requested a review from bChiquet June 20, 2021 21:22
Copy link

@Ptival Ptival left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was curious about the contents, so I went ahead and reviewed it since I was reading it anyway!

Sorry I wrote some reviews in French and some in English.

## Quand utiliser tel ou tel conteneur ?

Voici une liste de pense-bêtes permettant de choisir le bon conteneur en fonction du contexte.
L'objectif est mnémotechnique et fera surement plus sens après avoir lu les chapitres correspondants.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sûrement ?


## Utiliser les modules (_List_, _Set_, _Map_)

Une fonctionnalité appréciable des modules _List_, _Set_ et _Map_ est leur _api_ identique (ou presque). Ainsi, l'utilisation de ces conteneurs est plus intuitive et plus simple à mémoriser, permettant un accès rapide à un large éventail d'outils pour un investissement relativement faible.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should acronyms/initialisms be capitalized? I'd suggest API.


## _Tuples_

Les _tuples_ sont la première structure de données que vous allez découvrir en Haskell. C'est un conteneur simple, natif avec une syntaxe concise. Les champs sont référencés selon leurs positions. Théoriquement, Les _tuples_ peuvent contenir un nombre infini de champs, c'est ce qu'on appelle arité (_arity_). En réalité, les spécifications _Haskell Report_ n'imposent aux compilateurs (et interpréteurs) une taille minimale que de 15 champs (_15-tuple_). GHC supporte un nombre de champs allant jusqu'à 62 (_62-tuple_). Le nombre minimum de champs pour un _tuple_ est de 2 (_2-tuple_). C'est sur ce type que nous nous concentrerons étant donné qu'Haskell fournit de nombreuses fonctionnalités par défaut pour celui-ci. A titre d'exemple, voici un _tuple_ avec 8 champs (_8-tuple_).
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it's from being used to English these days, but even in French, I feel like an "Oxford comma" can help making sure that some non-existing connection between words is not accidentally confusing.

Applied here, "natif avec une syntaxe concise" could be "natif, avec une syntaxe concise". Open to discussion on this. :-)

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"une taille minimale que de 15 champs"

This makes it sound to me like it's saying you only need to support tuples of size 15 and up. When it is trying to say that you need to support tuples of size 0 to at least 15. (though it's clarified in the very next sentence)

How about something along the lines of "n'imposent aux compilateurs [...] que de supporter jusqu'à au moins 15 champs" or something along those lines?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A titre d'exemple

À titre d'exemple ?


```haskell
ghci> :t ('0', '1', '2', '3', '4', '5', '6', "8-tuple")
('0', '1', '2', '3', '4', '5', '6', "8-tuple")
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kind of weird to 0-index here (I assume that's from the English version).


### Quand l'utiliser ?

Un _tuple_ est utile pour associer des données, éventuellement hétérogènes : "J'ai besoin d'associer ces éléments". Il n'a pas de valeur *sémantique* (sens), mais se concentre sur la *syntaxe* (structure), c'est pourquoi c'est souvent déconseillé d'en abuser. Si la structure de données à créer est utilisée à plusieurs endroits de l'application, il est préférable d'utiliser un _Record_. Au contraire, si l'utilisation est isolée et locale (interne à une fonction par exemple) alors un _tuple_ peut être approprié !
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pas certain que ce soit clair pour un débutant ce que l'on entend par "associer". Mais je n'ai pas de proposition alternative pour l'instant...

False
```

Tout _set_ est un contenu par lui-même.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

est un contenu par lui-même

est un sous-ensemble de lui-même ?


En Haskell, les _Maps_ sont le conteneur privilégié pour le stockage de données sous forme clé-valeur, parfois également appelées dictionnaires (_dictionnaries_)

Une `Map` nécessite que ses clés respectent une contrainte de tri (`Ord k`) tout comme une `Set` pour ses valeurs. La raison est la même que pour les _sets_, un _balanced binary tree_ est utilisé comme structure de données dans l'implémentation bas-niveau du type `Map` en Haskell, qui nécessite cette capacité à trier les clés.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

une Set

un Set


Une `Map` nécessite que ses clés respectent une contrainte de tri (`Ord k`) tout comme une `Set` pour ses valeurs. La raison est la même que pour les _sets_, un _balanced binary tree_ est utilisé comme structure de données dans l'implémentation bas-niveau du type `Map` en Haskell, qui nécessite cette capacité à trier les clés.

Le type `Map` et les fonctions qui permettent d'intéragir avec sont importés du module `Data.Map` qui fait partie du _package_ `containers`. Pas d'inquiétude pour les dépendances à ce stade, conteneurs est une bibliothèque centrale et est intégrée dans l'interpréteur _ghci_.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

intéragir

interagir


### Quand l'utiliser ?

Les _maps_ sont vraiment très adaptées pour persister en mémoire des états qui devront être récupérés à partir d'une clé, d'un type préalablement définis. Ceci est dû aux bonnes performances de recherche à partir des clés qui caractérisent les _maps_ grâce à la contraite de tri sur leurs clés, on a une complexité asymptotique (`𝛰(log n)`). Un exemple évident est le stockage de session sur un serveur d'une application web. L'état de la session peut être stocké dans une _map_ avec l'id présent dans le _cookie_ de session comme clé. Ainsi, l'état de la session est accessible de manière performante via cette _map_ pour chaque requête. Cette solution ne permet pas de gérer un nombre infini de sessions mais vous serez étonnés de voir à quelle point elle est efficace, pour répondre simplement aux besoins de la plupart des applications !
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

définis

défini

fromList [('a',1),('b',2),('c',3)]
```

Si on n'explicite pas le type voulu...
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si on

Si l'on ?

@Maeevick
Copy link
Contributor Author

Thanks a lot @Ptival, I'm going to manage all of your comments as soon as possible 👍

@Kleidukos
Copy link
Contributor

@Maeevick To answer your question in Slack, yes I feel it is necessary for now to pause the containers translation until it has reached stability and that you won't have to regularly check it before publishing the French content. You and @Ptival will be notified when the French translation will be mergeable. :)

@Maeevick
Copy link
Contributor Author

Maeevick commented Jun 27, 2021

@Maeevick To answer your question in Slack, yes I feel it is necessary for now to pause the containers translation until it has reached stability and that you won't have to regularly check it before publishing the French content. You and @Ptival will be notified when the French translation will be mergeable. :)

Thanks @Kleidukos, in consequence I will update with @Ptival 's suggestions when green light will be given 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

French - Basics/Containers
3 participants