SqueakByExample:3.7

From 흡혈양파의 번역工房
Revision as of 12:47, 1 March 2013 by Onionmixer (talk | contribs) (주석추가)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

프리미티브와 프라그마

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

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

프리미티브는 구문 <primitive: aNumber>으로 불러옵니다. 이러한 프리미티브를 불러오는 메서드는 오직 그 프리미티브가 오류가 나는 경우에 처리할 스몰토크코드 또한 포함할 수 있습니다.

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


메서드 3.2: 프리미티브 메서드

+ 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[2]라고 불리는 메서드 어노테이션method annotation에 사용합니다.


Notes

  1. SmallInteger 클래스의 + 라는 셀렉터를 의미. Smalltalk에서는 연산자도 셀렉터입니다. 해당되는 클래스를 Class Browser에서 찾아보면 좀 더 명확하게 알 수 있습니다
  2. C언어등에서는 소스코드내에서 compiler에 지시를 내리는 지시자등으로 사용됩니다. 자세한 내용은 여기 를 참고