맨위로가기

하이퍼토크

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

하이퍼토크는 1980년대 후반에 등장한 객체 지향 스크립트 언어로, 하이퍼카드 환경에서 사용되었다. 영어와 유사한 문법을 사용하여 가독성이 높고 배우기 쉬우며, XCMD와 XFCN을 통해 기능을 확장할 수 있었다. 하이퍼토크는 약한 형식 언어이며, 변수 할당 시 암시적으로 변수를 선언하고, 값의 유형 간에 자동 변환을 지원한다. 하이퍼토크는 다양한 연산자와 제어 구조를 제공하며, 문자열을 처리하는 데 특화된 기능을 갖는다. 하이퍼토크의 영향을 받은 언어로는 xTalk, 액션스크립트, 애플스크립트, 링고, 자바스크립트 등이 있으며, 하이퍼토크에서 사용된 메서드 이름은 다른 언어에도 통합되었다.

더 읽어볼만한 페이지

  • 1987년 개발된 프로그래밍 언어 -
    펄은 래리 월이 개발한 텍스트 조작에 강점을 가진 다목적 프로그래밍 언어이며, 1987년 펄 1.0이 처음 공개된 이후 여러 버전 업데이트를 거쳐 객체 지향 프로그래밍과 유니코드 지원 기능을 추가했고, 현재 펄 5가 널리 사용되며 CPAN을 통해 방대한 모듈 생태계를 제공한다.
  • 1987년 개발된 프로그래밍 언어 - 스컴
    SCUMM은 론 길버트가 루카스아츠 어드벤처 게임 개발을 위해 1987년에 만든 스크립팅 엔진으로, 동사-객체 인터페이스를 특징으로 하며, 여러 루카스아츠 어드벤처 게임과 휴몽거스 엔터테인먼트의 어린이용 게임 개발에 사용되어 다양한 재구현과 도구 개발을 촉진했다.
  • 교육용 프로그래밍 언어 - 하스켈
    하스켈은 해스켈 커리의 이름을 딴 순수 함수형 프로그래밍 언어로, 여러 함수형 언어 통합 노력의 결과로 탄생하여 느긋한 계산법, 패턴 매칭, 타입 클래스, 모나드 등의 특징을 가지며 GHC가 표준 구현체로 사용된다.
  • 교육용 프로그래밍 언어 - 파이썬
    파이썬은 귀도 반 로섬이 개발한 객체 지향적 프로그래밍 언어이며, 간결한 문법과 다양한 라이브러리를 통해 웹 개발, 과학 계산, 인공지능 등 다양한 분야에서 활용된다.
  • 스크립트 언어 - Tcl
    Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다.
  • 스크립트 언어 - PHP
    PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
하이퍼토크 - [IT 관련 정보]에 관한 문서
개요
종류프로그래밍 언어
패러다임절차적
이벤트 구동
발표일1987년
설계자댄 윙클러
개발자애플
영향을 준 언어자연어
파스칼
영향을 받은 언어ActionScript
AppleScript
ECMAScript
JavaScript
Lingo
LiveCode
SenseTalk
SuperTalk

2. 역사

하이퍼토크는 HyperCard 개발팀의 댄 윙클러가 디자인했다.

2. 1. 개발 배경

하이퍼토크는 인터프리터 방식의 스크립트 언어로, 문법이 영어와 유사하여 초보자도 쉽게 배울 수 있다. HyperCard 개발팀의 댄 윙클러가 디자인했으며, XCMD(외부 명령)와 XFCN(외부 함수)이라는 기능을 통해 플러그인 방식으로 기능을 확장할 수 있다. HyperCard는 객체 지향 환경이므로, 각 스크립트는 HyperCard 스택 상의 객체(카드, 버튼, 필드 등)에 부속된다. 이는 일반 사용자도 쉽게 정보 관리 및 프로그래밍 도구를 사용할 수 있도록 하는 하이퍼카드의 목표를 반영한다.

2. 2. 확장성

HyperCard 개발팀의 댄 윙클러가 디자인했다. 확장성을 고려하여 XCMD(외부 명령)와 XFCN(외부 함수)이라는 기구를 마련하여 플러그인 방식으로 기능을 추가할 수 있었다. 이는 다양한 개발자들이 하이퍼카드 플랫폼의 기능을 확장하고 생태계를 풍부하게 하는 데 기여했다.

3. 특징

하이퍼토크는 인터프리터 방식의 스크립트 언어로, 영어와 유사한 문법을 사용하여 초보자도 쉽게 배울 수 있다.[3] HyperCard 개발팀의 댄 윙클러가 디자인했으며, XCMD(외부 명령)와 XFCN(외부 함수)을 통해 플러그인 방식으로 기능을 확장할 수 있다.

하이퍼카드는 객체 지향 환경을 제공하며, 스크립트는 카드, 버튼, 필드 등의 객체에 포함된다.[3] 객체는 속성을 가지며, `set` 명령어로 속성값을 변경할 수 있다.[3] 마우스 클릭이나 키보드 입력 등의 이벤트에 대한 처리를 스크립트에 작성할 수 있다.

