Чтобы развернуть ответ runeh:
>>> def foo(a):
... x = 2
... return x + a
>>> import inspect
>>> inspect.getsource(foo)
u'def foo(a):\n x = 2\n return x + a\n'
print inspect.getsource(foo)
def foo(a):
x = 2
return x + a
EDIT: Как указано в @ 0sh, этот пример работает с использованием ipython
, но не является простым python
. В обоих случаях должно быть хорошо, при импорте кода из исходных файлов.
Выключить GC в D2:
import core.memory;
void main(string[] args) {
GC.disable;
// Do stuff.
}
При использовании D1/Phobos:
import std.gc;
void main(char[][] args) {
std.gc.disable;
// Do stuff.
}
В D1/Tango:
import tango.core.Memory;
void main(char[][] args) {
GC.disable;
// Do stuff.
}
GC может быть повторно включен так же путем вызова GC.enable (D2 или D1/Tango) или std.gc.enable (D1/Phobos). Они могут быть сделаны в любой точке в программе. Внутренне, счетчик используется, и на самом деле повторно включить GC, необходимо звонить, включают (), как только в течение каждого раза отключают (), был назван.
Вот некоторые вещи не сделать с отключенным GC, потому что они вызовут утечки памяти:
Однако в то время как D разработан, чтобы быть применимым с GC, отключенным в нескольких критических частях кода (вид критических частей, где оперативные ограничения существуют и Вы, вероятно, не должны использовать форму malloc, не явно разработанного для вычислений в режиме реального времени во всяком случае), это было в основном разработано учитывая, что GC будет присутствовать. В Вашем случае можно все еще использовать GC для всего материала инициализации, и т.д. и только отключить его при ударе части игры, которая на самом деле должна быть реальным временем.
Как примечание стороны, GC и ручное управление памятью могут сосуществовать в D, и на практике, когда оптимизация кода, вручную удаление некоторых больших объектов с тривиальным временем жизни могут привести к значительным ускорениям. Это может быть сделано так же к C++, с помощью оператора удаления, и безопасно сделать, даже если GC включен. Когда у Вас нет оперативных ограничений, это приносит Вам большую часть пользы GC с большей частью выполнения ручного управления памятью.
Если Вы хотите использовать malloc и бесплатное использование std.c.stdlib. GC никогда не будет касаться их. std.gc имеет весь материал, включая который Вы будете нуждаться для управления памятью, отключают ().
GC не является плохой вещью все же. Большинство, если совсем не все библиотеки в D будут иметь где-нибудь в коде, где память явно не удалена так, она не сделает Вас героем для имения его всегда прочь, но хорошо если у Вас будет некоторое критическое требование к производительности.
GC делает, все намного более продуктивное как разрезание массива и создание новых объектов в параметрах, не имея вызывающей стороны хранит ссылку где угодно на них. Хороший код является намного меньше из него, и с GC код становится намного меньшим.
GC может быть удален и заменен простой оберткой вокруг malloc/free.