Wikipédia abstraite/Modèle de fonction pré-générique

From Meta, a Wikimedia project coordination wiki
This page is a translated version of the page Abstract Wikipedia/Pre-generic function model and the translation is 90% complete.
Outdated translations are marked like this.
This page is historic and does not describe the current situation. See f:Wikifunctions:Function model for the current version of the function model.

liste de diffusion de la Wikipédia abstraite Wikipédia abstraite sur IRC Wikifonctions sur Telegram Wikifonctions sur Mastodon Wikifonctions sur Twitter Wikifonctions sur Facebook Wikifonctions sur Youtube site web de Wikifonctions Translate

Le modèle de fonction actuel prescrit le modèle de fonction de Wikifonctions pour le moment où nous prévoyons de lancer le wiki. En particulier, il suppose que nous avons pratiquement achevé les fonctionnalités et avons la capacité d’exécuter des fonctions, des appels de fonctions, des compositions et des types génériques. Mais tout ceci ne sera pas disponible avant la Phase ζ (zêta). Ceci gêne actuellement la mise en œuvre de tâches dans les phases antérieures puisque nous devons passer outre à la volée avec des versions non génériques des types centraux.

(C’est en fait bien pire : en réalité, le modèle de fonctions est un hybride étrange entre le modèle de fonction au lancement et le modèle pré-générique ; nous voulons nettoyer les deux parties dans cette réécriture, en commençant par définir le modèle de fonction pré-générique.)

Afin de résoudre cette barrière, nous fournisssons ici une version simplifiée du modèle de fonction complet qui est conçue comme une solution de déblocage jusqu’à ce que les génériques soient disponibles.

Une différence générale est que, sans les génériques, il y a un besoin largement diminué pour des clés locales. Ainsi le modèle de fonction complet suppose que nous n’avons pas de clés locales ou que nous pouvons nous en passer lors de la normalisation. Ceci ne sera plus possible quand nous aurons les génériques.

« Aucune différence » dans la liste ci-dessous signifie que ce type est le même dans le modèle pré-générique que dans le modèle de fonction complet.

Notez que les Z-IDs ne sont pas finalisés. La discussion à leur sujet se poursuit ici.

Z1/Objet (Z4/Type)

  • Z1K1/type (Z4/Type)

Aucune différence.

Z2/Objet persistant (Z4/Type)

  • Z2K1/id (Z6/String)
  • Z2K2/value (Z1/Object)
  • Z2K3/label (Z12/Multilingual text)
  • Z2K4/aliases (Z32/Multilingual set)
  • Z2K5/description (Z12/Multilingual text)


Aucune différence.

Z3/Clé (Z4/Type)

  • Z3K1/value type (Z4/Type)
  • Z3K2/key id (Z6/String)
  • Z3K3/label (Z12/Multilingual text)

Aucune différence.

Z4/Type (Z4/Type)

  • Z4K1/identity (Z4/Type)
  • Z4K2/keys (Z10/List)
  • Z4K3/validator (Z8/Function)

Z4K2 devrait s’attendre à une Z10/Liste de Z3/Clé mais ce n’est pas encore possible ; aussi il attend juste une Z10/Liste.

Z4K3 devrait s’attendre à une Z8/Fonction qui prend une seule entrée de type Z1/Objet et retourne une Z10/Liste de Z5/Erreur, mais ce n’est pas encore possible ; donc c’est juste une Z8/Fonction.

Z5/Erreur (Z4/Type)

  • Z5K1/error type (Z50/Error type)
  • Z5K2/error value (Z1/Any)

Peut-être aucune différence ?

Z6/Chaîne (Z4/Type)

  • Z6K1/string value (Z6/String)

Aucune différence.

Z7/Appel de fonction (Z4/Type)

  • Z7K1/function (Z8/Function)
  • Others based on Z8/Function

Ceci changera de façon significative. Dans la version pré-générique, ceci est un Z4/Type dont les instances ont un comportement largement différent de celui des instances d’autres type : les clés ne sont pas définies par le Z4/Type, mais par la Z8/Fonction. Ceci nécessitera un traitement spécial dans le monde pré-générique. Pour le monde post-générique, nous espérons obtenir un traitement unifié. Voir la discussion ici.

Z8/Fonction (Z4/Type)

  • Z8K1/arguments (Z10/List)
  • Z8K2/return type (Z4/Type)
  • Z8K3/testers (Z10/List)
  • Z8K4/implementations (Z10/List)
  • Z8K5/identity (Z8/Function)