값을 저장하는 컨테이너에는 변수, 메시지 박스, 버튼, 필드 등이 있다. `put` 명령어를 사용하여 값을 저장하고, 컨테이너의 이름을 통해 값에 접근한다.[3] 컨테이너에 저장되는 값은 문자열 형식이지만, 산술 연산에 사용될 때는 자동으로 숫자로 변환된다. 부울 값은 `true`, `false` 문자열로 처리된다.[3]

변수에는 전역 변수지역 변수가 있다. 전역 변수는 `global` 키워드로 선언해야 하며, 지역 변수는 선언이 필요 없다. `put` 명령어로 값을 대입하고, `it` 변수는 `answer`나 `get` 명령어의 결과를 저장하는 데 사용된다.[3]

기타 문법은 다음과 같다:


  • 행 구분은 개행으로 한다. 한 행에 여러 명령어를 쓸 수 없고, 여러 행으로 작성하려면 행 끝에 `~` (틸다)를 붙인다.
  • 대소문자는 구분하지 않는다. `on mouseUp`와 `On mouseUp`는 같다. `"hypercard" = "HyperCard"`의 결과는 `true`이다.[3]
  • `--`부터 개행까지는 주석이다.[3]

3. 1. 기본 문법

인터프리터 방식을 채택하는 스크립트 언어로, 그 문법은 영어와 유사하여 초보자도 쉽게 익힐 수 있다.[3]

HyperCard 개발팀의 댄 윙클러가 디자인했다. 확장성을 고려하여 XCMD(외부 명령)와 XFCN(외부 함수)이라는 기구도 마련되어 플러그인 방식으로 기능을 추가할 수 있다.

HyperCard가 객체 지향 환경이기 때문에, 각 스크립트는 HyperCard의 스택 상의 객체인 카드나 버튼, 필드 등의 파츠(객체)에 부속된다.

  • 일련의 처리는 스택, 백그라운드, 카드, 버튼, 필드의 속성인 '''스크립트'''에 작성된다.
  • 처리 내용은 `on «명령 이름»` ~ `end «명령 이름»` 또는 `function «함수 이름»` ~ `end «함수 이름»`으로 묶인 행 내에 기술한다. 이들로 묶이지 않은 내용은 무시된다(문법 오류가 발생할 수도 있다).
  • 처리를 나타내는 행은 반드시 '''명령어''' (answer, go, put 등) 또는 '''키워드''' (if, repeat, do 등)로 시작한다.
  • 함수나, 단순한 숫자나 문자열로 문장을 시작할 수는 없다. 이 점, HyperTalk에서는 명령어와 함수에 명확한 구분이 존재한다.
  • HyperTalk에서 말하는 키워드는, 동명의 명령어 또는 변수를 정의(오버라이드)할 수 없는 예약어를 말한다. 주로 제어 구조를 나타내는 키워드를 문두에 넣을 수 있다. 앞서 언급한 on, function, end 도 키워드에 해당한다.
  • 또한, 선두에 들여쓰기를 나타내는 공백을 넣는 것은 가능하며, 스크립트 편집기에서는 ifrepeat 의 깊이에 따라 자동으로 들여쓰기가 삽입된다.
  • 파라미터에 대한 계산 처리 (sin, max, random 등)나, 시스템 상태 등을 취득하는 처리 (time, date, systemVersion 등)를 '''함수'''라고 부른다. 함수는 the «함수 이름» of «파라미터» 또는 «함수 이름»(«파라미터») 형태로 호출하며, 명령어, 함수, 키워드의 파라미터 내에서 사용할 수 있다.
  • 내장 함수는 두 가지 표기법으로 호출할 수 있지만, 전자가 더 빠르다. 비 내장 함수는 후자의 표기법으로 호출해야 한다.
  • 버튼이나 필드, 카드 등의 객체가 갖는 속성 (id, name, rectangle, location 등)을 '''속성'''이라고 부른다. 속성을 설정할 경우에는 set 명령어를 사용한다 (변경 불가한 속성도 존재한다). 속성을 참조할 경우에는 the «속성 이름» of «객체 이름, 객체 ID 등» 형태로 기술하며, 함수 호출과 유사하다.
  • 값을 내부에 포함하는 것을 '''컨테이너'''라고 부른다. 변수, 메시지 박스, 버튼, 필드 등이 컨테이너에 해당한다. put 명령어를 통해 값을 설정할 수 있으며, 명령어, 함수, 키워드의 파라미터로 전달된 경우, 컨테이너 이름으로 기술된 부분이 값으로 대체된다.
  • 컨테이너에 보관되는 값에는 형식이 존재하지 않으며 (문자열 형식만), 산술 계산에 사용된 경우에는 자동으로 숫자로 변환되며, 부울 값은 true, false 문자열로 처리한다.
  • 변수에는 전역 변수지역 변수가 있다. 전역 변수로 사용할 전에는 global 키워드로 선언할 필요가 있다. 지역 변수에는 선언이 필요 없다.
  • 어느 쪽이든, 값을 대입할 경우에는 put 명령의 값 대입처로 지정한다. 단, it 변수는 answer 명령어 또는 get 명령어 등의 결과 저장처로 암묵적으로 사용된다.
  • 기타, 문법에 관한 세부 사양
  • 행의 구분 문자는 개행이다. 하나의 처리를 여러 행으로 기술하고 싶을 경우에는 행 말단에 ~ (틸다)를 기술한다.
  • 대문자와 소문자는 구별되지 않는다. on mouseUpOn MouseUp 로 기술해도 동일한 동작을 한다. 또한, "hypercard" = "HyperCard" 의 평가값은 true이다.
  • -- 부터 개행까지는 주석으로 처리된다.


