是否可以用另一种语言为一种语言编写自动垃圾收集器?
Is it possible to write an automatic garbage collector for one language in another language?
以没有自动垃圾收集器的C编程语言为例。我遇到过其他 C 垃圾收集器,例如 Boehm-Demers-Weiser 垃圾收集器和其他实现。但是,它们都使用相同的语言 (C) 或 CPP。
Python 有一个用于 C 的 API,可用于在堆中创建 PyObjects,它还带有一个引用计数器。是否可以使用 Python 为 C 创建垃圾收集器?使用 CPython API 创建对象是否也会在嵌入式解释器中创建对象?它能以任何方式用于为 C 创建自动垃圾收集器吗?
以上如有不妥之处还请多多包涵。我是新手。
C 和 Python 是两种截然不同的语言。 C 是一种编译 语言,而Python 是解释。
在编译语言(如 C 和 C++)中,源代码由编译器直接翻译成机器代码,然后在运行时由您的计算机直接执行 - 换句话说,您的计算机确实 源代码的内容。如果你写的 C 程序不好:
int main(){
char *ptr = malloc(sizeof(char));
ptr = NULL;
return 0;
}
然后您的计算机将尽职尽责地分配一个 char
形状的内存块,将其位置存储在 ptr
中,然后被遗忘。垃圾收集环境会看到在行 ptr = NULL
中,分配的内存现在不可访问,因此它会释放分配的内存供其他程序使用,但在 C 中编译它会保留分配的内存直到程序退出。
Boehm-Demers-Weiser 垃圾收集实际上只是一大堆 C 代码,隐藏在模块中,用它自己的、安全的 GC_MALLOC 替换底层的、危险的 malloc
函数跟踪松散指针的函数,因此您不必这样做。
Python 不像 C。代码行由另一个程序(通常用 C 编写)解释,然后告诉计算机做你想让它做的事。底层代码(内存地址、指针分配和数组管理)完全隐藏在Python中。不可能编写一个 Python 程序来完成与 malloc
在 C 中所做的相同的事情。
简而言之:不,你不能告诉 Python 对 C 进行垃圾收集,因为 Python 解释器已经使用了进行垃圾收集的 C 程序。
以没有自动垃圾收集器的C编程语言为例。我遇到过其他 C 垃圾收集器,例如 Boehm-Demers-Weiser 垃圾收集器和其他实现。但是,它们都使用相同的语言 (C) 或 CPP。 Python 有一个用于 C 的 API,可用于在堆中创建 PyObjects,它还带有一个引用计数器。是否可以使用 Python 为 C 创建垃圾收集器?使用 CPython API 创建对象是否也会在嵌入式解释器中创建对象?它能以任何方式用于为 C 创建自动垃圾收集器吗?
以上如有不妥之处还请多多包涵。我是新手。
C 和 Python 是两种截然不同的语言。 C 是一种编译 语言,而Python 是解释。
在编译语言(如 C 和 C++)中,源代码由编译器直接翻译成机器代码,然后在运行时由您的计算机直接执行 - 换句话说,您的计算机确实 源代码的内容。如果你写的 C 程序不好:
int main(){
char *ptr = malloc(sizeof(char));
ptr = NULL;
return 0;
}
然后您的计算机将尽职尽责地分配一个 char
形状的内存块,将其位置存储在 ptr
中,然后被遗忘。垃圾收集环境会看到在行 ptr = NULL
中,分配的内存现在不可访问,因此它会释放分配的内存供其他程序使用,但在 C 中编译它会保留分配的内存直到程序退出。
Boehm-Demers-Weiser 垃圾收集实际上只是一大堆 C 代码,隐藏在模块中,用它自己的、安全的 GC_MALLOC 替换底层的、危险的 malloc
函数跟踪松散指针的函数,因此您不必这样做。
Python 不像 C。代码行由另一个程序(通常用 C 编写)解释,然后告诉计算机做你想让它做的事。底层代码(内存地址、指针分配和数组管理)完全隐藏在Python中。不可能编写一个 Python 程序来完成与 malloc
在 C 中所做的相同的事情。
简而言之:不,你不能告诉 Python 对 C 进行垃圾收集,因为 Python 解释器已经使用了进行垃圾收集的 C 程序。