Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2020-01-02T19:35:22+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Souci avec la compilation - Cours de C, message #2129742020-01-02T19:35:22+01:00Taurre/@Taurrehttps://zestedesavoir.com/forums/sujet/13427/souci-avec-la-compilation-cours-de-c/?page=1#p212974<figure><blockquote>
<p>EDIT : Est-il possible d’avoir la commande "vim" directement sur msys2 ? Pourquoi n’est elle pas intégré avec le package d’installation ?</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/13427/souci-avec-la-compilation-cours-de-c/?page=1#p212972">DemiAdelou</a></figcaption></figure>
<p>Normalement, oui, tu dois pouvoir l’installer avec <code>pacman -S vim</code>. Sinon, le tuto se focalise juste sur l’installation du compilateur, l’éditeur de texte suggéré est Notepad++ (cela m’aurait paru un peu violent de suggérer Vim de prime abord, surtout pour des débutants ^^").</p>Souci avec la compilation - Cours de C, message #2129722020-01-02T19:20:24+01:00DemiAdelou/@DemiAdelouhttps://zestedesavoir.com/forums/sujet/13427/souci-avec-la-compilation-cours-de-c/?page=1#p212972<p>UPDATE : J’avais pas compris qu’il fallait que je créer mon fichier l’utilisateur dans l’invité de commande et non n’importe ou sur mon ordi (comme sur le bureau par ex.). J’ai réussi à avoir mon fichier a.exe j’essaye d’avancer maintenant. Merci pour vos conseils !</p>
<p>EDIT : Est-il possible d’avoir la commande "vim" directement sur msys2 ? Pourquoi n’est elle pas intégré avec le package d’installation ?</p>Souci avec la compilation - Cours de C, message #2129692020-01-02T18:28:28+01:00DemiAdelou/@DemiAdelouhttps://zestedesavoir.com/forums/sujet/13427/souci-avec-la-compilation-cours-de-c/?page=1#p212969<p>Merci pour l’info à propos de mon emplacement au lancement de la console. Mais j’arrive pas à sortir du C:\msys64 pour retrouver mon fichier que je veux exécuter.</p>
<p>Et lorsque je lance la commande " echo "alias zcc=’gcc -Wall -Wextra -pedantic -std=c11 -fno-common -fno-builtin’" » .bashrc " rien ne se passe. Pas de message d’avertissement, rien. Ayant fait l’écho on m’a renvoyé " usr/bin/bash " donc je suppose que l’interpréteur de commande est de type bash.</p>Souci avec la compilation - Cours de C, message #2129682020-01-02T17:51:05+01:00Taurre/@Taurrehttps://zestedesavoir.com/forums/sujet/13427/souci-avec-la-compilation-cours-de-c/?page=1#p212968<p>Salut,</p>
<p>Le dossier de base dans MSys2 correspond au dossier <code>C:\msysXX\home\utilisateur</code> (où <code>XX</code> correspond à 32 ou 64 suivant ton architecture et « utilisateur » à ton nom d’utilisateur). <img src="/static/smileys/clin.png" alt=";)" class="smiley"></p>
<p>C’est indiqué à <a href="/tutoriels/755/le-langage-c-1/1042_les-bases-du-langage-c/4621_rencontre-avec-le-c/#1-13522_windows">la fin de la section sur Windows</a>. <img src="/static/smileys/smile.png" alt=":)" class="smiley"></p>Souci avec la compilation - Cours de C, message #2129652020-01-02T17:30:21+01:00DemiAdelou/@DemiAdelouhttps://zestedesavoir.com/forums/sujet/13427/souci-avec-la-compilation-cours-de-c/?page=1#p212965<figure><img src="https://image.noelshack.com/fichiers/2020/01/4/1577982364-consoel.png" alt="Rien ne se passe..."><figcaption>Rien ne se passe...</figcaption></figure>
<p>J’ai bien effectué ce que tu m’as demandé de faire mais rien n’y fait… De ce que les erreurs m’indiquent la console semble ne pas retrouver mon fichier qui est dans un dossier sur le bureau mais malheureusement sur cette console je ne retrouve aucun de mes documents présents sur mon ordi (par exemple le bureau, etc…). J’ai taper l’alias, redémarré, taper la commande bash mais rien ne se passe. Merci en tout cas pour l’aide c’est sympa !</p>Souci avec la compilation - Cours de C, message #2129562020-01-02T16:30:45+01:00ache/@achehttps://zestedesavoir.com/forums/sujet/13427/souci-avec-la-compilation-cours-de-c/?page=1#p212956<p>Ok donc la commande <code>gcc</code> existe bel et bien. Tu l’as installé.</p>
<p>La commande <code>zcc</code> n’existe pas. Ce n’est qu’un alias.</p>
<p>Pour définir cet alias tu dois faire cette commande :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span></div><pre><code class="hljs language-bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">"alias zcc='gcc -Wall -Wextra -pedantic -std=c11 -fno-common -fno-builtin'"</span> >> ~/.bashrc
</code></pre></div>
<p>À la suite de quoi, au prochain redémarage de <code>bash</code> (tape <code>bash</code> ou <code>. .bashrc</code> ou encore <code>source .bashrc</code> ou simplement ferme et ré-ouvre la console). L’alias <code>zcc</code> sera disponible.</p>
<p>Sache que <code>zcc</code> est équivalent à <code>gcc -Wall -Wextra -pedantic -std=c11 -fno-common -fno-builtin</code>. C’est juste que c’est plus court. On utilise un alias avec les options les plus courantes.</p>Souci avec la compilation - Cours de C, message #2129532020-01-02T16:23:48+01:00DemiAdelou/@DemiAdelouhttps://zestedesavoir.com/forums/sujet/13427/souci-avec-la-compilation-cours-de-c/?page=1#p212953<figure><img src="https://image.noelshack.com/fichiers/2020/01/4/1577978295-console.png" alt="Je ne trouve pas mon dossier qui contient mon fichier ni même mon bureau etc..."><figcaption>Je ne trouve pas mon dossier qui contient mon fichier ni même mon bureau etc...</figcaption></figure>
<figure><img src="https://image.noelshack.com/fichiers/2020/01/4/1577978392-console1.png" alt="Pour la version voici celle que je possède"><figcaption>Pour la version voici celle que je possède</figcaption></figure>
<p>Quand j’effectue la commande : zcc main.c dans la console MSYS2 elle me répond ceci =</p>
<p>"bash: zcc : commande introuvable</p>Souci avec la compilation - Cours de C, message #2129432020-01-02T15:26:50+01:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/13427/souci-avec-la-compilation-cours-de-c/?page=1#p212943<p>Salut,</p>
<p>Quelle console ouvres-tu ? Avec les outils du tutoriel, tu dois utiliser la console de MSys2.</p>Souci avec la compilation - Cours de C, message #2129412020-01-02T15:21:29+01:00ache/@achehttps://zestedesavoir.com/forums/sujet/13427/souci-avec-la-compilation-cours-de-c/?page=1#p212941<p>Qu’obtiens-tu avec la commande <code>gcc -v</code> ou <code>gcc --version</code> ?</p>Souci avec la compilation - Cours de C, message #2129382020-01-02T15:10:01+01:00DemiAdelou/@DemiAdelouhttps://zestedesavoir.com/forums/sujet/13427/souci-avec-la-compilation-cours-de-c/?page=1#p212938<p>Bonsoir, je vous écrit ici car je n’arrive pas à trouver le forum C dédié. Je rencontre un problème avec le premier code demandé (<a href="https://zestedesavoir.com/tutoriels/755/le-langage-c-1/1042_les-bases-du-langage-c/4621_rencontre-avec-le-c/#4%E2%80%9313526_premiere-rencontre">https://zestedesavoir.com/tutoriels/755/le-langage-c-1/1042_les-bases-du-langage-c/4621_rencontre-avec-le-c/#4–13526_premiere-rencontre</a>).</p>
<p>Je m’explique : j’ai bien créer mon fichier main.c dans un dossier que j’ai créé pour le cours. Jusque là tout se passe bien, j’écris mon code sur notepad++, je l’enregistre toussa toussa. Puis je vais dans l’invité de commande (j’ai essayé Cmder et l’invité de commandes Windows). Tout se passe bien je me balade puis j’entre dans le dossier pour pouvoir exécuter la commande "zcc". Or aucun de mes 2 terminaux ne reconnait la commande pourtant j’ai bien installé le compilateur comme expliqué dans le tuto. J’ai même tapé la commande " alias zcc=’gcc -Wall -Wextra -pedantic -std=c11 -fno-common -fno-builtin' " qui est recommandé quand le zcc n’est pas reconnu.</p>
<p>Si quelqu’un pouvait m’aiguiller <img src="/static/smileys/smile.png" alt=":)" class="smiley"> ! Merci d’avance et bonne année à vous.</p>Programmation bas niveau, message #1997672019-03-01T09:26:08+01:00MichelBillaud/@MichelBillaudhttps://zestedesavoir.com/forums/sujet/12156/programmation-bas-niveau/?page=1#p199767<p>Tu devrais aller faire un tour à la bibliothèque et emprunter quelques bouquins au rayon "Architecture des Ordinateurs". Ca te donnera les bases.</p>Programmation bas niveau, message #1995782019-02-26T14:49:05+01:00YoRHa/@YoRHahttps://zestedesavoir.com/forums/sujet/12156/programmation-bas-niveau/?page=1#p199578<figure><blockquote>
<p>Il me semble que la plupart des cours de compilation universitaires sont pensés pour être accessibles à des gens qui n’ont jamais fait d’assembleur avant. Si tes supports de cours ne sont pas assez introductifs, tu peux en chercher d’autres. Je pense que la meilleure façon de "faire rentrer" ces concepts est d’écrire des petits programmes assembleurs, en particulier contenant des appels de fonction — par exemple une factorielle récursive (plutôt qu’avec une boucle), écrite en assembleur.</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/12156/programmation-bas-niveau/?page=1#p199577">gasche</a></figcaption></figure>
<p>J’ai suivi le premier cours de compilation en L3 (dont le cours que je suit actuellement est sensé faire suite) et en L3 c’était très haut niveau, y’avais 2/3 semaine sur la machine virtuelle mais survolé quoi. Donc a ce moment là j’ai pas ressentit le besoin de me remettre à niveau quelque part.</p>
<p>Par contre actuellement ils supposent beaucoup de chose sur notre niveau de connaissance. Avoir une machine universelle a faire en 2eme semaine de TP c’etait assez violent pour moi.</p>
<p>Je vais essayer ce que tu me dis en tout cas. </p>Programmation bas niveau, message #1995772019-02-26T14:40:14+01:00gasche/@gaschehttps://zestedesavoir.com/forums/sujet/12156/programmation-bas-niveau/?page=1#p199577<p>Il me semble que la plupart des cours de compilation universitaires sont pensés pour être accessibles à des gens qui n’ont jamais fait d’assembleur avant. Si tes supports de cours ne sont pas assez introductifs, tu peux en chercher d’autres. Je pense que la meilleure façon de "faire rentrer" ces concepts est d’écrire des petits programmes assembleurs, en particulier contenant des appels de fonction — par exemple une factorielle récursive (plutôt qu’avec une boucle), écrite en assembleur.</p>Programmation bas niveau, message #1995752019-02-26T14:25:47+01:00YoRHa/@YoRHahttps://zestedesavoir.com/forums/sujet/12156/programmation-bas-niveau/?page=1#p199575<p>Bonjour,</p>
<p>J’ai conscience que ça peut être choquant</p>
<p>Mais je suis en M1 et j’ai quasiment pas suivi de cours de programmation système (a comprendre que je ne les choisissait pas, parce que d’autres cours etaient prioritaire pour moi) et j’ai pas mal de lacunes et de choses ultra basique que je ne connais pas où pour lesquelles je n’ai pas d’automatisme. </p>
<p>Mais la, je suit un cours de compilation avancée, et c’est surtout du bas niveau. </p>
<p>On parle beaucoup de machine virtuelle, de génération de code, de représentation mémoire, et du coup c’est chaud. </p>
<p>Un exemple, on a eu un TP qui consistait a coder une machine universelle basé sur ce défi de prog <a href="http://www.boundvariable.org/task.shtml">http://www.boundvariable.org/task.shtml</a></p>
<p>Et j’ai littéralement rien comprit.
Quand on parle de pointer stack et pointer code par exemple, Je comprends pas non plus conceptuellement a quoi ça correspond. Donc pouvoir imaginer la structure d’une machine avec une mémoire etc a coder moi même, j’ai beaucoup de mal avec toute ces lacunes, là où ça devrait être évident et acquis. </p>
<p>Et là on a un projet d’écriture de machine virtuelle de A a Z, et en restant comme ça je risque de pas aller bien loin. (Puis meme, c’est important dans tout les cas)</p>
<p>Du coup j’aimerais pouvoir me mettre à niveau tout seul mais je saurais pas isoler les notions/titre de cours qui englobe tout ça pour optimiser ma recherche de ressources </p>
<p>Si vous avez, ou des conseil, ça m’aiderait. </p>Quels fonctionnalités dans un langage pour être capable de se compiler ?, message #1985182019-02-03T14:05:57+01:00YoRHa/@YoRHahttps://zestedesavoir.com/forums/sujet/12044/quels-fonctionnalites-dans-un-langage-pour-etre-capable-de-se-compiler/?page=1#p198518<p>Merci a tous pour vos réponses, j’me rend compte que vu comment j’énonce le problème c’est difficile de pouvoir me répondre.</p>
<p>cela dit, après avoir eu une réunion avec mes chefs de projet, ils m’ont dit exactement la même chose que gasche</p>
<blockquote>
<p>L’approche la plus logique me semble être d’essayer d’écrire un compilateur, et de faire évoluer le langage si on se rend compte qu’il faut ajouter des choses pour pouvoir compiler facilement, ou au contraire en retirer.</p>
</blockquote>
<p>C’est à dire que j’ai fait un faux départ en cherchant directement a étendre le langage alors que j’aurais du me concentrer sur la manière de construire mon AST (comme sgble dit plus haut) et d’essayer de commencer a compiler des petites choses, petit a petit, et en paralelle me rendre compte des limitations du langage grace a ça pour savoir quoi étendre et le faire au bon moment.</p>
<p>étant donné que le but ici c’est d’avoir un compilateur pour tout le langage, si j’mamuse a rajouter trop de chose au langage lui-même ce seras juste encore plus dur pour le bootstrap. </p>
<blockquote>
<p>Attention aux problématiques de bootstrap (si la seule implémentation du langage est dans le langage, comment la faire tourner sans une autre implémentation existante ?); si vous avez un interprète, même lent, codé dans un autre langage, c’est une bonne idée de continuer à le maintenir (comme votre langage évolue) pour pouvoir interpréter le compilateur pendant qu’il se compile lui-même.</p>
</blockquote>
<p>Actuellement, le langage a 4 versions, interprété en java, compilé en java vers du C (avec la bibliothèque d’exécution etc) fournis par les profs (c’était l’objet d’étude d’une UE)
Le but ici, c’est de coder le plus possible dans le langage lui même pour vite avoir un début de structure de compilateur.</p>
<p>C’est assez nouveau pour moi donc la manière d’aborder le projet c’était pas gagné. </p>Quels fonctionnalités dans un langage pour être capable de se compiler ?, message #1984122019-02-01T11:58:08+01:00gasche/@gaschehttps://zestedesavoir.com/forums/sujet/12044/quels-fonctionnalites-dans-un-langage-pour-etre-capable-de-se-compiler/?page=1#p198412<p>L’approche la plus logique me semble être d’essayer d’écrire un compilateur, et de faire évoluer le langage si on se rend compte qu’il faut ajouter des choses pour pouvoir compiler facilement, ou au contraire en retirer.</p>
<p>Attention aux problématiques de bootstrap (si la seule implémentation du langage est dans le langage, comment la faire tourner sans une autre implémentation existante ?); si vous avez un interprète, même lent, codé dans un autre langage, c’est une bonne idée de continuer à le maintenir (comme votre langage évolue) pour pouvoir interpréter le compilateur pendant qu’il se compile lui-même.</p>Quels fonctionnalités dans un langage pour être capable de se compiler ?, message #1984012019-02-01T10:29:16+01:00sgble/@sgblehttps://zestedesavoir.com/forums/sujet/12044/quels-fonctionnalites-dans-un-langage-pour-etre-capable-de-se-compiler/?page=1#p198401<figure><blockquote>
<p>Actuellement le langage est riche et contient pas mal de choses, mais il est pas prêt pour se compiler lui même ( y manque notamment la lecture/ecriture de fichiers)</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/12044/quels-fonctionnalites-dans-un-langage-pour-etre-capable-de-se-compiler/?page=1#p198351">YoRHa</a></figcaption></figure>
<p>Je dirais, intuitivement, que si le langage peut exprimer tout algorithme et gérer des types primitifs (entiers, caractères, …) et permet de définir des nouveaux types composés des types primitifs (par des classes ou des types algébriques ou que sais-je), alors le langage en soi à ce qu’il faut. Par exemple, peux-tu représenter des listes, des arbres, avec ton langage ? Rien que pour faire un AST, ça serait pas mal !</p>
<p>Après, pour ce qui est de lire et écrire des fichiers, c’est pas plutôt une question de bibliothèque du langage ? Certes, le langage devra avoir une bibliothèque standard un tant soit peu fournie pour faire des choses utiles.<br>
La bibliothèque standard est généralement écrite utilisant le langage lui-même, mais… évidemment, il faudra bien une « glue » entre ton langage et l’OS à un moment donné.<br>
Une solution serait que ton langage ait de quoi s’interfacer avec les bibliothèques compilées déjà existantes. À partir de là, tu wrapes la libc est tu auras un strict minimum. Avec tes wrappers de la libc, tu peux ensuite faire une bibliothèque standard aussi riche que tu le souhaites, de façon à rendre le code plus agréable à écrire, utilisant les idiomes de ton langages ainsi que son niveau d’abstraction. Une autre solution serait de rendre <em>built-in</em> quelques fonctions utiles, sur lesquelles le reste va reposer. Ou bien encore, une combinaison des deux.</p>
<p>Par exemple, en Python on peut faire ça :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-python"><span class="hljs-keyword">import</span> ctypes
libc = ctypes.CDLL( <span class="hljs-string">'/chemin/vers/libc.so'</span> )
t = libc.time(<span class="hljs-keyword">None</span>)
print(t)
</code></pre></div>
<p>(Exemple tiré et adapté de : <a href="https://en.wikipedia.org/wiki/Foreign_function_interface">https://en.wikipedia.org/wiki/Foreign_function_interface</a>)</p>
<p>Mais personne ne veut écrire ça, en Python. Donc la lib standard de Python élève un peu le niveau, pour permettre qu’on écrive cela à la place :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span></div><pre><code class="hljs language-python"><span class="hljs-keyword">import</span> time
t = time.time()
print(t)
</code></pre></div>
<p>Les deux bouts de code ne sont peut-être pas tout à fait équivalents, j’ai pas testé. Mais c’est pour montrer l’idée.</p>
<p>Sous le capot, ça fait certainement appel aux fonctions bas-niveau de la libc, que ce soit via la FFI ou bien directement en C, dans l’implémentation de Python (CPython).</p>Quels fonctionnalités dans un langage pour être capable de se compiler ?, message #1983962019-02-01T09:39:06+01:00entwanne/@entwannehttps://zestedesavoir.com/forums/sujet/12044/quels-fonctionnalites-dans-un-langage-pour-etre-capable-de-se-compiler/?page=1#p198396<p>Oui, c’est l’exemple que j’avais en tête.</p>Quels fonctionnalités dans un langage pour être capable de se compiler ?, message #1983842019-01-31T23:41:18+01:00minirop/@minirophttps://zestedesavoir.com/forums/sujet/12044/quels-fonctionnalites-dans-un-langage-pour-etre-capable-de-se-compiler/?page=1#p198384<p>Pour rebondir sur ce que dit entwanne, il existe des interprètes Brainfuck écrits en Brainfuck.</p>Quels fonctionnalités dans un langage pour être capable de se compiler ?, message #1983652019-01-31T18:25:34+01:00adri1/@adri1https://zestedesavoir.com/forums/sujet/12044/quels-fonctionnalites-dans-un-langage-pour-etre-capable-de-se-compiler/?page=1#p198365<p>Salut,</p>
<p>On peut trivialement créer un langage à une instruction capable de se compiler lui-même, il suffit que cette instruction produise un compilateur. C’est parfaitement inutile, mais c’est minimal.</p>Quels fonctionnalités dans un langage pour être capable de se compiler ?, message #1983522019-01-31T14:11:49+01:00entwanne/@entwannehttps://zestedesavoir.com/forums/sujet/12044/quels-fonctionnalites-dans-un-langage-pour-etre-capable-de-se-compiler/?page=1#p198352<p>Salut,</p>
<p>Je ne dirais pas qu’il doit nécessairement pouvoir lire et écrire dans des fichiers : s’il gère l’entrée et la sortie standard, c’est suffisant.</p>
<p>À Mes yeux tout langage turing-complet qui gère une entrée et une sortie est capable de « se compiler lui-même ». Mais il est sûrement possible de trouver un sous-ensemble.</p>