'''간단한 예'''



on mouseUp

Beep

put sqrt(2+4) into card field "計算結果"

end mouseUp



이 예는 이 스크립트가 부가된 오브젝트(파츠) 위에서 마우스가 클릭되면 비프음을 울리고, 2와 4를 더한 결과의 제곱근을 이 오브젝트가 놓여있는 카드에 존재하는 '계산 결과'라는 이름의 필드로 보낸다. mouseUp으로 되어 있는 것은 마우스 클릭의 채터링을 방지하기 위해 클릭 후의 업(up)을 사용하고 있다.

3. 2. 객체 지향 프로그래밍

하이퍼카드는 객체 지향 환경을 제공하며, 스크립트는 카드, 버튼, 필드 등 객체에 부속된다.[3] 객체는 속성(property)을 가지며, `set` 명령어를 사용하여 속성값을 변경할 수 있다.[3] 마우스 클릭, 키보드 입력 등 이벤트에 대한 처리를 스크립트 내에 작성할 수 있다.

일련의 처리는 스택, 백그라운드, 카드, 버튼, 필드의 속성인 '''스크립트'''에 작성된다. 처리 내용은 `on «명령 이름»` ~ `end «명령 이름»` 또는 `function «함수 이름»` ~ `end «함수 이름»`으로 묶인 행 내에 기술한다. 이들로 묶이지 않은 내용은 무시된다(문법 오류가 발생할 수도 있다).

처리를 나타내는 행은 반드시 '''명령어''' ( `answer`, `go`, `put` 등) 또는 '''키워드''' ( `if`, `repeat`, `do` 등)로 시작한다. 함수나, 단순한 숫자나 문자열로 문장을 시작할 수는 없다. HyperTalk에서는 명령어와 함수에 명확한 구분이 존재한다. HyperTalk에서 말하는 키워드는, 동명의 명령어 또는 변수를 정의(오버라이드)할 수 없는 예약어를 말한다. 주로 제어 구조를 나타내는 키워드를 문두에 넣을 수 있다. 앞서 언급한 `on`, `function`, `end` 도 키워드에 해당한다. 또한, 선두에 들여쓰기를 나타내는 공백을 넣는 것은 가능하며, 스크립트 편집기에서는 `if` 나 `repeat` 의 깊이에 따라 자동으로 들여쓰기가 삽입된다.

파라미터에 대한 계산 처리 ( `sin`, `max`, `random` 등)나, 시스템 상태 등을 취득하는 처리 ( `time`, `date`, `systemVersion` 등)를 '''함수'''라고 부른다. 함수는 `the «함수 이름» of «파라미터»` 또는 `«함수 이름»(«파라미터»)` 형태로 호출하며, 명령어, 함수, 키워드의 파라미터 내에서 사용할 수 있다. 내장 함수는 두 가지 표기법으로 호출할 수 있지만, 전자가 더 빠르다. 비 내장 함수는 후자의 표기법으로 호출해야 한다.

버튼이나 필드, 카드 등의 객체가 갖는 속성 ( `id`, `name`, `rectangle`, `location` 등)을 '''속성'''이라고 부른다. 속성을 설정할 경우에는 `set` 명령어를 사용한다 (변경 불가한 속성도 존재한다). 속성을 참조할 경우에는 `the «속성 이름» of «객체 이름, 객체 ID 등»` 형태로 기술하며, 함수 호출과 유사하다.

값을 내부에 포함하는 것을 '''컨테이너'''라고 부른다. 변수, 메시지 박스, 버튼, 필드 등이 컨테이너에 해당한다. `put` 명령어를 통해 값을 설정할 수 있으며, 명령어, 함수, 키워드의 파라미터로 전달된 경우, 컨테이너 이름으로 기술된 부분이 값으로 대체된다. 컨테이너에 보관되는 값에는 형식이 존재하지 않으며 (문자열 형식만), 산술 계산에 사용된 경우에는 자동으로 숫자로 변환되며, 부울 값은 `true`, `false` 문자열로 처리한다.

변수에는 전역 변수지역 변수가 있다. 전역 변수로 사용할 전에는 `global` 키워드로 선언할 필요가 있다. 지역 변수에는 선언이 필요 없다. 어느 쪽이든, 값을 대입할 경우에는 `put` 명령의 값 대입처로 지정한다. 단, `it` 변수는 `answer` 명령어 또는 `get` 명령어 등의 결과 저장처로 암묵적으로 사용된다.

