Qu'est-ce que le “atome” type de données?
J'ai rencontré le ATOM
type dans le Win32api et aussi dans le Acrobat API il est ASAtom.
Aussi loin que je peux dire, les atomes sont les clés pour une table de hachage généralement des chaînes et à en accélérer le regarder et de partager des données entre les applications. Est-ce correct et ce qui est de l'étymologie du type d'atome?
MODIFIER
Après quelques poussées de la recherche, j'ai remarqué Prologue utilise des atomes, donc il doit y avoir une origine à ce mot. Il semble qu'il a utilisé pour se référer à un seul élément de données.
- Oui, il y a une origine à la parole. Il vient du mot grec ἄτομος (atomos), qui signifie "indivisible". (langue dans la joue...)
- Je pense que X11 avait l'Atome concept trop - pour autoriser le client app pour stocker un élément de données dans le serveur X.
- Qui a aidé beaucoup, ça expliquerait pourquoi un
ATOM
est défini commetypedef WORD ATOM
parce qu'un mot est l'unité adressable par le CPU (c'est à dire non divisible). - Haha oui... sauf qu'il devrait probablement être plutôt une plus grande type comme
UINT_PTR
, depuis les Processeurs de nos jours l'adresse 32 bits et 64 bits des morceaux. 🙂 - Sur Windows il est défini comme
unsigned short
(probablement parce qu'elle émanait de la 16-bits de windows, mais Acrobat API définit commeunsigned long
. - Ce n'est pas une table de hachage, il s'agit d'un dictionnaire. L'atome est la clé, un simple nombre entier afin de les aider à composer avec des données de longueur variable.
- Êtes-vous sûr? Citation du lien MSDN dans ma question:
Atom tables are implemented as hash tables
. - Ne sont pas les tables de hashage juste une sorte de dictionnaires/maps? Je ne comprends pas ce que tu veux dire...
- Erlang a des atomes ainsi: erlang.org/doc/reference_manual/data_types.html#id66276
- semble très similaire à l'Objectif C "sélecteurs", qui sont en interaction avec par le biais de
sel_registerName :: const char * -> SEL
etsel_getName :: SEL -> const char *
Vous devez vous connecter pour publier un commentaire.
ATOME est une 16-bits de Windows poignée comme primitive. Sa valeur est complètement opaque et en mode utilisateur. Il n'est pas un pointeur ou d'un indice.
typedef unsigned short ATOME;
Comme pour l'étymologie du nom
ATOM
, je sais que j'ai une fois vu dans une ancienne Microsoft documentation de l'API Win32 qu'il est un acronyme de "Aaccès de Memory" ou quelque chose comme ça. C'est un terme utilisé pour de simples identificateurs numériques (autre nom est "poignées") qui correspondent à des structures de données internes du système.De des raisons évidentes, il ne serait pas intelligent de donner à l'utilisateur de diriger des pointeurs vers ces structures. D'abord, parce qu'ils résident dans l'espace du noyau, et la deuxième, parce qu'il viole l'encapsulation. L'utilisateur pourrait donc libérer la mémoire qui ne lui appartient pas, ou de le remplacer, ou de quelques autres idées stupides. Si le système d'exploitation simplement lui donne une certaine remplacement nombre de balise (c'est l'ATOME), qui pourraient ensuite être utilisé pour demander les données à partir du système. Il est également plus rapide pour l'utilisateur de contourner le petit nombre, au lieu de l'ensemble de l'énorme structure de données. Les utilisateurs n'ont pas besoin de soins sur les allocations de mémoire & truc, ou d'accéder à certaines données par le biais de pointeurs qui ne sont plus valables, ce qui pourrait simplement crash de leurs programmes.
XAtom
est appeléXInternAtom
à l'aide de la "stagiaire" terminologie de Lisp. Windows probablement chipé "atome" à partir de là.La première chose que je peux trouver sur le terme "atome" est à partir du langage de programmation Lisp (source). Cependant, il est probablement originaire de logique mathématique. Dans la programmation, ils sont aussi appelés Symboles et à sa forme la plus simple, sont le nom des nombres entiers (un type énuméré dans C serait un exemple). Cependant, ils sont largement utilisés dans de nombreux langages de programmation et dans l'API Win32 et Acrobat API qu'ils sont des identificateurs pour les chaînes dans un tableau.
Aussi, comme Mehrdad points, le sens original grec est "indivisible", de sorte qu'ils impliquent un type de données primitif qui ne peuvent pas être décomposées plus loin.
La RegisterClass /RegistrClassEx fonctions (et quelques autres) de retour d'une ATOME type de données.
L'ATOME identifie de manière unique la classe en cours d'inscription, mais si la fonction échoue, elle renvoie zéro, de sorte que vous pouvez tester si la fonction a échoué comme ceci