BUFFER: — 초기화되지 않은 버퍼 정의

BUFFER: — 초기화되지 않은 버퍼 정의

BUFFER:(buffer-colon)는 초기화되지 않은 버퍼인 정의 name을 만드는 코어 확장 단어예요.

출처: BUFFER: — Forth 2012 Standard

본문

스택 효과

( u "<spaces>name" -- )

설명

선행 공백 구분자를 건너뛰고 공백으로 구분된 name을 파싱해요. 아래 정의된 실행 의미를 가진 name의 정의를 만들어요. u개의 주소 단위로 구성된 공간이 name에 예약돼요.

name 실행 (name Execution)

( -- a-addr )

a-addrBUFFER:name을 정의할 때 예약한 공간의 주소예요. 프로그램은 내용을 초기화할 책임이 있어요.

참조 (See)

  • A.6.2.0825 BUFFER:

합리성 (Rationale)

BUFFER:는 초기화되지 않은 버퍼를 정의하는 수단을 제공해요. 단일 메모리 공간을 사용하는 시스템에서는 다음과 같이 효과적으로 정의할 수 있어요:

: BUFFER:  CREATE ALLOT ;

그러나 많은 시스템은 초기화되지 않은 데이터 영역과 초기화된 데이터 영역의 분리로 이득을 본다. 그런 시스템은 BUFFER:를 별도의 초기화되지 않은 메모리 영역에서 메모리를 할당하도록 구현할 수 있어요. 임베디드 시스템은 초기화의 부재를 이용해 이득을 얻을 수 있어요 (예: 초기화해야 하는 값이 없는 경우).

BUFFER:가 제공하는 메모리 버퍼는 시스템에 의해 초기화되지 않고, 애플리케이션이 초기화를 요구하면 그것을 초기화하는 것은 애플리케이션의 책임이라는 점에 주목해야 해요.

구현 (Implementation)

이 구현은 CREATE의 자식들이 정렬된 주소를 반환한다는 것에 의존해요.

: BUFFER:  ( u "<spaces>name" -- )
    CREATE ALLOT
;

테스트 (Testing)

\ Buffer is aligned
\ Buffers do not overlap
\ Buffer can be written to
1 CHARS CONSTANT /CHAR
: TFULL? ( c-addr n char -- flag )
    TRUE 2SWAP CHARS OVER + SWAP ?DO
        OVER I C@ = AND
    /CHAR +LOOP NIP
;

더 알아보기 (Learn more)

출처: BUFFER: — Forth 2012 Standard