기타 문법 관련 세부 사양은 다음과 같다.

  • 행의 구분 문자는 개행이다. 하나의 처리를 여러 행으로 기술하고 싶을 경우에는 행 말단에 `~` (틸다)를 기술한다.
  • 대문자와 소문자는 구별되지 않는다. `on mouseUp`는 `On MouseUp`로 기술해도 동일한 동작을 한다. 또한, `"hypercard" = "HyperCard"`의 평가값은 `true`이다.
  • `--` 부터 개행까지는 주석으로 처리된다.


다음은 간단한 예시다.



on mouseUp

Beep

put sqrt(2+4) into card field "계산 결과"

end mouseUp



이 예시는 이 스크립트가 부가된 오브젝트(파츠) 위에서 마우스가 클릭되면 비프음을 울리고, 2와 4를 더한 결과의 제곱근을 이 오브젝트가 놓여있는 카드에 존재하는 '계산 결과'라는 이름의 필드로 보낸다. `mouseUp`으로 되어 있는 것은 마우스 클릭의 채터링을 방지하기 위해 클릭 후의 업(up)을 사용하고 있기 때문이다.

3. 3. 컨테이너

컨테이너는 값을 저장하는 곳으로, 변수, 메시지 박스, 버튼, 필드 등이 이에 해당한다. `put` 명령어를 사용하여 컨테이너에 값을 설정할 수 있으며, 컨테이너의 이름을 통해 저장된 값에 접근할 수 있다.[3] 컨테이너에 저장되는 값은 문자열 형식이지만, 산술 계산 등에 사용될 때는 자동으로 숫자로 변환된다. 또한, 부울 값은 `true`, `false`와 같은 문자열로 처리된다.[3]

3. 4. 변수

하이퍼토크의 변수에는 전역 변수지역 변수가 있다. 전역 변수를 사용하려면 `global` 키워드로 선언해야 한다. 지역 변수는 선언이 필요 없다. 값을 대입할 때는 `put` 명령어를 사용한다. `it` 변수는 `answer` 명령어, `get` 명령어 등의 결과를 저장하는 데 암묵적으로 사용된다.[3]

3. 5. 기타 문법


  • 행 구분 문자는 개행이다. 한 행에 여러 명령을 작성할 수 없다. 하나의 처리를 여러 행으로 기술하고 싶을 경우에는 행 끝에 `~` (틸다)를 기술한다.
  • 대소문자는 구별되지 않는다. `on mouseUp`는 `On MouseUp`로 기술해도 동일한 동작을 한다. 또한, `"hypercard" = "HyperCard"`의 평가값은 `true`이다.[3]
  • `--`부터 개행까지는 주석으로 처리된다.[3]

4. 연산자 및 제어 구조

하이퍼토크에서 해당 유형의 컨테이너는 해당 컨테이너 유형의 복수형을 이름으로 사용하는 컬렉션으로도 사용할 수 있었다. 예를 들어 카드에 있는 필드의 컬렉션은 `card fields`였다. 이러한 컬렉션 자체도 자체 속성을 가진 컨테이너였으며, 이 중 핵심은 반복 및 유사한 작업 중에 널리 사용되는 `number` 속성이었다.

```applescript

repeat with i = 1 to the number of card fields

hide field i

end repeat

```

이 코드는 하이퍼토크의 또 다른 일반적인 특징을 보여준다. 즉, 속성은 여러 이름과 연산자를 가질 수 있다는 것이다.

하이퍼토크의 연산자 및 제어 구조에 대한 자세한 내용은 #연산자 및 #제어 구조 하위 섹션을 참조하면 된다.

4. 1. 연산자

하이퍼토크는 산술, 비교, 논리 연산자를 지원하며, 영어 단어 또는 직관적인 기호를 사용한다. 비트 연산자, 주소 연산자 등은 지원하지 않는다.[1]

4. 2. 제어 구조

하이퍼토크는 조건문(`if...then...else...end if`), 반복문(`repeat...end repeat`) 등 일반적인 제어 구조를 지원한다. `repeat with` 구문을 사용하여 특정 범위의 값을 반복할 수 있다. 예를 들어, 카드에 있는 모든 필드를 숨기는 코드는 다음과 같다.

```applescript

repeat with i = 1 to the number of card fields

hide field i

end repeat

```

위 코드는 `hide` 명령과 `show` 명령이 컨테이너의 `visible` 속성 값을 설정하여 작동한다는 것을 보여준다. `hide field i`는 `set the visible of field i to false`와 동일하다.

시각적 업데이트를 중지하는 `lock screen` 명령은 `set the lockscreen to true`의 단축형이다. 여기서 `lockscreen`은 하이퍼카드 자체의 속성이자 컨테이너이다. 이와 같은 구문 설탕은 하이퍼토크에서 발견되었으며, 구문을 단순화하고 일반적인 코드의 가독성을 향상시키기 위해 사용되었다.

