Quel est le besoin de garbage collection (GC) dans un langage basé sur la pile? Dans une langue comme Forth ou RPL (sur les calculatrices HP ), y a-t-il un besoin de collecte des ordures?
Je pense, puisque la sortie est extraite de la pile, qu'il n'y aurait aucun besoin. Suis-je en train de manquer quelque chose?
garbage-collection
stack-oriented
Todd Moses
la source
la source
Oui tu as raison. Mais le caractère basé sur la pile n'est qu'une partie de toute l'histoire. Par exemple, l'interpréteur de bytecode Java est également basé sur la pile (le code compilé fonctionne - pour des raisons d'efficacité - différemment). Cela nous dit que n'importe quel langage peut être transformé en langage de pile.
Ce qui compte, ce sont les objets en dehors de la pile, ceux qui peuvent survivre à l'exécution actuelle de la méthode. Tant que la langue n'a rien à voir avec
malloc
ounew
, il n'y a pas de tels objets et vous n'avez besoindelete
ni de GC ni de GC.Un langage dépourvu d'allocation de mémoire dynamique est assez limité dans son utilité.
la source
Le nettoyage de la mémoire est requis si le langage doit prendre en charge les structures de données dynamiques de manière inhérente. Ce qui est presque une nécessité si vous voulez faire quoi que ce soit au-delà du niveau de C. Sans cela, vous êtes coincé avec uniquement des structures de données de taille fixe et la gestion de la mémoire vous-même. C'est ce que Forth d'origine fait bien sûr, mais ce n'est probablement pas quelque chose que vous voudriez faire aujourd'hui, sauf si vous ne faites que du codage de systèmes de bas niveau.
la source
La récupération de place n'est pas nécessaire si la langue utilise l'allocation statique au lieu de l'allocation de pile. Par exemple, Fortran 77 avec l' option -s (stockage statique) alloue toute la mémoire au démarrage du programme, donc aucune allocation de mémoire ne se produit au moment de l'exécution pour être libérée. Bien que cela demande un peu de discipline, il est possible d'écrire des programmes, en particulier des simulations pour utiliser l'allocation de mémoire statique. L'allocation statique supprime toutes les fuites de mémoire et conduit à des performances de cache formidables car le compilateur peut utiliser une analyse statique pour déterminer ce qu'il faut charger dans le cache.
la source