SqueakByExample:3.7

From 흡혈양파의 번역工房
Jump to navigation Jump to search

프리미티브와 프라그마

스몰토크에서는 모든 것이 객체이며, 모든 것은 메시지를 보내어 동작합니다. 그럼에도 불구하고, 우리는 특정 지점에서, 한계를 보게 됩니다. 특정 오브젝트는 오직 가상 머신에서 제공되는 프리미티브를 불러온 뒤 사용할 수 있습니다.

예를 들면, 다음 오브젝트들은 모두 프리미티브로서 실행됩니다: 메모리 할당(new,new:), 비트 조작 (bitAnd:,bitOr:.bitShift:) 포인터와 정수 연산 (+, --, <, >, *, / , =, ==...) 그리고 배열 접근 (at:, at:put:)

프리미티브는 프로그램식인 <primitive: aNumber>[1] 형식으로 불러옵니다. 이러한 프리미티브를 불러오는 메서드는 오직 그 프리미티브가 오류가 나는 경우, 오류의 다음에 처리할 스몰토크코드 또한 포함할 수 있습니다.

여기에 우리는 SmallInteger>>+[2]를 위한 코드를 볼 수 있습니다. 만약 프리미티브가 오류가 나면 표현식 super+aNumber를 계산하고 반환합니다.


메서드 3.2: 프리미티브 메서드(SmallInteger 클래스의 + 셀렉터 선언부)

+ aNumber
"Primitive. Add the receiver to the argument and answer with the result
if it is a SmallInteger. Fail if the argument or the result is not a
SmallInteger Essential No Lookup. See Object documentation whatIsAPrimitive."

<primitive: 1>
 super + aNumber


스퀵 3.9 이후로, 꺽쇠 괄호 문법the angle bracket syntax은 프라그마pragma[3]라고 불리는 메서드 어노테이션method annotation에 사용합니다.


Notes

  1. VM image에 있는것을 사용하는게 아니라 VM Engine에서 뭔가를 불러올때 사용합니다. 조금 다른 사용예를 보고싶으면 여기를 참고해주세요
  2. SmallInteger 클래스의 + 라는 셀렉터를 의미. Smalltalk에서는 연산자도 셀렉터입니다. 해당되는 클래스를 Class Browser에서 찾아보면 좀 더 명확하게 알 수 있습니다
  3. C언어등에서는 소스코드내에서 compiler에 지시를 내리는 지시자등으로 사용됩니다. 자세한 내용은 여기 를 참고