하이퍼카드 2.2 이상에서는 컬렉션의 컬렉션도 컨테이너의 `parts`로 사용할 수 있었다. 이를 통해 스크립트는 단일 반복자를 사용하여 컨테이너의 모든 객체를 주소 지정할 수 있었다.

5. 데이터 처리

하이퍼토크는 배열이나 목록과 같은 구조를 만들기 위해 청킹(chunking) 시스템을 사용했다. 여러 데이터 항목을 쉼표(,)로 구분하여 변수에 넣어 이러한 구조를 만들 수 있었다. 다양한 유형의 데이터를 필요에 따라 구문 분석되는 문자열을 사용하여 하이퍼토크 스크립트로 가져올 수 있었다. 예를 들어, 화면 객체의 위치는 왼쪽 위를 기준으로 하는 X, Y 좌표 쌍으로 정의되었다.[1]

하이퍼토크에서 문자열은 자체적으로 여러 컨테이너의 모음을 포함하는 컨테이너로 간주되었다. 이를 통해 스크립트는 다른 컨테이너와 동일한 탐색 명령을 사용하여 텍스트를 구문 분석할 수 있었다. 텍스트를 컨테이너로 취급하는 이 프로세스를 "청킹(chunking)"이라고 불렀으며, 관련 함수는 "청크 표현식(chunk expressions)"이라고 불렀다. 하이퍼토크는 또한 `in` 연산자를 사용하여 부분 문자열 찾기 작업을 통해 문자열을 청킹하는 기능을 포함했다.[1]

5. 1. 배열

하이퍼토크는 배열이나 목록과 같은 구조를 만들기 위해 청킹(chunking) 시스템을 사용했다. 이러한 구조는 여러 데이터 항목을 쉼표(,)로 구분하여 변수에 넣어 만들 수 있었다. 다양한 유형의 데이터를 필요에 따라 구문 분석되는 문자열을 사용하여 하이퍼토크 스크립트로 가져올 수 있었다. 예를 들어, 화면 객체의 위치는 왼쪽 위를 기준으로 하는 X, Y 좌표 쌍으로 정의되었다. 다음 코드는 좌표 쌍을 저장하는 `pos`라는 변수를 만들고, 이를 조작하여 카드의 모든 버튼을 왼쪽 위에서 오른쪽 아래로 대각선으로 다시 배치한다.

```applescript

on mouseUp

put "100,100" into pos

repeat with x = 1 to the number of card buttons

set the location of card button x to pos

add 15 to item 1 of pos

end repeat

end mouseUp

```

`item` 청킹 표현식은 원래 쉼표 구분자를 기반으로 했지만, 이후 하이퍼카드 버전에서는 `itemDelimiter` 값을 변경하여 임의의 목록 및 구조를 구문 분석할 수 있게 했다.[1]

5. 2. 문자열 처리

하이퍼토크에서 문자열은 자체적으로 여러 컨테이너의 모음을 포함하는 컨테이너로 간주되었다. 이를 통해 스크립트는 다른 컨테이너와 동일한 탐색 명령을 사용하여 텍스트를 구문 분석할 수 있었다. 예를 들어, 공백으로 구분된 데이터 파일에서 세 번째 열을 추출하려는 경우 다음과 같이 할 수 있다.

```applescript

put the third word of theFilesText into colThree

```

이 구문을 통해 스크립트는 특정 데이터를 찾기 위해 텍스트를 "이동"할 수 있었다.

```applescript

put the first character of the third word of line 5 of card field "sometext" into theChar

```

텍스트를 컨테이너로 취급하는 이 프로세스를 "청킹(chunking)"이라고 불렀으며, 함수는 "청크 표현식(chunk expressions)"이라고 불렀다.

하이퍼토크는 또한 `in` 연산자를 사용하여 부분 문자열 찾기 작업을 통해 문자열을 청킹하는 기능을 포함했다. 다음 코드는 `repeat` 루프의 일부로 `in`을 사용하여 주어진 패턴의 모든 예를 찾고, `offset`은 문자열 내에서 해당 패턴의 위치를 찾는다.

