Comment fonctionne une langue se développer?
Je suis en train d'apprendre le C++, et j'ai juste commencé à apprendre à propos de certains de Qts'capacités de code de programme avec une interface graphique. Je me suis posé la question suivante:
Comment C++, qui, auparavant, n'avait pas de syntaxe capable de demander à l'OS d'une fenêtre ou d'un moyen de communiquer à travers les réseaux (avec des Api qui je ne comprends pas complètement non plus, j'avoue) soudain obtenir de telles capacités par le biais des bibliothèques écrites en C++ eux-mêmes? Tout cela semble terriblement circulaire pour moi. Ce que le C++ instructions pourriez-vous éventuellement venir dans les bibliothèques?
Je me rends compte que cette question peut sembler trivial à une expérience de développeur de logiciel, mais j'ai fait des recherches pendant des heures sans trouver de réponse directe. Il est arrivé au point où je ne peux pas suivre le tutoriel sur Qt parce que l'existence de bibliothèques est incompréhensible pour moi.
- Comment std::cout même de dessiner quoi que ce soit sur le moniteur? Ou faut-il s'asseoir sur le dessus d'un compilateur qui comprend votre matériel?
- Grande question. En fin de compte, il est difficile de répondre jusqu'à ce que vous l'étude du matériel.
- Voir aussi: stackoverflow.com/questions/9163554/...
- Qt n'est pas une expansion de la langue (qui aurait besoin d'un Qt-connaissance du compilateur). Il s'agit simplement d'une bibliothèque qui est ajouté à votre arsenal. Finalement, au niveau le plus bas de toutes les bibliothèques de communiquer avec le système d'exploitation via des appels système, qui sont indépendants de la langue, mais très dépendant du système d'exploitation et l'architecture du PROCESSEUR.
- autant que je sache, C++ a assembly en ligne, qui peut faire à peu près tout
- C'est une précieuse question, et celui qui m'a dérangé pendant de nombreuses années, j'ai appris peu à peu sur l'informatique et la programmation.
- En fait Qt ne développez la langue avec sa propre signal-slot mécanisme de réflexion et de nombreuses autres caractéristiques dynamiques. Et ces choses nécessitent un compilateur (le méta-objet compilateur pour compiler vers du code C++.
- Ah. Merci de me rappeler pourquoi j'ai opté contre Qt retour dans la journée. 😉
- Voir aussi cette question sur les Programmeurs - programmers.stackexchange.com/questions/105313/...
- J'adore cette question. Il montre le genre de insightfulness qui ne peut venir que de faire le malin et inexpérimenté dans le même temps, et elle nous oblige à nous, les anciens, à n'oubliez pas de penser à l'extérieur de la boîte. Je vous souhaite bien dans votre programmation de carrière. Cela va faire plus de sens à mesure que vous grandissez plus expérimentés, et peut-être ensuite, vous pouvez revenir ici et de fournir une meilleure réponse.
- Pas strictement pertinentes, mais j'ai toujours pensé que le fait suivant est très cool: Dites que vous voulez créer en C++. Vous écrire un compilateur à l'aide de dire assemblée, et maintenant vous avez un compilateur qui permet de compiler des programmes C++. Ensuite, vous écrivez un nouveau compilateur en C++ (et le compiler à l'aide du compilateur que vous avez). Maintenant jeter l'origine du compilateur, et vous avez tout un système en C++! Une autre apparence circulaire chose qui est très cool de l'omi.
- Curiosité: Le compilateur C++ est écrit en C++. <insert xzibit mème ici>
- assembleur peut faire les mêmes choses c++ (qui est parce que le c++ est juste traduit de l'assembleur).
- Désolé de gâcher le plaisir, mais comment est-ce question sur le sujet?
- Je dirais que Qt n'a pas vraiment de développer le C++. Qt utilise la génération de code basé sur le balisage (spécifique preprosessor macros) dans les sources C++. Les sources sont toujours 100% valide en C++.
Vous devez vous connecter pour publier un commentaire.
Un ordinateur est comme un oignon, il a beaucoup de de nombreux couches, de la graine de pure matériel pour l'extérieur de la couche application. Chaque couche expose certaines parties de lui-même à la prochaine couche externe, de sorte que la couche externe est possible d'utiliser certains des couches internes de la fonctionnalité.
Dans le cas, par exemple, de Windows le système d'exploitation expose le soi-disant WIN32 API pour les applications s'exécutant sur Windows. La bibliothèque Qt utilise cette API pour fournir des applications à l'aide de Qt pour sa propre API. Vous l'utilisation de Qt, Qt utilise WIN32, WIN32 utilise les niveaux inférieurs du système d'exploitation Windows, et ainsi de suite jusqu'à ce que des signaux électriques dans le matériel.
Qt
offre ici une abstraction de la couche en dessous, parce que sur LinuxQt
invoque le Linux API et non pas de l'API WIN32.user32.dll
, ou éventuellementgdi32.dll
.Vous avez raison, en général, les bibliothèques ne peuvent pas faire quelque chose de possible qui n'est pas encore possible.
Mais les bibliothèques n'ont pas à être écrit en C++ afin d'être utilisable par un programme C++. Même si elles sont écrites en C++, il peut, en interne, utiliser d'autres bibliothèques écrites en C++. Donc, le fait que le C++ n'a pas de moyen de le faire ne signifie pas l'empêcher d'être ajoutée, tant qu'il n'est certains façon de le faire à l'extérieur de C++.
À un très faible niveau, certaines fonctions appelées par le C++ (ou C) sera écrite dans le montage et l'assemblage contient les instructions requises pour faire ce que n'est pas possible (ou n'est pas facile) en C++, par exemple pour appeler une fonction du système. À ce point, que le système d'appel peut faire rien votre ordinateur est capable de faire, tout simplement parce que il n'y a rien de l'arrêter.
Le C et le C++ ont 2 propriétés qui permettent cette extensibilité que l'OP est en train de parler.
Dans le noyau ou dans une base de non-protégés mode de plate-forme, des périphériques comme le port série ou un lecteur de disque sont mappés dans la carte mémoire de la même manière que la RAM est. La mémoire est une série de commutateurs et en tournant les commutateurs du périphérique (comme un port série ou le pilote de disque) de votre périphérique de faire des choses utiles.
Dans un mode protégé du système d'exploitation, lorsque l'on veut accéder au noyau de l'espace utilisateur (dire lors de l'écriture dans le système de fichiers ou de dessiner un pixel sur l'écran), on doit effectuer un appel système. C n'a pas de reçu pour instruction de faire un système d'appels, mais C peut appeler du code assembleur qui peut déclencher le bon appel système, c'est Ce qui permet de la C code de parler au noyau.
Afin de rendre la programmation d'une plate-forme plus simple, les appels système sont enveloppés dans des fonctions plus complexes qui peuvent effectuer certaines fonctions utiles au sein de son propre programme. On est libre d'appeler le système des appels directement (à l'aide de l'assembleur), mais il est probablement plus facile de simplement utiliser l'une des fonctions wrapper que la plate-forme de fournitures.
Il y a un autre niveau de l'API qui sont beaucoup plus utile qu'un appel système. Prenez l'exemple de la fonction malloc. Non seulement cet appel au système pour obtenir de grands blocs de mémoire, mais sera de gérer cette mémoire en faisant de la tenue des livres sur ce qui est de prendre place.
Api Win32, enveloppez graphique fonctionnalité avec une plate-forme commune widget. Qt prend un peu plus loin en les enveloppant Win32 (X ou Windows) de l'API dans une plate-forme de façon.
Fondamentalement si un compilateur C active C code en code machine et étant donné que l'ordinateur est conçu pour utiliser de code machine, vous devriez vous attendre C pour être en mesure d'accomplir la part de lions ou de ce que peut faire un ordinateur. Tout ce que le wrapper bibliothèques à faire est de faire le gros du travail pour vous afin que vous n'avez pas à.
volatile
à faire exactement la bonne chose à cet égard.volatile
permettrait de faire la bonne chose (en supposant que le compilateur mis en œuvre correctement). Je suppose que c'est la façon dont il serait fait de toute façon sur les plates-formes qui n'ont pas séparer les adresses d'e/S de l'espace. (Sur x86, cependant, je ne pense pas que je n'ai pas encore vu MMIO fait en dehors du mode protégé, autre que d'écrire sur le VGA de la mémoire tampon. Si votre phrase "non protégé le mode plate-forme" est destinée à décrire non-x86 plutôt que x86 en mode réel plates-formes, vous pouvez le préciser.)Langues (comme C++11) sont spécifications, sur le papier, généralement écrits en anglais. Regardez à l'intérieur de la dernière C++11 projet de (ou d'acheter la coûteuse final spec de votre ISO vendeur).
Généralement, vous utilisez un ordinateur avec une langue mise en œuvre (Vous pouvez en principe exécuter un programme C++, sans ordinateur, par exemple à l'aide d'un tas d'esclaves humains de les interpréter, ce qui serait contraire à l'éthique et inefficace)
Votre C++ mise en œuvre des travaux de général au dessus d'un certain système d'exploitation et de communiquer avec elle (à l'aide de certains de mise en œuvre spécifiques code, souvent dans un système de bibliothèque). De façon générale, que la communication est effectué par les appels système. Regardez par exemple dans syscalls(2) pour une liste des appels système disponible sur le Le noyau Linux.
De l'application point de vue, un syscall est une école élémentaire d'instructions machine comme
SYSENTER
sur x86-64 avec certaines conventions (ABI)Sur mon bureau Linux, les bibliothèques Qt sont au-dessus de X11 bibliothèques client communique avec le serveur X11 Xorg thru X Windows protocoles.
Sur Linux, utiliser
ldd
sur votre exécutable pour voir la (longue) liste des dépendances sur les bibliothèques. Utilisationpmap
sur votre processus en cours d'exécution pour voir ceux qui sont "chargés" au moment de l'exécution. BTW, sur Linux, votre application est probablement en utilisant des logiciels libres, vous pouvez étudier son code source (à partir de Qt, de la Xlib, libc, ... le noyau) pour comprendre davantage ce qui se passeJe pense que le concept que vous êtes absent est les appels système. Chaque système d'exploitation fournit une énorme quantité de ressources et de fonctionnalités que vous pouvez profiter de bas niveau du système d'exploitation liés choses. Même lorsque vous appelez régulièrement une fonction de la bibliothèque, c'est sans doute faire un appel système derrière les coulisses.
Appels système sont d'un faible niveau de la façon de faire usage de la puissance du système d'exploitation, mais peut être complexe et difficile à utiliser, et sont donc souvent "enveloppé" dans les Api de sorte que vous n'avez pas à traiter directement avec eux. Mais en dessous, juste au sujet de tout ce qui implique la O/S liées ressources l'utilisation des appels système, y compris l'impression, la mise en réseau et de prises de courant, etc.
Dans le cas de windows, Microsoft Windows a son interface graphique écrit dans le noyau, il y a donc des appels système pour la fabrication de fenêtres, peinture, graphisme, etc. Dans d'autres systèmes d'exploitation, l'interface graphique ne peut pas être une partie du noyau, auquel cas autant que je sache, il n'y aurait pas de système d'appels de l'interface les choses, et vous ne peut fonctionner que même à un niveau inférieur à ce que de bas niveau des graphismes et de l'entrée, les appels sont disponibles.
Bonne question. Chaque nouveau C ou C++ développeur a présent à l'esprit. Je suis en supposant une norme machine x86 pour le reste de ce post. Si vous utilisez le compilateur C++ de Microsoft, ouvrez votre bloc-notes et tapez ceci (nom du fichier de Test.c)
Et maintenant compiler ce fichier (à l'aide de développeur invite de commande) cl Test.c /FaTest.asm
Maintenant Test ouvert.asm dans votre bloc-notes. Ce que vous voyez est la traduction de code C/C++ est traduit en assembleur. Pensez-vous obtenir le soupçon ?
Programmes C/C++ sont conçus pour s'exécuter sur le métal. Ce qui signifie qu'ils ont accès à plus faible niveau matériel ce qui rend plus facile d'exploiter les capacités du matériel. Dites, je vais écrire une bibliothèque C getch() sur une machine x86.
Selon l'assembleur, je voudrais saisir quelque chose de cette façon :
Je le lance avec un assembleur et générer un .OBJ - Nom il getch.obj.
Je puis écrire un programme en C (je ne l' #inclure quoi que ce soit)
Maintenant le nom de ce fichier - GetChTest.c. Compiler ce fichier en passant getch.obj long. (Ou compiler individuellement .obj et LIEN GetChTest.Obj et getch.Obj ensemble pour produire GetChTest.exe).
Exécuter GetChTest.exe et vous trouvez qu'il vous attend pour la saisie au clavier.
Programmation C/C++ n'est pas seulement à propos de la langue. Pour être un bon C/C++ programmeur, vous devez avoir une bonne compréhension sur le type de machine sur lequel il s'exécute. Vous aurez besoin de savoir comment la gestion de la mémoire est gérée, la façon dont les registres sont structurés, etc., Vous ne pouvez pas besoin de toutes ces informations pour la programmation régulière - mais ils pourraient vous aider énormément. Outre le matériel de base de connaissances, il contribue certainement si vous comprenez comment le compilateur travaille (ie., comment ça se traduit par) - ce qui pourrait vous permettre de modifier votre code. C'est un paquet intéressant!
Les deux langues de soutien __asm mot-clé ce qui signifie que vous pouvez mélanger votre code de langage d'assemblage trop. Apprendre le C et le C++ fera de vous un meilleur arrondi programmeur dans l'ensemble.
Il n'est pas toujours nécessaire de lien avec l'Assembleur. Je l'avais mentionné parce que je pensais que serait de vous aider à mieux comprendre. Essentiellement, la plupart de ces appels de bibliothèques de rendre l'utilisation des appels système /Api fournies par le Système d'Exploitation (OS à son tour, ne l'interaction matérielle des trucs).
Il n'y a rien de magique à l'aide d'autres bibliothèques. Les bibliothèques sont de simples sacs de fonctions que vous pouvez appeler.
Considérez-vous l'écriture d'une fonction comme ceci
Maintenant, si vous incluez ce fichier, vous pouvez écrire
addExclamation(myVeryOwnString);
. Maintenant, vous pourriez demander, "comment avez-C++ soudainement la capacité d'ajouter des points d'exclamation à une chaîne de caractères?" La réponse est facile: vous avez écrit une fonction pour faire cela, alors vous l'avez appelé.Donc, pour répondre à votre question sur la façon dont C++ pouvez obtenir des capacités à dessiner windows par le biais des bibliothèques écrites en C++, la réponse est la même. Quelqu'un d'autre a écrit fonction(s) à le faire, et puis compilées et leur a donné à vous sous la forme d'une bibliothèque.
Les autres questions, répondre à la manière dont la fenêtre de dessin fonctionne réellement, mais vous semblait confus au sujet de la façon dont les bibliothèques de travail alors que je voulais aborder partie la plus fondamentale de votre question.
La clé est la possibilité pour le système d'exploitation pour exposer une API et une description détaillée sur la façon dont cette API est utilisée.
Le système d'exploitation offre un ensemble d'Api avec les conventions d'appel.
La convention d'appel est de définir la façon dont un paramètre est donné dans l'API et comment les résultats sont retournés et les modalités d'exécution de l'appel.
Systèmes d'exploitation et les compilateurs de créer du code pour jouer bien ensemble, il est donc en général n'ont pas à réfléchir, juste à l'utiliser.
Il n'est pas nécessaire pour une syntaxe spéciale pour la création de windows. Tout ce qui est nécessaire, c'est que le système d'exploitation fournit une API pour créer des fenêtres. Une telle API se compose de simples appels de fonctions C++ fournit la syntaxe.
En outre, le C et le C++ sont appelés des systèmes de langages de programmation et sont en mesure d'accéder à l'arbitraire des pointeurs (qui peuvent être mappés à un périphérique par le matériel). En outre, il est également assez simple pour appeler des fonctions définies dans l'assemblée, ce qui permet à la gamme complète des opérations, le processeur fournit. Par conséquent, il est possible d'écrire un OS lui-même à l'aide de C ou de C++ et une petite quantité de l'assemblée.
Il convient également de mentionner que Qt est un mauvais exemple, car il utilise une méta compilateur étendre C++' la syntaxe. Ce n'est cependant pas liée à sa capacité à appeler les Api fournies par le système d'exploitation à fait dessiner ou créer des fenêtres.
Tout d'abord, il y a un peu de malentendus, je pense que
Il n'y a pas de syntaxe pour faire des OS des opérations. C'est la question de sémantique.
Bien, le système d'exploitation est écrit principalement en C. Vous pouvez utiliser bibliothèques partagées (donc, dll) pour appeler le code externe. En outre, le code du système d'exploitation peuvent s'inscrire au système des routines sur syscalls* ou interruptions qui vous pouvez appeler à l'aide assemblée. Que les bibliothèques partagées souvent juste faire que des appels système pour vous, alors vous êtes épargné en ligne de l'assemblée.
Voici le tutorial sur: http://www.win.tue.nl/~aeb/linux/lk/lk-4.html
C'est pour Linux, mais les principes sont les mêmes.
Comment le système d'exploitation est en train de faire des opérations sur les cartes graphiques, les cartes réseau, etc? C'est un très vaste sujet, mais surtout, vous avez besoin d'accéder à des interruptions, des ports ou d'écrire des données dans une mémoire de la région. Depuis que les opérations sont protégés, vous avez besoin de les appeler via le système d'exploitation de toute façon.
Dans une tentative de fournir un point de vue légèrement différent pour les autres réponses, je vais répondre comme cela.
(Disclaimer: je suis en simplifiant un peu les choses, la situation que je donne est purement hypothétique, et il est écrit comme un moyen de démontrer les concepts plutôt que d'être 100% fidèle à la vie).
De penser à des choses d'un autre point de vue, imaginez que vous avez écrit un simple système d'exploitation de base, le filetage, le fenêtrage de mémoire et de capacités de gestion. Vous souhaitez mettre en place une bibliothèque C++ pour permettre aux utilisateurs de programmer en C++ et faire des choses comme faire de windows, dessiner sur les vitres, etc. La question est de savoir comment faire cela.
Tout d'abord, depuis le C++ est compilé en code machine, vous devez définir un moyen d'utiliser le code machine d'interface avec le C++. C'est là que les fonctions de venir dans, fonctions acceptent des arguments et donner les valeurs de retour, elles fournissent donc un moyen standard de transfert de données entre les différentes sections du code. Ils le font par l'établissement de quelque chose de connu comme un convention d'appel.
Un convention d'appel unis, où et comment les arguments doivent être mis en mémoire pour qu'une fonction puisse s'y retrouver quand il est exécuté. Lorsqu'une fonction est appelée, la fonction d'appel endroits les arguments en mémoire, puis la demande de la CPU pour sauter par-dessus de l'autre fonction, où il est ce qu'il fait avant de sauter à l'endroit où il a été appelé à partir. Cela signifie que le code appelé peut être absolument n'importe quoi et il ne changera pas la façon dont la fonction est appelée. Dans ce cas toutefois, le code de la fonction serait pertinent pour le système d'exploitation et fonctionnerait sur le système d'exploitation interne de l'état.
Donc, plusieurs mois plus tard, et vous avez tous votre système d'exploitation fonctions de tri. Votre utilisateur peut appeler des fonctions pour créer des fenêtres et de tirer sur eux, ils peuvent faire des threads et toutes sortes de choses merveilleuses. Voici le problème, votre système d'exploitation fonctions vont être différentes de Linux fonctions ou Windows fonctions. Si vous décidez que vous avez besoin pour donner à l'utilisateur une interface standard afin qu'ils puissent écrire du code portable. Ici est l'endroit où QT est en.
Comme vous avez presque certainement savoir, QT a des charges utiles des classes et des fonctions pour faire le genre de choses que les systèmes d'exploitation, mais d'une manière qui semble indépendante du sous-jacent système d'exploitation. La façon dont cela fonctionne est que QT fournit des classes et des fonctions qui sont uniformes dans la façon dont ils apparaissent à l'utilisateur, mais le code-behind de la fonctions est différent pour chaque système d'exploitation. Par exemple QT QApplication::closeAllWindows() serait en réalité l'appel de chaque système d'exploitation spécialisés de la fermeture de fenêtre de fonction selon la version utilisée. Sous Windows, il serait le plus susceptible d'appel CloseWindow(hwnd) alors que sur un système d'exploitation avec le Système X Window, il pourrait appeler XDestroyWindow(affichage,fenêtre).
Comme on le voit, un système d'exploitation est constituée de plusieurs couches, qui doivent interagir par l'intermédiaire d'interfaces, de nombreuses variétés. Il ya de nombreux aspects que je n'ai même pas abordé, mais de les expliquer tous pourrait prendre un temps très long. Si vous êtes intéressé dans le fonctionnement interne des systèmes d'exploitation, je vous recommandons de vérifier la OS dev wiki.
Garder à l'esprit que la raison pour laquelle de nombreux systèmes d'exploitation choisir d'exposer des interfaces pour C/C++, c'est qu'ils compiler en code machine, ils permettent aux instructions de montage pour être mélangé avec un code propre et ils offrent un grand degré de liberté pour le programmeur.
Encore une fois, il se passe beaucoup de choses ici. Je voudrais aller à expliquer comment les bibliothèques comme .donc et .les fichiers dll n'avez pas à être écrit en C/C++ et peut être écrit dans l'assemblée ou d'autres langues, mais je pense que si je ajouter de plus, je pourrais aussi bien écrire un article entier, et autant que j'aimerais bien faire que je n'ai pas de site pour l'héberger sur.
Lorsque vous essayez de dessiner quelque chose sur l'écran, votre code appelle quelque autre morceau de code qui appelle d'autres codes (etc.) jusqu'à ce que finalement il y a un "appel système", qui est une instruction spéciale que le PROCESSEUR peut exécuter. Ces instructions peuvent être écrites dans l'assemblée ou peut être écrit en C++ si le compilateur prend en charge leur "intrinsèques" (qui sont des fonctions que le compilateur gère "spécialement" en les convertissant en un code spécial que le CPU peut comprendre). Leur travail est-à-dire le système d'exploitation de faire quelque chose.
Lorsqu'un appel système se produit, une fonction est appelée, qui en appelle une autre fonction (etc.) jusqu'à ce que finalement le pilote d'affichage est dit de dessiner quelque chose sur l'écran. À ce moment, le pilote d'affichage ressemble à une région particulière en mémoire physique qui est en fait pas de la mémoire, mais plutôt d'une plage d'adresses qui peut être écrit à comme si il ont de la mémoire. Au lieu de cela, cependant, écrivant à l'adresse de la gamme causes les graphismes matériel pour intercepter la mémoire d'écrire et de dessiner quelque chose sur l'écran.
L'écriture de cette région de la mémoire est quelque chose qui pourrait être codé en C++, car du côté logiciel, c'est juste un accès à la mémoire. C'est juste que le matériel qu'il gère différemment.
Donc, c'est vraiment une explication de base de la façon dont il fonctionne.
syscall
(et son cousinsysenter
) est en effet un PROCESSEUR d'instruction.Syscall
existe bien sûr, mais simplifié, il permet simplement à kernelmode et exécute la fonction noyau.sysenter
sont optimisés appel chemins, depuis le changement de contexte utilisé par les gestionnaires d'interruption n'était pas aussi rapide que tout le monde désiré, mais, fondamentalement, c'est toujours un logiciel généré interrompre tout est géré par la vectorisation d'un gestionnaire installé par le noyau du système d'exploitation. Une partie de la commutation de contexte effectués parsysenter
est en train de changer le mode de bits du processeur à l'ensemble de l'anneau 0 -- un accès complet à tous les privilégiés, les instructions, les registres et la mémoire d'e/S et des domaines.Votre programme C++ est à l'aide de la bibliothèque Qt (également codé en C++). La bibliothèque Qt sera à l'aide de Windows CreateWindowEx fonction (qui a été codé en C à l'intérieur kernel32.dll). Ou sous Linux, il peut être à l'aide de Xlib (également codé en C), mais il pourrait aussi bien être envoie les octets brutes que dans le protocole X signifie "Veuillez créer une fenêtre pour me".
Liés à votre catch-22 question est la note historique que “le premier compilateur C++ a été écrit en C++”, bien qu'en réalité c'était un compilateur C avec un peu de C++ notions, assez pour qu'il puisse compiler la première version, qui pourrait ensuite compiler lui-même.
De même, le compilateur GCC utilise GCC extensions: il est d'abord compilé une version ensuite utilisé pour recompiler lui-même. (GCC instructions de compilation)
Comment je vois la question c'est en fait un compilateur question.
Regardons cela de cette façon, vous écrire un morceau de code en assembleur(vous pouvez le faire dans n'importe quelle langue) qui traduit votre nouvellement écrite de la langue que vous voulez l'appeler Z++ dans l'Assemblée, pour simplifier, appelons cela un compilateur (c'est un compilateur).
Maintenant vous donner ce compilateur certaines fonctions de base, de sorte que vous pouvez écrire int, string, tableaux etc. en fait vous donner suffisamment de capacités, de sorte que vous pouvez écrire le compilateur lui-même dans Z++. et maintenant, vous avez un compilateur pour Z++ écrit en Z++, assez propre droit.
Ce qui est encore plus cool c'est que maintenant vous pouvez ajouter des capacités pour que le compilateur en utilisant les capacités qu'il possède déjà, élargissant ainsi le Z++ langue avec de nouvelles fonctionnalités en utilisant les fonctionnalités précédentes
Un exemple, si vous écrivez le code nécessaire pour dessiner un pixel dans n'importe quelle couleur, vous pouvez l'agrandir à l'aide de la Z++ pour dessiner tout ce que vous voulez.
Le matériel est ce qui permet ce à arriver. Vous pouvez penser de la mémoire graphique comme un grand tableau (composé de tous les pixels sur l'écran). Pour dessiner à l'écran, vous pouvez écrire à ce mémoire à l'aide de C++ ou n'importe quelle langue qui permet l'accès direct à la mémoire. Cette mémoire se produit juste pour être accessible par ou sont situés sur la carte graphique.
Sur les systèmes modernes, les accès à la mémoire graphique directement nécessiterait l'écriture d'un pilote en raison de restrictions diverses, de sorte que vous utiliser des moyens indirects. Bibliothèques de créer une fenêtre (vraiment juste une image comme n'importe quelle autre image) et puis les écrire que l'image à la mémoire graphique qui le GPU s'affiche alors sur l'écran. Rien ne doit être ajouté à la langue, à l'exception de la possibilité d'écrire à certains emplacements de la mémoire, qui est ce que les pointeurs sont pour.