이 용어는 어셈블리 언어에서 비롯된 것입니다. 어원을 확인할 수 없지만 이름이 다른 섹션 사용에서 비롯된 것 같습니다. 이 .data
섹션은 실행 과정에서 변경 될 수있는 변수를 .text
나타내지 만 , 섹션은 실행 중에 변경되지 않는 데이터를 포함하므로 필요한 경우 ROM에 넣을 수 있습니다. 따라서 코드에는 유용하지만 변경되지 않는 텍스트 문자열에도 유용합니다. 그것은 아마도 그 용어가 유래 한 곳일 것입니다.
퍼스트 클래스 함수에 대한 Griffin의 의견을 해결하려면 다음 python 3 코드를 고려하십시오.
def counter():
x = 0
def increment(y):
nonlocal x
x += y
print(x)
return increment
실제로 실행하는 코드 increment
는 내부적으로 다음과 같이 보입니다.
self.func_dict['x'] += y
print(self.func_dict['x'])
이 실행 코드는 ROM에 넣을 수 있습니다. 호출 횟수에 관계없이 프로그램 실행 전체에서 변경되지 않습니다 counter()
. 무엇 합니까 변화하는 것은입니다 self
포인터와 멤버 변수. 그것들을 넣어야합니다 .data
. 일 때 return increment
실제로 증가 함수 객체의 새 인스턴스를 반환합니다. 매번 새로운 실행 코드를 동적으로 작성하지는 않습니다. 포인터는 아니지만 코드 자체는 변경할 수 없습니다.
섹션에 저장 해야하는 유일한 코드 는 프로그램 시작시 컴파일러 또는 JIT 컴파일러에 알려지지 않았기 때문에에 .data
의해 생성 된 eval()
것입니다. 그러나 그 코드조차도 불변입니다. 문자열을 변경하고 eval()
다시 호출 하면 이전에 호출 한 시간에서 코드가 변경되지 않고 eval()
완전히 새로운 코드 세트가 생성됩니다.
프로그래밍 모델이 코드가 변경 가능한 것처럼 느껴지더라도, 프로세서 명령 레벨에서 실제 자체 수정 코드는 위험하며 프로세스 컨텍스트 전환과 같은 OS 부두 주제 외부에서는 거의 발견되지 않습니다.
.text
어셈블리 지시어입니다. 어셈블리는 텍스트입니다.