```applescript

function replaceStr pattern,newStr,inStr

repeat while pattern is in inStr

put offset(pattern,inStr) into pos

put newStr into character pos to (pos +the length of pattern)-1 of inStr

end repeat

return inStr

end replaceStr

6. 다른 프로그래밍 언어와의 비교

하이퍼토크는 C 언어나 Java 같은 다른 프로그래밍 언어와 비교했을 때 몇 가지 독특한 특징이 있다.

C 언어와 비교하면, 하이퍼토크는 문장을 세미콜론(`;`) 대신 줄 바꿈으로 구분한다. 변수나 함수 선언이 필요 없고, 변수에 값을 넣을 때 자료형(정수, 소수, 문자열 등)을 명시할 필요가 없다. C 언어에서는 숫자의 형 변환(정수, 소수 등)이 명시적으로 일어나지만, 하이퍼토크에서는 자동으로 처리된다.

하이퍼토크는 `put` 명령을 사용해 값을 넣거나 가져오며, `=` 기호는 같다는 의미로 사용된다. C 언어의 연산자 기호 중 일부는 하이퍼토크에서 더 직관적인 표현이나 영어 단어로 대체된다. 하이퍼토크에는 배열이 없지만, '단어', '행', '아이템'(기본 구분자는 쉼표), '문자' 단위로 문자열을 다룰 수 있다.

C 언어가 포인터를 이용해 메모리를 직접 다루거나 하드웨어 수준의 기능을 제공하는 반면, 하이퍼토크는 이러한 기능을 기본적으로 제공하지 않는다. 하지만, XCMD나 XFCN을 통해 운영체제 수준의 기능을 구현할 수 있다. 반복문이나 조건문은 C 언어와 거의 비슷하게 하이퍼토크에서 사용할 수 있다.

Java와 비교하면, 하이퍼토크의 버튼, 필드, 카드 등은 객체와 비슷한 성질을 가진다. 속성(property)을 가지고 `set` 명령으로 값을 설정할 수 있으며, 마우스나 키보드 등으로부터 이벤트를 받을 수 있다. 하지만, 하이퍼토크에는 클래스, 인스턴스, 상속과 같은 객체 지향 프로그래밍 개념이 없다. 자신만의 클래스를 만들 수도 없다.

6. 1. C 언어와의 비교

C 언어는 문장의 구분을 세미콜론(;)으로 하지만, 하이퍼토크는 줄 바꿈으로 구분한다. 예를 들어 "put "Hello, World!" into A"와 같이 한 줄에 작성해야 할 코드를 줄바꿈하여 작성하면 오류가 발생한다.

하이퍼토크에서는 변수 선언이나 함수 선언이 필요 없으며, 변수에 대입하는 값(정수, 소수, 문자열)의 자료형을 명시적으로 지정할 필요가 없다. 예를 들어 'A'라는 변수에 정수 "10"이 들어 있어도, 별도의 선언 없이 소수 "0.5"나 문자열 "ten"을 바로 대입할 수 있다. 다만, 문자열이 저장된 변수에 정수를 더하는 연산 등은 오류를 발생시킨다. 문자열과 문자열, 또는 문자열과 숫자를 연결할 때는 "&" 기호를 사용한다.

C 언어와 달리 하이퍼토크는 수치 간의 형 변환(정수, 소수, 부호 있음/없음)이 명시적으로 일어나지 않는다. 예를 들어 "0.5*4", "0.5+1.5"와 같이 소수를 기반으로 한 계산 결과가 정수일 경우, 소수점 이하를 버린 정수 형태로 자동 변환되어 대입된다. 반면 C 언어에서는 가장 상위 형식으로 변환된 후, 최종적으로 대입되는 변수의 형식에 맞춰 반올림 등의 처리가 이루어진다.

변수의 유효 범위는 C 언어와 거의 같다. 특정 함수 내에서 사용된 변수는 다른 함수에서 접근할 수 없지만, 전역 변수는 예외적으로 접근 가능하다.

변수 대입 및 값 가져오기에는 모두 "put" 명령을 사용한다. C 언어의 "A = B+C"는 하이퍼토크에서 "put B+C into A"로 표현되어 순서가 반대가 된다. "put" 명령은 into 뒤에 대상을 지정하지 않으면 '메시지 박스'라는 작은 창에 결과를 출력하며, 필드 등의 객체에도 값을 대입할 수 있다. 하이퍼토크에서 "="는 등호를 의미하며, 대입 연산자로는 사용할 수 없다 (C 언어의 "=="에 해당).

C 언어에서 사용하는 연산자 기호들 중 상당수는 하이퍼토크에서 보다 직관적인 표기나 영어 단어로 대체된다. 예를 들어 C 언어의 "%", "!", "&&", "||"는 각각 하이퍼토크에서 "mod", "not", "and", "or"로 표현된다. 비트 연산자, 주소 연산자 등은 하이퍼토크에 존재하지 않는다.

하이퍼토크에는 배열 개념이 없지만, '단어'(word), '행'(line), '아이템'(item, 기본 구분자는 쉼표), '문자'(char) 단위로 문자열을 분리하여 값을 다룰 수 있다. 단, 일본어 처리에서 "word" 구분은 부정확하므로, 쉼표로 구분되는 "item"을 사용하는 것이 권장된다.

다음은 하이퍼토크와 C 언어에서 유사한 작업을 수행하는 코드 예시이다.

하이퍼토크C 언어



위의 코드에서 하이퍼토크의 `&return&`은 줄바꿈을 의미하며, 실행 결과 "A=220"이 대화 상자에 표시된다.

다음은 문자열 처리를 비교하는 예시이다.

```applescript

put "ABC,DEF,GHI"&return&"GHI,DEF,ABC" into array

put item 2 of line 1 of array & item 2 of line 2 of array into A

answer A