Ceci changera de façon significative. Dans la version pré-générique, ceci est un Z4/Type et ceci deviendra plus tard une Z8/Fonction qui a essentiellement les clés données. Z8K1/arguments devrait être une Z10/Liste de Z17/Déclaration d’argument (à définir). Z8K3 et Z8K4 devraient être respectivement une Z10/Liste de Z20/Testeur et une Z14/Mise en œuvre prenant la Z8/Fonction en paramètre. Ceci doit être entièrement spécifié.

Z9/Référence (Z4/Type)

  • Z9K1/reference ID (Z6/String)

Aucune différence.

Z10/Liste (Z4/Type)

  • Z10K1/head (Z1/Object)
  • Z10K2/tail (Z10/List)

Ceci sera le Z4/Type classique générique. Dans la version pré-générique, cela prend tout Z1/Objet en valeur et a une Z10/Liste pour sa continuation. Dans le mode post-générique, ceci deviendra une Z8/Fonction avec un seul paramètre de type Z4/Type et qui retourne un Z4/Type (la liste paramétrée) dans le type pour la tête sera le Z4/Type donné et dont le type pour la queue sera une Z10/Liste paramétrée avec le même type.

Z11/Texte monolingue (Z4/Type)

  • Z11K1/language (Z60/Language)
  • Z11K2/text (Z6/String)

Aucune différence.

Z12/Texte multilingue (Z4/Type)

  • Z12K1/texts (Z10/List)

Le type de Z12K1 devrait devenir une Z10/Liste de Z11/Textes monolingues.

Z14/Mise en œuvre (Z4/Type)

  • Z14K1/function (Z8/Function)
  • Z14K2/composition (Z1/Any)
  • Z14K3/code (Z16/Code)
  • Z14K4/built in (Z6/String)

Ceci devrait prendre la fonction en paramètre. Ceci doit être repensé.

Z16/Code (Z4/Type)

  • Z16K1/language (Z61/Programming language)
  • Z16K2/code (Z6/String)
  • Z16K3/signature (Z10/List)

La signature sera une Z10/Liste de Z4/Types. Cela ne sera nécessaire que dans le modèle générique final : la seule raison pour avoir une signature séparée de celle dans la définition est que nous pourrions ne pas avoir besoin d’évaluer les valeurs avant d’exécuter la fonction.

Z17/Déclaration d’argument

  • Z17K1/argument type (Z4/Type)
  • Z17K2/key id (Z6/String)
  • Z17K3/label (Z12/Multilingual text)

Aucune différence. Mais ceci a-t-il réellement besoin d’exister ou cela ne peut-il être qu’une Z3/Clé ?

Z18/Référence d’argument (Z4/Type)

  • Z18K1/key id (Z6/String)

Aucune différence.

Z20/Testeur (Z4/Type)

  • Z20K1/function (Z8/Function)
  • Z20K2/call (Z7/Function call)
  • Z20K3/result validation (Z7/Function call)

Z21/Unité (Z4/Type)

  • (Aucune clé)

Aucune différence.

Z22/Couple (Z4/Type)

  • Z22K1/first (Z1/Object)
  • Z22K2/second (Z1/Object)

Ceci sera générique également.

Z23/Rien (Z4/Type)

  • (Aucune clé)

Aucune différence.

Z31/MonoLingualStringSet (Z4/Type)

  • Z31K1/language (Z60/Language)
  • Z31K2/stringset (Z10/List)

Z31K2/stringset will be a Z10/List of Z6/Strings.

Z32/MultiLingualStringSet (Z4/Type)

  • Z21K1/stringsets (Z10/List)

Z32K1/stringsets will be a Z10/List of Z31/MonoLingualStringSets.

Z39/Référence de clé (Z4/Type)

  • Z39K1/référence (Z6/Chaine)

Aucune différence.

Z40/Booléen (Z4/Type)

  • Z40K1/identity (Z40/Boolean)

Aucune différence.

Z50/Type d’erreur (Z4/Type)

  • Z50K1/keys (Z10/List)
  • Z50K2/...: Something that turns this into a string given the keys. This will be added later.

Ceci changera. La clé Z50K1 prendra en valeur une Z10/Liste de Z3/Clés et, plus important, ceci deviendra une fonction qui crée un Z4/Type.

Z60/Langue (Z4/Type)

  • Z60K1/code (Z6/String)
  • Z60K2/code aliases (Z10/List)

Aucune différence.

Z61/Langage de programmation (Z4/Type)

  • Z61K1/code (Z6/String)

Aucune différence.

Z70/Union (Z4/Type)

N’existe pas dans le modèle pré-générique.

Z80/Octet (Z4/Type)

  • Z80K1/value (Z6/String)

Aucune différence.

Z86/Caractère (Z4/Type)

  • Z86K1/value (Z6/String)

Aucune différence.

Z99/Citation (Z4/Type)

  • Z99K1/quotation (Z1/Object)

Aucune différence.

Voir aussi