```

위 코드는 "DEFDEF"를 대화 상자에 표시하며, 하이퍼토크가 C 언어보다 비교적 자유로운 문자열 처리를 지원함을 보여준다.

C 언어는 포인터를 이용한 메모리 동적 할당, 시프트 연산 등 하드웨어 수준의 접근이 가능하지만, 하이퍼토크에서는 이러한 기능을 표준으로 제공하지 않는다. 단, XCMD 및 XFCN을 통해 사운드, 이미지 처리 등 운영체제 수준의 기능은 구현할 수 있다.

반복문, 조건문 등은 C 언어와 거의 동일하게 하이퍼토크에서 구현 가능하다. 예를 들어 C 언어의 `while(1){...}` (무한 루프)는 `repeat ... end repeat`, `for(i=1;i<=10;i++){...}`는 `repeat with i = 1 to 10 ... end repeat`, `if(i==10){...}`는 `if i=10 then ... end if`와 같이 표현할 수 있다.

6. 2. Java와의 비교


  • 버튼, 필드, 카드 등은 객체적인 성질을 가진다.
  • 프로퍼티(속성)를 가지며, "set" 명령을 사용하여 프로퍼티에 값을 설정할 수 있다.
  • 마우스나 키보드 등으로부터 이벤트를 받는다. 예를 들어, "on mouseUp" ~ "end mouseUp" 내에 처리 내용을 기술한 스크립트는 마우스가 떨어지는 이벤트를 받는 예시이다.
  • "클래스", "인스턴스", "상속" 등, 많은 객체 지향 프로그래밍 언어에 존재하는 개념은 하이퍼토크(HyperTalk)에는 존재하지 않는다.
  • 자신만의 클래스를 생성할 수 없다. 클래스를 선언하는 구문 자체가 존재하지 않는다.
  • "버튼"을 클래스, "카드 위에 생성한 버튼 중 하나"를 인스턴스로 간주할 수 있지만, 하이퍼토크에서는 그러한 명칭을 사용하지 않는다.
  • 포인터 형이 존재하지 않기 때문에, 카드 상, 또는 백그라운드 상의 버튼이나 필드를 참조하려면 객체명, 객체 번호, 객체 ID를 이용하게 된다.[3]


'''하이퍼토크(HyperTalk)'''

```applescript

put highlight of card button "I Agreed" into agreed

set enabled of card button "OK" to agreed

```

'''Java'''

```java

boolean agreed = agreedCheckBox.getState(); // agreedCheckBox, okButton 에 값이 들어있다고 가정한다

okButton.setEnabled(agreed);

7. 하이퍼토크의 영향 및 파생 언어

하이퍼토크(HyperTalk)는 여러 스크립트 언어에 영향을 주었으며, 그 상위 집합을 구현한 언어들을 '''xTalk'''라고 통칭한다.[4]

xTalk에는 다음과 같은 언어들이 있다.

언어설명
CompileIt!-Talk톰 피트만이 개발. 하이퍼토크 코드를 네이티브 68000 머신 코드로 컴파일.
Double-XX-TalkCompileIt!에 추가된 가벼운 하이퍼카드 클론.
MediaTalk오라클 미디어 오브젝트(Oracle Media Objects)의 언어. Plus의 후손이자 최초의 크로스 플랫폼 하이퍼카드 클론.
PlusTalk스피나커 소프트웨어의 Plus 언어. 오라클 미디어 오브젝트(Oracle Media Objects)의 기반.
센스토크(SenseTalk)NeXT에서 시작된 HyperSense와 VNC 기반 테스팅 도구 Eggplant의 언어.
슈퍼토크(SuperTalk)빌 애플턴이 개발한 슈퍼카드(SuperCard)의 언어.
스크립트(Transcript)라이브코드(LiveCode) 소프트웨어 플랫폼 및 개발 환경에서 구현된 언어.
XIONOpenXION으로 구현된 오픈 소스 하이퍼카드 클론의 언어.
xTalkOpenXTalk로 분기된 Livecode 커뮤니티 버전의 오픈 소스 버전.



이러한 xTalk 언어들은 예외 처리, 사용자 정의 객체 속성, 타이머, 멀티 스레딩 등 현대적인 프로그래밍 언어의 기능들을 추가하였다.

하이퍼토크의 구문과 구조는 다음 언어들에도 영향을 미쳤다.

언어설명
액션스크립트(ActionScript)어도비 플래시(Adobe Flash)의 스크립트 언어.
애플스크립트(AppleScript)애플의 클래식 Mac OS의 주요 스크립트 언어. macOS에서도 지원.
링고(Lingo)매크로미디어 디렉터의 프로그래밍 언어. 초기에는 xTalk와 유사했으나, 이후 자바스크립트와 유사한 방향으로 발전.
자바스크립트(JavaScript)브렌던 아이크가 만든 스크립트 언어. 주로 웹 브라우저에서 동적인 웹사이트를 만드는 데 사용.[5] ECMAScript로 표준화됨.
하이퍼스크립트(Hyperscript)HTML에서 가독성 있는 인라인 스크립팅 및 동작의 지역성을 위해 설계된 언어. 자바스크립트 확장에 의해 해석.



자바스크립트의 `onmouseup` 이벤트 핸들러와 같이 하이퍼토크에 의해 대중화된 많은 메소드 이름들이 이후 언어에 통합되었다.[6]

7. 1. xTalk

여러 스크립트 언어들이 하이퍼토크(HyperTalk)의 상위 집합을 구현해왔으며, 이를 통칭하여 '''xTalk'''라고 부른다.[4]

  • CompileIt!-Talk – 톰 피트만이 개발한 하이퍼카드 스택 및 XCMD로, 하이퍼토크 코드로부터 네이티브 68000 머신 코드(예: XCMD 및 XFCN)를 컴파일하고 네이티브 매킨토시 툴박스 루틴을 호출할 수 있게 해준다. CompileIt은 부트스트래핑되었으며, 즉, 이후 버전들은 이전 버전들을 사용하여 컴파일되었다.
  • Double-XX-Talk – Double-XX는 CompileIt!에 추가되어 하이퍼카드 없이 XCMD와 XFCN을 실행할 수 있게 해주는 가벼운 하이퍼카드 클론이었으며, 작은 하이퍼토크 인터프리터도 포함했다.
  • MediaTalk – 오라클 미디어 오브젝트(Oracle Media Objects)의 언어이며, Plus의 후손이자 최초의 크로스 플랫폼 하이퍼카드 클론이다. 또한 유일하게 진정한 모듈식이었다.
  • PlusTalk – 스피나커 소프트웨어(Spinnaker Software)(원래 Format Verlag에서 개발)의 Plus 언어로, 오라클 미디어 오브젝트(Oracle Media Objects)의 기반으로 사용되었다.
  • 센스토크(SenseTalk) – NeXT에서 시작된 HyperSense와 VNC 기반의 테스팅 도구 Eggplant의 언어.
  • 슈퍼토크(SuperTalk) – 빌 애플턴이 개발한 최초의 하이퍼카드 클론인 슈퍼카드(SuperCard)의 언어이다. 애플턴은 또한 인기 있는 월드 빌더(World Builder) 어드벤처 제작 키트와 HyperDA를 제작했다.
  • 스크립트(Transcript)(구 revTalk 및 MetaTalk) –
  • XION – 원래는 구현되지 않은 오픈 소스 하이퍼카드 클론의 언어였다. 현재 OpenXION으로 구현되었다.
  • xTalk – Livecode 커뮤니티 버전의 개발이 Livecode에 의해 중단된 후, 오픈 소스 버전은 현재 OpenXTalk로 분기되었다. 이 포크는 웹사이트에서 개발 중이다.


이러한 클론 및 방언들(일반적으로 xTalk-언어로 통칭)은 예외 처리, 사용자 정의 객체 속성, 타이머, 멀티 스레딩, 심지어 사용자 정의 객체와 같은 현대적인 프로그래밍 언어에서 기대되는 다양한 기능을 언어에 추가했다.

7. 2. 기타 영향받은 언어

스크립트 언어들이 하이퍼토크(HyperTalk)의 상위 집합을 구현해왔으며, 이를 통칭하여 '''xTalk'''라고 부른다.[4]

하이퍼토크의 구문과 구조에 영향을 받은 언어는 다음과 같다.

  • 액션스크립트(ActionScript) – 어도비 플래시(Adobe Flash)의 스크립트 언어.
  • 애플스크립트(AppleScript) – 애플의 클래식 Mac OS의 주요 스크립트 언어이며, 아직 macOS에서 지원된다.
  • 링고(Lingo) – 매크로미디어 디렉터(Macromedia Director)의 프로그래밍 언어. xTalk와 유사한 구문으로 시작했지만, 이후 버전에서는 자바스크립트와 유사한 방향으로 진행되었다.
  • 자바스크립트(JavaScript) – 브렌던 아이크가 만든 스크립트 언어로, 향상된 사용자 인터페이스와 동적 웹사이트를 만들기 위해 일반적으로 웹 브라우저의 일부로 구현된다.[5] 이후 ECMAScript로 일반화되고 표준화되었다.
  • 하이퍼스크립트(Hyperscript) – HTML에서 가독성 있는 인라인 스크립팅 및 동작의 지역성을 위해 설계된 스크립트 언어이며, 자바스크립트 확장에 의해 해석된다.


하이퍼토크에 의해 처음 대중화된 많은 메소드 이름들(예: 자바스크립트onmouseup 이벤트 핸들러)은 이후 언어에 통합되었다.[6]

참조

[1] 잡지 Apple Ponders Standardizing on HyperTalk https://books.google[...] 1989-02-27
[2] 웹사이트 Tools of the Trade: CompileIt! 2.0! http://www.mactech.c[...]
[3] 웹사이트 The Curse and Blessings of Dynamic SQL http://www.sommarsko[...] 2011-06-23
[4] 간행물 Naturalistic types https://dl.acm.org/d[...] 2011-10
[5] 서적 JavaScript Bible https://archive.org/[...] John Wiley & Sons
[6] 웹사이트 Splash keynote 2011, slide 10 http://www.slideshar[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com