스몰토크

Smalltalk
스몰토크
Smalltalk Balloon.svg
패러다임객체 지향
설계자앨런 케이, 댄 잉걸스, 아델 골드버그
개발자Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Diana Merry, Scott Wallace, Peter Deutsch 및 Xerox PARC
처음 등장한1972년, 50년 전(1969년 개발 개시)
안정된 릴리스
Smalltalk-80 버전 2 / 1980; 42년 전 (1980)
타이핑 분야강력하고 역동적인
범위어휘(정적)
구현 언어스몰토크
플랫폼Xerox Alto (74181)[1][2]
OS크로스 플랫폼(멀티 플랫폼)
주요 구현
오렌지, 돌핀 스몰톡, GemStone/S, GNU 스몰톡, 파로, 스몰톡/X, 스퀵, 퀴즈, 헤이버, VA 스몰톡, VA 스몰톡, VisualWorks
영향을 받다
리스프,[3] Simula,[3] [3]Euler, IMP,[3] 플래너,[3] 로고,[4] 스케치패드,[3] ARPAnet,[3] Burroughs B5000[3]
영향받은
AppleScript, Common Lisp Object System, Dart, Dylan, Etoys, Go, Groovy, Io, Ioke, Java, Lasso, Logtalk, Newspeak, NewtonScript, Object REX, Object-C, PHP 5, Python, Raku, Scratch, Scala

Smalltalk는 객체 지향적이고 역동적유형의 반사 프로그래밍 언어입니다.Smalltalk는 "인간과 컴퓨터의 공생"[4]으로 대표되는 컴퓨팅의 "새로운 세계"를 뒷받침하는 언어로 만들어졌습니다.1970년대에 Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Diana Merry, Scott Wallace 및 기타의해 Xerox PARC의 Learning Research Group(LRG; 학습 연구 그룹)에서 교육용으로, 특히 건설주의 학습을 위해 부분적으로 설계 및 제작되었습니다.

이 언어는 처음에 Smalltalk-80으로 출시되었습니다.스몰톡과 같은 언어들이 활발하게 발전하고 있으며, 그 주변 사용자들의 충성스러운 커뮤니티를 형성하고 있다.ANSI Smalltalk는 1998년에 비준되었으며 Smalltalk의 [5]표준 버전을 나타냅니다.

Smalltalk는 2017년 [6]Stack Overflow Developer Survey에서 "가장 사랑받는 프로그래밍 언어"로 2위를 차지했지만, 2018년 [7]조사에서 가장 사랑받는 프로그래밍 언어 26개에는 포함되지 않았습니다.

역사

Smalltalk에는 많은 [8]종류가 있습니다.Smalltalk라는 단어는 Smalltalk-80 언어를 나타내기 위해 자주 사용됩니다.Smalltalk-80 언어는 1980년에 공개되어 작성된 최초의 버전입니다.Smalltalk VM을 실행하는 최초의 하드웨어 환경은 Xerox Alto 컴퓨터였습니다.

Smalltalk는 Xerox Palo Alto Research Center(PARC)의 Alan Kay가 주도한 연구 결과입니다.Alan Kay가 대부분의 Smalltalk 버전을 설계했고, Adele Goldberg가 대부분의 문서를 작성했으며, Dan Ingalls가 대부분의 초기 버전을 구현했습니다.Smalltalk-71이라는 이름의 첫 번째 버전은 Simula에서 영감을 받은 메시지 전달 아이디어에 기초한 프로그래밍 언어가 "a page of code"[4]에 구현될 수 있다는 내기에 Kay에 의해 며칠 아침에 만들어졌다.연구 작업에 사용된 이후 변형은 현재 Smalltalk-72로 불리며 Actor 모델의 개발에 영향을 미쳤다.그 구문과 실행 모델은 현대의 Smalltalk 변종과는 매우 달랐다.

성능을 얻기 위해 실행 시멘틱스의 일부 측면을 동결시킨 상당한 리비전 후에 (시뮬라와 유사한 클래스 상속 모델을 채택함으로써) Smalltalk-76이 생성되었다.이 시스템은 클래스 라이브러리 코드 브라우저/에디터를 포함한 현재 친숙한 툴의 대부분을 갖춘 개발 환경을 갖추고 있었습니다.Smalltalk-80은 속성 및 동작을 개개의 클래스와 관련지어 「모든 것이 오브젝트」(변수 제외) 패러다임을 유지할 수 있도록 메타클라스를 추가했습니다.또, 정수나 부울치등의 프리미티브(인스턴스 작성의 다른 방법등)도 서포트하고 있습니다.

Smalltalk-80은 소수의 기업(Hewlett-Packard, Apple Computer, Tektronix, Digital Equipment Corporation(DEC)) 및 대학(UC Berkeley)에 제공되어 PARC 외부에서 이용할 수 있는 최초의 언어 변형입니다.이후(1983년) Smalltalk-80 Version 2라는 이름의 일반 가용성 구현이 이미지(개체 정의가 있는 플랫폼에 의존하지 않는 파일) 및 가상 시스템 사양으로 출시되었습니다.ANSI Smalltalk는 [9]1998년부터 표준 언어 참조가 되어 왔습니다.

현재 인기 있는 Smalltalk 구현 모델 중 두 가지는 원래 Smalltalk-80 이미지의 후속 모델입니다.스퀵은 Apple Smalltalk를 통해 Smalltalk-80 버전 1에서 파생된 오픈 소스 구현입니다.VisualWorks는 Smalltalk-80 2.5와 ObjectWorks를 통해 Smalltalk-80 버전 2에서 파생되었습니다(두 제품 모두 Smalltalk를 시장에 출시하기 위해 설립된 Xerox PARC 스핀오프 회사인 ParcPlace Systems의 제품).세대간의 흥미로운 링크로서 2001년 Vassili [10]Bykov는 VisualWorks 내에서 Smalltalk-80을 실행하는 가상 머신인 Hobes를 구현했습니다(Dan Ingalls는 나중에 Hobes를 Squak으로 포팅했습니다).

1980년대 후반부터 1990년대 중반까지 지원, 교육 및 추가 기능을 포함한 Smalltalk 환경은 캘리포니아에 본사를 둔 ParcPlace Systems와 Digitalk라는 두 개의 경쟁 조직에 의해 판매되었습니다.ParcPlace Systems는 Unix/Sun 마이크로시스템s 시장에 초점을 맞춘 반면 Digitalk는 Microsoft Windows 또는 IBM OS/2를 실행하는 인텔 기반 PC에 초점을 맞췄다.두 회사는 Smalltalk의 상당한 메모리 요구, 제한된 런타임 성능 및 SQL 기반 릴레이셔널 데이터베이스 서버에 대한 초기 지원 부족 때문에 Smalltalk의 주류를 차지하기 위해 고군분투했습니다.ParcPlace Smalltalk의 높은 가격 때문에 시장 침투가 중간 규모와 대규모 상업 조직으로 제한되었지만, Digitalk 제품은 처음에는 더 낮은 가격으로 더 많은 고객에게 다가가려고 했습니다.IBM은 처음에 Digitalk 제품을 지원했으나 1995년 VisualAge/Smalltalk라는 Smalltalk 제품을 출시하여 시장에 진출했습니다.이 시점에서 Easel은 Windows 및 OS/2에서 Enfin을 도입했습니다.Enfin은 IBM Smalltalk(나중에 VisualAge)를 개발하기 전에 IBM이 이를 IT 상점에 도입하면서 유럽에서 훨씬 더 인기를 끌게 되었습니다.Enfin은 나중에 Cincom Systems에 인수되어 현재는 Object Studio라는 이름으로 판매되고 있으며 Cincom Smalltalk 제품군의 일부입니다.

1995년 ParcPlace와 Digitalk는 ParcPlace-Digitalk에 합병되었고 1997년 ObjectShare로 재브랜드화 되었습니다.이후 캘리포니아 어바인에 위치하고 있습니다.ObjectShare(NASDAQ: OBJS)는 1999년까지 상장폐지 및 해산될 때까지 공개적으로 거래되었습니다.합병한 회사는 자바에 대한 시장 포지셔닝에 대한 효과적인 답변을 찾지 못했고 1997년에는 소유주들이 사업을 매각하려고 했습니다.1999년, Galmy Software는 ObjectShare Java 개발 랩(원래 Smalltalk/V 및 Visual Smalltalk 개발 팀 포함)을 인수하여 VisualSmalltalk를 소유하고 있지만, Smalltalk 제품의 전세계 유통권은 ObjectShare가 Cincom에 [11]매각했습니다.Visual Works는 Cincom에 매각되어 현재는 Cincom Smalltalk의 일부가 되었다.Cincom은 Smalltalk를 강력하게 지원하여 1999년부터 매년 여러 버전의 VisualWorks와 ObjectStudio를 출시하고 있습니다.

Cincom, GemTalk, Instanceations는 Smalltalk 환경을 계속 판매하고 있습니다.IBM은 1990년대 후반에 Java를 대신 지원하기로 결정한 VisualAge Smalltalk를 보유하고 있으며, 2005년 현재 Instantiations, Inc.[12]에서 제품 이름을 VA Smalltalk(VAST Platform)로 바꾸고 매년 새로운 버전을 계속해서 출시하고 있습니다.오픈 Squak 구현에는 많은 오리지널 Smalltalk 커뮤니티를 포함한 활발한 개발자 커뮤니티가 있으며, 최근에는 OLPC 프로젝트, 협업 애플리케이션 Croquet Project 및 Open Co발트 가상 세계 애플리케이션의 Etoys 환경을 제공하기 위해 사용되고 있습니다.GNU Smalltalk는 GNU 프로젝트의 Smalltalk-80 파생 모델의 무료 소프트웨어 구현입니다.Pharo Smalltalk는 연구와 상업적 환경에서의 사용을 지향하는 Squak의 포크입니다.

2016년 현재 모든 Smalltalk 환경 전반으로 확산된 중요한 발전은 복잡한 웹 애플리케이션 구축을 단순화하기 위해 Seaside와 AIDA/Web이라는 개의 웹 프레임워크의 사용이 증가하고 있다는 것입니다.Seaside는 Cincom, Gemstone, Instantiations가 이를 통합하고 확장하면서 상당한 시장 관심을 보여왔다.

영향

Smalltalk는 Simula에 [13]기반한 많은 객체 지향 프로그래밍 언어 중 하나였다.스몰톡은 또한 가장 영향력 있는 프로그래밍 언어 중 하나이다.Flavors,[14] CLOS, Objective-C, Java, Python, [15]Ruby 및 기타 많은 객체 지향 언어들이 Smalltalk의 영향을 받았습니다.또한 Smalltalk는 신속한 소프트웨어 개발 방법, 신속한 애플리케이션 개발(RAD) 또는 프로토타이핑, 소프트웨어 설계 [16]패턴에 가장 많이 사용되는 언어 중 하나였습니다.Smalltalk 플랫폼은 매우 생산적인 환경을 제공하므로 빠르고 반복적인 개발에 이상적입니다.

Smalltalk는 ARPA(Advanced Research Projects Agency)가 출자한 대규모 연구 프로그램에서 탄생했으며, 다양한 측면에서 컴퓨팅의 현대 세계를 정의했습니다.Smalltalk 외에도 하이퍼텍스트, GUI, 멀티미디어, 마우스, 텔레프레젠스, 인터넷 등의 작업용 프로토타입이 1960년대에 [17][18]ARPA 연구자들에 의해 개발되었다.Alan Kay (Smalltalk의 발명가 중 한 명)는 또한 [4]그가 Dynabook이라고 부르는 태블릿 컴퓨터에 대해 설명했는데, 그것은 아이패드와 같은 현대의 태블릿 컴퓨터와 유사하다.

Smalltalk 환경은 오늘날 일반적인 객체 지향 소프트웨어 설계 패턴을 개발한 최초의 환경입니다.가장 일반적인 것 중 하나는 사용자 인터페이스 설계의 Model-View-Controller(MVC; 모델 컨트롤러) 패턴입니다.MVC 패턴을 통해 개발자는 동일한 기본 데이터에 대한 여러 일관된 보기를 가질 수 있습니다.동일한 기본 사양의 다양한 뷰(엔티티 관계, 데이터 흐름, 객체 모델 등)가 있는 소프트웨어 개발 환경에 이상적입니다.또한 기본 모델을 다양한 각도와 [19]추상화 수준에서 볼 수 있는 시뮬레이션 또는 게임의 경우.

MVC 패턴과 더불어 Smalltalk 언어와 환경은 Graphical User Interface(GUI; 그래피컬 사용자 인터페이스)의 역사에 큰 영향을 미쳤으며 UI 설계에 사용되는 사용자 인터페이스(WYSIWYG)의 사용자 인터페이스, 글꼴 에디터 및 데스크톱 메타포입니다.Smalltalk 환경에 포함된 강력한 디버깅 및 객체 검사 도구는 이후 Lisp Machine 환경을 비롯한 [20]모든 통합 개발 환경의 표준을 설정합니다.

객체 지향 프로그래밍

Smalltalk-80:The Language and the Implementation, 일명 Blue book(블루북), 언어에 관한 오리지널 서적

다른 객체 지향 언어와 마찬가지로 Smalltalk-80(Smalltalk-72에서는 제외)의 중심 개념은 객체의 개념입니다.오브젝트는 항상 클래스인스턴스입니다.클래스는 인스턴스의 속성 및 동작을 설명하는 "블라인도"입니다.예를 들어 GUI의 창 클래스는 창에는 라벨, 위치, 창 표시 여부 등의 속성이 있음을 선언할 수 있습니다.클래스는 인스턴스가 열기, 닫기, 이동 및 숨기기 등의 작업을 지원한다고 선언할 수도 있습니다.각 특정 창 개체는 이러한 속성의 고유한 값을 가지며, 각 개체는 클래스로 정의된 작업을 수행할 수 있습니다.

Smalltalk 객체는 정확히 다음 3가지 작업을 수행할 수 있습니다.

  1. 보류 상태(다른 개체에 대한 참조).
  2. 자체 또는 다른 개체로부터 메시지를 수신합니다.
  3. 메시지를 처리하는 동안 메시지를 자신 또는 다른 개체로 보냅니다.

객체가 보유한 상태는 항상 해당 객체에 대해 비공개입니다.다른 개체는 요청(메시지)을 개체로 전송하여 해당 상태를 쿼리하거나 변경할 수 있습니다.임의의 메시지를 임의의 오브젝트에 송신할 수 있습니다.메시지를 수신하면, 수신자는 그 메세지가 적절한지를 판단합니다.앨런 캐이는 이 관심 개체를 받는 와중 Smalltalk에 통신은 가장 중요한 개념:" 큰 아이디어 'messaging'—that Smalltalk/Squeak의 커널(상당히 우리의 제록스 운항 항공기 정비 주기에 완성된 적이 없는 것이며 단계)모든 것입니다는 대해 언급했다."[21]

시스템 실행되는 대부분의 다른 단어들과는 달리, 스몰 토크 개체 수정할 수 있습니다.라이브 코딩을 적용하는 해결책일 뿐 스몰 토크에‘on-the-fly’ 이 지배 프로그래밍 방법론 중 하나이다의 효율을 높이는 주요 원인이다.

스몰 토크는"순수한"객체 지향 프로그래밍 언어, C++와 자바와 달리도 있는데, 개체, 그리고 기본 형식 값 값 사이의 차이는 없다.스몰 토크에서는 감각 해당 수업의 경우에는 정수 booleans와 캐릭터와 같은 원시 값 또한 물건들과 그들에 대한 작업 메시지를 보내 호출되면.그래서 새로운 행동은 그들의instances—for 예를 들어, 그들의 기존 행동이 바뀔 새로운 규제 structures—or을 구현하기 위해 정의될 수 있는 프로그래머 또는 연장하는 원시적인 값을 구현하는 수업(subclassing을 통해)변경할 수 있습니다.물론지 않으면 이 사실 더 정확하게"모든 값 개체"로 표시할 수 있다고 일반적으로 들어 본 문구"스몰 토크에서는 모든 것을 얻는 개체"에서 요약되어 있습니다.

모든 값이 객체이므로 클래스도 객체입니다.각 클래스는 해당 클래스의 메타클래스의 인스턴스입니다.메타클래스도 개체이며 메타클래스라고 하는 클래스의 인스턴스입니다.코드 블록(Smalltalk의 익명 함수 표현 방식)도 객체입니다.[22]

반사

리플렉션이란 컴퓨터 과학자가 해석 트리나 입력 및 출력 파라미터의 데이터 타입 등 자신의 구조를 검사할 수 있는 소프트웨어 프로그램에 적용하는 용어입니다.리플렉션은 Smalltalk 및 Lisp와 같은 역동적이고 대화형 언어의 기능입니다.리플렉션(해석 또는 컴파일)이 있는 인터랙티브프로그램은 해석/컴파일 중에 생성되어 프로그래밍 방식으로 접근 및 변경이 가능한 코드 오브젝트 자체를 포함한 모든 인메모리 오브젝트의 상태를 유지합니다.

리플렉션도 Smalltalk처럼 메타모델을 갖는 것이 특징이다.메타 모델은 언어를 설명하는 모델이며 개발자는 메타 모델을 사용하여 객체의 구문 분석 트리를 통과, 검사 및 수정하거나 특정 종류의 구조의 모든 인스턴스(예: 메타 모델의 메서드 클래스의 모든 인스턴스)를 찾을 수 있습니다.

Smalltalk-80은 Smalltalk-80에 구현된 완전 반사 시스템입니다.Smalltalk-80은 구조 및 계산 반사를 모두 제공한다.Smalltalk는 Smalltalk-80 객체에 의해 정의된 구조 반사 시스템입니다.시스템을 정의하는 클래스 메서드도 개체이며 정의하는 데 도움이 되는 시스템의 일부입니다.Smalltalk 컴파일러는 텍스트 소스 코드를 메서드 오브젝트에 컴파일합니다.일반적으로 다음과 같습니다.CompiledMethod. 클래스 메서드사전에 저장함으로써 클래스에 추가됩니다.클래스를 정의하는 클래스 계층 부분은 시스템에 새 클래스를 추가할 수 있습니다.시스템은 클래스 및 메서드를 만들거나 정의하는 Smalltalk-80 코드를 실행함으로써 확장됩니다.이와 같이 Smalltalk-80 시스템은 "살아 있는" 시스템이며, 실행 시 확장 기능을 가지고 있습니다.

클래스는 객체이므로 "어떤 메서드를 구현합니까?" 또는 "어떤 필드/슬롯/인스턴스 변수를 정의합니까?"와 같은 질문을 받을 수 있습니다.따라서 시스템 [23]내의 모든 개체에 적용되는 범용 코드를 사용하여 개체를 쉽게 검사, 복사, 직렬화(비직렬화)할 수 있습니다.

Smalltalk-80은 또한 시스템의 계산 상태를 관찰할 수 있는 능력인 계산 반사를 제공한다.원래 Smalltalk-80에서 파생된 언어에서 메서드의 현재 활성화는 의사 변수(6개의 예약된 단어 중 하나)를 통해 명명된 개체로 액세스할 수 있습니다.thisContext에 메시지를 송신함으로써thisContext메서드 활성화는 "누가 이 메시지를 나에게 보냈는지"와 같은 질문을 할 수 있습니다.이러한 기능을 사용하면 가상 시스템을 수정하지 않고도 코루틴 또는 프롤로그와 같은 백트래킹을 구현할 수 있습니다.예외 시스템은 이 설비를 사용하여 구현됩니다.이것의 더 흥미로운 사용 중 하나는 프로그래머가 편집된 각 페이지에 대한 연속성을 저장하고 사용자가 웹 사이트를 탐색할 때 그 사이를 전환함으로써 웹 브라우저의 뒤로 가기 버튼의 복잡성을 처리하는 것을 덜어주는 Seaside 웹 프레임워크입니다.그런 다음 Seaside를 사용하여 웹 서버를 프로그래밍할 수 있습니다.[24]

Smalltalk가 리플렉션을 사용하는 방법의 예로는 오류를 처리하는 메커니즘이 있습니다.개체가 구현되지 않은 메시지를 보내면 가상 시스템은 개체를doesNotUnderstand:메시지를 인수로 리플리케이트합니다.메시지(다른 오브젝트, 인스턴스)Message)에는 메시지 실렉터와Array그 논의의 핵심입니다.대화식 Smalltalk 시스템에서 기본 구현은doesNotUnderstand:에러를 사용자에게 보고하는 에러창(알림창)을 엽니다.이와 반사설비를 통해 사용자는 오류가 발생한 콘텍스트를 검사하고 문제를 일으키는 코드를 재정의하여 Smalltalk-80의 반사설비를 [25][26]사용하여 시스템 내에서 계속 진행할 수 있습니다.

doesNotUnderstand:만 이해(실장)하는 클래스를 만들면 doesNotUnderstand: 메서드를 통해 전송된 메시지를 대행 수신할 수 있는 인스턴스를 만들 수 있습니다.이러한 인스턴스를 투명 [27]프록시라고 합니다.그런 다음 이러한 프록시를 사용하여 여러 Smalltalk 시스템 간에 메시지가 교환되는 분산형 Smalltalk, 데이터베이스에서 객체가 투과적으로 장애 발생되는 데이터베이스 인터페이스, 약속 등의 다양한 기능을 구현할 수 있습니다.분산형 Smalltalk의 설계는 CORBA와 같은 시스템에 영향을 미쳤다.

구문

Smalltalk-80 구문은 소수의 선언과 예약어만을 기반으로 한 미니멀리즘입니다.실제로 Smalltalk에는 6개의 키워드만 예약되어 있습니다.true,false,nil,self,super,그리고.thisContext이것들은 의사 변수라고 불리며 변수 식별자 규칙을 따르지만 프로그래머가 변경할 수 없는 바인딩을 나타냅니다.true,false,그리고.nilpseudo-instance는 싱글톤 인스턴스입니다 self그리고.super해당 메시지에 응답하여 활성화된 메서드 내의 메시지 수신자를 참조하지만, 에 송신합니다.super는 수신기의 클래스가 아닌 메서드의 정의 클래스의 슈퍼 클래스에서 검색됩니다.이것에 의해, 서브 클래스의 메서드는 슈퍼 클래스의 같은 이름의 메서드를 호출할 수 있습니다. thisContext는 현재의 액티베이션레코드를 나타냅니다.내장된 언어 구조는 일부 개체에 대한 메시지 보내기, 할당, 메서드 반환 및 리터럴 구문뿐입니다.모든 연령대의 아이들을 위한 언어로서의 기원에서 표준 Smalltalk 구문은 주류 코딩 언어보다 영어에 가까운 방식으로 구두점을 사용합니다.조건부 평가와 반복을 위한 제어 구조를 포함한 나머지 언어는 표준 Smalltalk 클래스 라이브러리에 의해 내장된 구조 위에 구현됩니다(성능상의 이유로 구현은 이러한 메시지 중 일부를 인식하고 특별하게 취급할 수 있습니다.그러나 이는 최적화일 뿐이며 하드와이어가 아닙니다.를 언어 구문에 포함시킵니다.)

"Smalltalk 구문이 엽서에 들어맞는다"는 격언은 [28][29]Ralph Johnson의 코드 스니펫을 참조하여 메서드의 모든 기본 표준 구문 요소를 보여줍니다.

exampleWithNumber: x y true & false not & (nil is Nil) ifFalse: [self stop]y : = 셀프 사이즈 + 슈퍼 사이즈.#($a #a 'a' 1 1.0) 작업: [: Transcript show: ( 클래스 이름); show: ']^x < y

리터럴

다음으로 Smalltalk-80 메서드에서 리터럴 값으로 쓸 수 있는 가장 일반적인 오브젝트의 예를 나타냅니다.

숫자.다음 목록은 몇 가지 가능성을 보여 줍니다.

42 - 42 123.45 1.2345e2 2r10010 16rA000

마지막 2개의 엔트리는 각각 바이너리와 16진수입니다.'r' 앞의 숫자는 기수 또는 밑수입니다.베이스가 2의 거듭제곱일 필요는 없습니다.예를 들어 36rSMARTAK는 80738163270632의 10진수와 같은 유효한 숫자입니다.

문자는 앞에 달러 기호를 붙여 씁니다.

A달러 

문자열은 작은 따옴표로 둘러싸인 문자 시퀀스입니다.

안녕, 세상아! 

문자열에 따옴표를 포함하려면 두 번째 따옴표를 사용하여 이스케이프합니다.

나는 그들에게 "안녕, 세상아!"라고 말했다. 

큰따옴표는 문자열을 구분하기 때문에 이스케이프할 필요가 없습니다.

난 그들에게 "안녕, 세상아!"라고 말했다. 

2개의 동일한 문자열(모든 동일한 문자를 포함하는 문자열은 동일)은 메모리의 다른 위치에 있는 다른 개체일 수 있습니다.Smalltalk에는 문자열 외에도 기호라고 불리는 문자 시퀀스 객체의 클래스가 있습니다.기호는 고유함을 보증합니다.다른 오브젝트인 동일한 기호는 2개일 수 없습니다.따라서 기호는 비교 비용이 매우 저렴하며 메시지 선택기와 같은 언어 아티팩트에 자주 사용됩니다(아래 참조).

심볼은 # 뒤에 문자열 리터럴이 이어집니다.예를 들어 다음과 같습니다.

#'푸' 

시퀀스에 공백 문자 또는 구두점이 포함되지 않은 경우 다음과 같이 쓸 수도 있습니다.

#후우 

어레이:

#(1 2 3 4) 

에 4개의 정수의 배열을 정의합니다.

많은 구현에서 ByteArray에 대해 다음 리터럴 구문이 지원됩니다.

# [1 2 3 4 ]

에 4개의 정수로 이루어진 Byte Array를 정의합니다.

마지막으로 블록(익명의 함수 리터럴)입니다.

[... 사소한 대화 코드...]

블록에 대해서는 텍스트에서 자세히 설명합니다.

많은 Smalltalk 방언은 다른 오브젝트에 대해 추가 구문을 구현하지만 위의 것은 모두가 지원하는 필수 요소입니다.

변수 선언

Smalltalk에서 일반적으로 사용되는 두 가지 변수는 인스턴스 변수와 임시 변수입니다.기타 변수 및 관련 용어는 특정 구현에 따라 달라집니다.예를 들어, VisualWorks에는 클래스 공유 변수와 네임스페이스 공유 변수가 있는 반면, Squak 및 기타 많은 구현에는 클래스 변수, 풀 변수 및 글로벌 변수가 있습니다.

Smalltalk에서 임시 변수 선언은 메서드 내에서 선언된 변수입니다(아래 참조).메서드의 맨 위에 공백으로 구분되고 세로 막대로 둘러싸인 이름으로 선언됩니다.예를 들어 다음과 같습니다.

 색인  

처음에 값을 포함하는 인덱스라는 이름의 임시 변수를 선언합니다.nil.

하나의 막대 세트 내에서 여러 변수를 선언할 수 있습니다.

 색인 모음  

는 인덱스와 모음의 2가지 변수를 선언합니다.모든 변수가 초기화됩니다.변수는 Null 문자로 초기화되는 Strings 또는 0으로 초기화되는 ByteArray의 인덱스 변수를 제외하고 0으로 초기화됩니다.

과제

변수에는 '를 통해 값이 할당됩니다.:=' 구문.그래서:

모음. := '애이유' 

문자열을 할당합니다.'aeiou'이전에 선언된 모음 변수.문자열은 컴파일 시 컴파일러에 의해 작성된 객체(작은 따옴표 사이의 일련의 문자는 리터럴 문자열 구문)입니다.

원래의 Parc Place 이미지에서는 밑줄 문자 「_」의 글리프가 왼쪽 화살표 「←」(1963년판 ASCII 코드와 같이)로 표시되었습니다.Smalltalk는 원래 이 왼쪽 화살표를 유일한 할당 연산자로 받아들였습니다.일부 현대 코드에는 여전히 할당으로 기능하는 밑줄로 보이는 것이 포함되어 있으며, 이 원래 용법에 주목하고 있습니다.대부분의 최신 Smalltalk 구현에서는 밑줄 구문 또는 콜론 등호 구문을 사용할 수 있습니다.

메시지

메시지는 Smalltalk에서 가장 기본적인 언어 구조입니다.제어 구조도 메시지가 전송될 때 구현됩니다.Smalltalk는 기본적으로 동적 디스패치 및 단일 디스패치 전략을 채택하고 있습니다(다른 오브젝트 지향 언어에서는 여러 디스패치를 사용하는 것과 달리).

다음 예제에서는 42번으로 '팩토리얼' 메시지를 발송합니다.

42 요인 

이 경우 42는 메시지 수신기로 불리며, '팩토리얼'은 메시지 셀렉터이다.수신자는 값을 반환함으로써 메시지에 응답합니다(이 경우는 42의 계승일 가능성이 있습니다).특히 메시지의 결과는 변수에 할당할 수 있습니다.

a Rather Big Number := 42 요인 

상기의 「메시지」는, 1개의 오브젝트, 즉 수신자만이 관련되기 때문에, 유니리 메시지라고 불리는 것입니다.메시지는 다음과 같이 인수로서 추가 객체를 전송할 수 있습니다.

2 수신처: 4 

이 식에서는 2개의 오브젝트가 관련되어 있습니다.2개는 리시버, 4개는 메시지인수입니다.메시지 결과, 즉 Smalltalk 용어로 답은 16으로 되어 있습니다.이러한 메시지를 키워드 메시지라고 합니다.다음 구문을 사용하면 메시지에 더 많은 인수를 지정할 수 있습니다.

'헬로우 월드' 색인: o달러 시작 시간: 6 

수신 문자열의 문자 'o' 색인에 응답하여 색인 6에서 검색을 시작합니다.이 메시지의 셀렉터는 "indexOf:startingAt:"로, 2개의 피스 또는 키워드로 구성됩니다.

이러한 키워드 및 인수의 인터리빙은 인수가 앞의 키워드로 설명되기 때문에 코드의 가독성을 향상시키는 것을 의미합니다.예를 들어, C++ 또는 Java와 유사한 구문을 사용하여 직사각형을 작성하는 식은 다음과 같이 기술될 수 있습니다.

신규 직사각형(100, 200); 

어떤 주장이 어떤 것인지 불분명하다.반면 Smalltalk에서는 이 코드는 다음과 같이 기술됩니다.

직사각형 폭: 100 높이:. 200 

이 경우 수신기는 클래스인 "직각"이며, 답은 지정된 너비와 높이를 가진 클래스의 새 인스턴스가 됩니다.

마지막으로 대부분의 특수(알파벳이 아닌) 문자를 바이너리 메시지로 사용할 수 있습니다.이를 통해 수학 연산자와 논리 연산자를 기존 형식으로 작성할 수 있습니다.

3 + 4 

이 명령어는 4가 인수로 전달된 상태에서 메시지 "+"를 수신측 3으로 보냅니다(정답은 7이 됩니다.유사하게,

3 > 4 

는 인수 4를 사용하여 3으로 송신되는 메시지 ">"입니다(그 답은 false입니다).

Smalltalk-80 언어 자체는 이러한 연산자의 의미를 의미하지 않습니다.위의 결과는 메시지의 수신자(이 경우 Number 인스턴스)가 메시지 "+" 및 ">"에 어떻게 응답하는지에 의해서만 정의됩니다.

이 메커니즘의 부작용은 연산자 과부하입니다.메시지 ">"는 다른 객체에서도 이해할 수 있으므로 "a > b" 형식의 식을 사용하여 비교할 수 있습니다.

표현.

표현식에는 여러 메시지 전송을 포함할 수 있습니다.이 경우 식은 단순한 우선순위에 따라 구문 분석됩니다.단항 메시지가 가장 높은 우선순위를 가지며, 다음으로 바이너리 메시지, 다음으로 키워드 메시지가 이어집니다.예를 들어 다음과 같습니다.

3 요인 + 4 요인 사이: 10 또, 다음과 같이 합니다. 100 

는 다음과 같이 평가됩니다.

  1. 3은 메시지 "displayed"를 수신하고 6에 응답합니다.
  2. 4는 메시지 "displayed"를 수신하고 24에 응답합니다.
  3. 6은 24를 인수로 하여 메시지 "+"를 수신하고 30에 응답합니다.
  4. 30은 10과 100을 인수로 하여 "between: and:" 메시지를 수신하고 true로 응답합니다.

마지막으로 전송된 메시지에 대한 답변은 식 전체의 결과입니다.

괄호는 필요에 따라 평가 순서를 변경할 수 있습니다.예를들면,

(3 요인 + 4) 요인: 10과 100 사이

식이 먼저 "3 요인 + 4"를 계산하여 10을 산출하도록 의미를 변경합니다.그런 다음 10은 두 번째 "팩토리" 메시지를 수신하여 3628800을 산출하고 3628800은 "between: and:"를 수신하여 false라고 대답합니다.

바이너리 메시지의 의미는 Smalltalk-80 구문에 유선 접속되어 있지 않기 때문에 모두 동일한 우선순위로 간주되며 단순히 왼쪽에서 오른쪽으로 평가됩니다.따라서 이진 메시지를 사용하는 Smalltalk 식의 의미는 "기존" 해석과 다를 수 있습니다.

3 + 4 * 5 

(3 + 4) * 5"로 평가되어 35를 생성합니다.예상 응답 23을 얻으려면 괄호를 사용하여 작업 순서를 명시적으로 정의해야 합니다.

3 + (4 * 5 )

유니리 메시지는 연속해서 쓰는 것으로 체인으로 할 수 있습니다.

3 요인 요인 로그. 

즉, 결과(6)에 "syslog"를 전송하고 결과(6)에 "syslog"를 전송하여 결과(2.85733)를 생성합니다.

일련의 표현식은 다음과 같은 (가상의) 예시와 같이 각각 마침표로 구분하여 쓸 수 있습니다.이 예에서는 먼저 클래스 창의 새 인스턴스를 생성하여 변수에 저장한 후 두 개의 메시지를 보냅니다.

  윈도    윈도 :=  신규.   윈도 라벨: '안녕하세요'.   윈도 열다. 

위의 예시와 같이 일련의 메시지를 같은 수신자에게 송신하는 경우는, 개개의 메시지를 세미콜론으로 구분한 캐스케이드로서 쓸 수도 있습니다.

   신규     라벨: '안녕하세요';     열다. 

위의 예를 단일 표현으로 다시 쓰면 새 창을 임시 변수에 저장할 필요가 없습니다.통상적인 우선 순위 규칙에 따라 단항 메시지 "new"가 먼저 전송된 후 "label:" 및 "open"이 "new"의 응답으로 전송됩니다.

코드 블록

코드 블록(어나니머스 함수)은 리터럴 값으로 표현될 수 있습니다(모든 값이 개체이므로 개체입니다).이는 대괄호로 이루어집니다.

[: 파라미터 <메시지 전송>]

여기서 : params는 코드가 취할 수 있는 파라미터 목록입니다.즉, Smalltalk 코드는 다음과 같습니다.

[ : x x + 1 ]

다음과 같이 해석할 수 있습니다.

또는 람다 용어로 다음과 같이 표시됩니다.

그리고.

[:x x + 1] 값: 3

라고 평가할 수 있다

또는 람다 용어로 다음과 같습니다.

결과 블록 객체는 폐쇄를 형성할 수 있습니다. 즉, 언제든지 둘러싸인 어휘 범위의 변수에 액세스할 수 있습니다.블록은 1등급 객체입니다.

블록은 값 메시지를 전송하여 실행할 수 있습니다('value:value:' 및 'valueWithArguments:'와 같이 블록에 매개 변수를 제공하기 위해 복합 변형이 존재합니다).

블록의 문자 그대로의 표현은 한편으로는 특정 코드를 훨씬 더 읽기 쉽게 해주는 혁신이었다. 반복을 포함하는 알고리즘을 명확하고 간결한 방식으로 코드화할 수 있었다.일부 언어에서 일반적으로 루프와 함께 작성되는 코드는 블록을 사용하여 Smalltalk에서 한 줄로 간결하게 작성될 수 있습니다.그러나 더 중요한 것은 블록은 계산을 지연시키고 다형을 사용하여 대안을 선택할 수 있기 때문에 메시지와 다형을 사용하여 제어 구조를 표현할 수 있다는 것입니다.그래서 Smalltalk의 if-then-else는 다음과 같이 작성되고 구현됩니다.

expr if True : [ expr if false ]if False : [ expr 이 아닌 경우 평가하는 스테이트먼트]

진정한 평가 방법

ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
^trueAlternativeBlock 값

잘못된 평가 방법

ifTrue: trueAlternativeBlock ifFalse: falseAlternativeBlock
^falseAlternativeBlock 값
의 금액 : = allAmounts 선택 : [:anAmount anAmount isPositive]

이는 연산 패턴(여기서 선택)을 고차 함수로 추상화하는 함수 프로그래밍과 관련이 있습니다.예를 들어, 메시지 select: on a Collection은 적절한 [30]펑터의 상위 함수 필터와 동일합니다.

제어 구조

Smalltalk에는 제어구조가 특별한 구문을 가지고 있지 않습니다.대신 오브젝트로 전송되는 메시지로 구현됩니다.예를 들어 조건부 실행은 ifTrue: 메시지를 부울 객체에 전송하고 부울 수신기가 참일 경우에만 실행되는 코드 블록을 인수로 전달함으로써 구현됩니다.부울의 2개의 서브클래스는 모두 ifTrue:를 구현합니다.여기서 True 서브클래스의 실장은 항상 블록을 평가하고 False 서브클래스의 실장은 블록을 평가하지 않습니다.

다음 코드가 이를 나타냅니다.

결과 : = a > b ifTrue : [ 'filse' ] ifFalse : [ 'less or equal' ]

또한 블록은 사용자 정의 제어 구조, 열거자, 방문자, 예외 처리, 플러그 가능 동작 및 기타 많은 패턴을 구현하기 위해 사용됩니다.예를 들어 다음과 같습니다.

  aString 모음 aString := '이것은 문자열입니다.'모음 := aString 선택 : [:aCharacter a Character isVowel] 

마지막 줄에서 문자열은 코드 블록 리터럴인 인수를 사용하여 select: 메시지를 보냅니다.코드 블록 리터럴은 "select:" 메시지의 인수인 코드 블록에 의해 나타나는 테스트를 충족하는 문자열의 요소가 Collection of characters에 포함되는 경우에만 true로 응답해야 하는 술어 함수로 사용됩니다.

String 객체는 "select:" 메시지에 응답하여 멤버를 통해 ("do:" 메시지를 전송함으로써) 인수로 포함된 각 문자를 사용하여 선택 블록("aBlock")을 한 번 평가합니다.("value: each" 메시지가 전송됨으로써) 평가되면 선택 블록("aBlock" 매개 변수에 의해 참조되고 블록 리터럴(":aCharacter a Character isVowel")에 의해 정의됨)이 부울에 응답하고 "if True:"가 전송됩니다.부울이 오브젝트 true일 경우 반환되는 문자열에 문자가 추가됩니다."select:" 메서드는 추상 클래스 컬렉션에 정의되어 있으므로 다음과 같이 사용할 수도 있습니다.

  직사각형 aPoint 충돌 직사각형 : = OrderedCollection with: (직각 왼쪽: 0 오른쪽: 10 상단: 100 하단: 200) 다음 포함: (직각 왼쪽: 10 오른쪽: 10 상단: 110 하단: 210). aPoint : = Point x: 20 y: 20. collisions : = Point : [ : : ARect aRect aRect ACT contains Point : a Point : a Point : ]를 선택합니다. 

예외 처리 메커니즘은 블록을 핸들러로 사용합니다(CLOC 스타일의 예외 처리와 유사).

[일부 조작] :에러 처리:[:ex handler-code ex return]

예외 핸들러의 "ex" 인수는 일시 중단된 작업 상태(스택 프레임, 줄 번호, 수신기 및 인수 등)에 대한 액세스를 제공하며 계산 진행 방법을 제어하기 위해서도 사용됩니다("ex proceed", "ex reject", "ex restart" 또는 "ex return" 중 하나를 전송).

다음은 주식 클래스 [31]정의입니다.

물건 서브클래스: #메시지 퍼블리셔     instanceVariableNames: ''     classVariableNames: ''     pool 딕셔너리: ''     카테고리: 'Small talk의 예' 

이 정의의 대부분은 환경에 의해 채워지는 경우가 많습니다.이것은 에 대한 메시지입니다.Objectclass라는 서브클래스를 만듭니다.MessagePublisher즉, 클래스는 Smalltalk의 퍼스트 클래스 오브젝트이며 다른 오브젝트와 마찬가지로 메시지를 수신할 수 있으며 실행 시 동적으로 작성할 수 있습니다.

방법들

오브젝트가 메시지를 수신하면 메시지 이름과 일치하는 메서드가 호출됩니다.다음 코드는 메서드 게시를 정의하므로 이 개체가 '게시' 메시지를 수신할 때 발생하는 작업을 정의합니다.

출판하다     성적표 표시: '헬로 월드!' 

다음 메서드는 여러 인수를 수신하여 값을 반환하는 방법을 보여 줍니다.

4배수: i1 또, 다음과 같이 합니다. i2     "이 방법은 주어진 숫자에 서로 곱하고 그 결과에 4를 곱합니다."      멀티      멀티 := i1 * i2.     ^멀티 * 4 

메서드의 이름은#quadMultiply:and:반환값은 로 지정됩니다.^교환입니다.

오브젝트는 메시지에 대한 응답으로 실행할 방법을 런타임에 동적으로 결정합니다.다만, 많은 언어에서는, 이것은 컴파일시에 정적으로(때로는, 또는 항상) 결정되는 경우가 있습니다.

클래스 인스턴스화

다음 코드:

메시지 퍼블리셔 신규 

는 MessagePublisher 클래스의 새 인스턴스를 만듭니다(및 반환합니다).이것은 보통 변수에 할당됩니다.

출판인 := 메시지 퍼블리셔 신규 

단, 다음과 같은 일시적인 익명 객체에 메시지를 보낼 수도 있습니다.

메시지 퍼블리셔 신규 출판하다 

Hello World의 예

Hello 월드 프로그램은 언어의 가장 기본적인 구문과 환경을 보여주는 첫 번째 프로그램으로 새로운 프로그래밍 언어의 거의 모든 텍스트에서 사용됩니다.Smalltalk의 경우, 이 프로그램은 작성하기가 매우 간단합니다.다음 코드에서는 메시지 "show:"가 문자열 리터럴 "Hello, world!"를 인수로 하여 개체 "Transcript"로 전송됩니다."show:" 메서드를 호출하면 인수 문자(String 리터럴 "Hello, world!")가 스크립트("terminal") 창에 표시됩니다.

성적표 표시: 안녕, 세상아!. 

이 예의 결과를 보려면 [Transcript]창을 열어야 합니다

이미지 기반 지속성

대부분의 일반적인 프로그래밍 시스템은 정적 프로그램 코드(클래스 정의, 함수 또는 프로시저 형식)를 동적 또는 런타임 프로그램 상태(예: 객체 또는 다른 형식의 프로그램 데이터)로부터 분리합니다.프로그램이 시작될 때 프로그램 코드를 로드하고 구성 파일 또는 기타 데이터 원본에서 명시적으로 이전 프로그램 상태를 다시 생성해야 합니다.프로그램(및 프로그래머)이 명시적으로 저장하지 않는 설정은 다시 시작할 때마다 다시 설정해야 합니다.기존 프로그램도 프로그램이 파일을 저장하고 종료하고 새로고침할 때마다 유용한 문서 정보를 많이 잃어버립니다.그러면 실행 취소 기록이나 커서 위치 등의 세부 정보가 손실됩니다.이미지 베이스의 시스템에서는, 컴퓨터의 전원을 끄거나 OS 의 업데이트를 실시한다고 해서, 이러한 모든 것이 강제적으로 없어지는 것은 아닙니다.

그러나 많은 Smalltalk 시스템은 프로그램 데이터(객체)와 코드(클래스)를 구분하지 않습니다.사실 클래스는 객체입니다.따라서 대부분의 Smalltalk 시스템은 프로그램 상태 전체(클래스 개체와 비클래스 개체 모두 포함)를 이미지 파일에 저장합니다.그런 다음 Smalltalk 가상 머신이 이미지를 로드하여 Smalltalk와 유사한 시스템을 이전 [32]상태로 복원할 수 있습니다.이는 Alan Kay가 만들고 그의 M에 기술한 언어인 FLEX에서 영감을 받았습니다.논문.[33]

Smalltalk 이미지는 (재기동 가능한) 코어 덤프와 유사하며 오류 발생 시 프로그램 상태에 대한 풀액세스가 가능한 지연 디버깅이나 리모트디버깅 등 코어 덤프와 동일한 기능을 제공할 수 있습니다.Lisp와 같이 애플리케이션 코드를 데이터의 형태로 모델링하는 다른 언어에서도 이미지 기반 지속성을 사용하는 경우가 많습니다.이 지속성 방법은 디버깅을 용이하게 하는 모든 개발 정보(예: 프로그램의 구문 분석 트리)가 저장되기 때문에 빠른 개발에 강력합니다.그러나 진정한 지속성 메커니즘으로서 심각한 단점도 있습니다.우선 개발자는 구현 세부사항을 숨기고 런타임 환경에서 사용할 수 없도록 해야 할 경우가 많습니다.적법성과 유지보수의 이유로 실행 시 누구나 프로그램을 변경할 수 있게 되면 런타임 환경에서 소스 코드를 공개하지 않는 컴파일된 시스템에서는 불가능한 복잡성과 잠재적인 오류가 불가피하게 발생합니다.또, 퍼시스텐스 메카니즘은 사용하기 쉽지만, 대부분의 멀티 유저 시스템에 필요한 진정한 퍼시스텐스 기능은 없습니다.가장 확실한 것은 동일한 데이터베이스에 [34]병렬로 액세스하는 여러 사용자와 트랜잭션을 수행할 수 있다는 것입니다.

액세스 레벨

Smalltalk-80의 모든 내용은 실행 중인 프로그램 내에서 수정할 수 있습니다.즉, 예를 들어 실행 중인 시스템에서 IDE를 재시작하지 않고 변경할 수 있습니다.일부 구현에서는 언어 구문 또는 가비지 컬렉션 구현도 즉시 변경할 수 있습니다.심지어 진술도true become: false는 Smalltalk에서 유효하지만 실행은 권장되지 않습니다.

적시 컴파일

Smalltalk 프로그램은 일반적으로 바이트 코드로 컴파일되며, 바이트 코드는 가상 머신에 의해 해석되거나 머신 네이티브 코드로 동적으로 변환됩니다.

구현 목록

Open Smalltalk

Open Smalltalk VM(OS VM)은 Smalltalk Runtime Runner의 주목할 만한 구현으로, 많은 최신 Smalltalk 구현의 기반이 되거나 이를 기반으로 [35]합니다.OS VM 자체는 Smalltalk 소스 코드 파일 세트(Slang이라고 하는 Smalltalk의 서브셋 사용)에서 네이티브 C 언어 소스 코드(VMMaker라고 [36]하는 트랜스필러 사용)로 변환되어 특정 플랫폼 및 하드웨어 아키텍처를 기반으로 컴파일되어 Smalltalk 이미지의 크로스 플랫폼 실행을 실질적으로 가능하게 합니다.소스 코드는 GitHub에서 사용할 수 있으며 MIT 라이선스에 따라 배포됩니다.OS VM을 기반으로 한 기존의 Smalltalk [37]실장은 다음과 같습니다.

다른이들

  • 황색 Smalltalk, 전이를 통해 JavaScript에서 실행
  • Cincom에는 2개의 Smalltalk 제품이 있습니다.Object Studio 및 Visual Works.
  • Smalltalk/V를 포함한 Visual Smalltalk Enterprise 및 패밀리
  • Claus Gitinger가 개발한 Smalltalk/X
  • 2009년에 작성된 F-Script, MacOS 전용 구현
  • GemTalk Systems, GemStone/S
  • GNU Smalltalk, 헤드리스(GUI 부족) Smalltalk 구현
  • StepTalk, GNUstep 스크립트 프레임워크는 Objective-C 런타임에 Smalltalk 언어를 사용합니다.
  • VisualAge Smalltalk
  • Rosetta Smalltalk는 1979년 Scott Warren에 의해 개발되어 Exidy Sorrer 컴퓨터의 카트리지로 발표되었지만 출시되지 않았다[39].
  • Instantiations, Inc.에서 개발한 VAST Platform (VA Smalltalk)
  • 리틀 스몰톡
  • 오브젝트 아트, 돌핀 스몰톡
  • 오브젝트 커넥트, Smalltalk MT Smalltalk for Windows
  • Pocket Smalltalk, 팜 파일럿에서 실행
  • Small J, Java 기반의 오픈 소스 Small talk로 Small World에서 파생되었습니다.
  • 학습용 비주얼 프로그래밍 시스템인 Etoys
  • 비주얼 프로그래밍 시스템 스크래치(2.0 이전 버전만 Smalltalk 기반)
  • Strongtalk는 오픈 소스(2006년 이후) Windows 전용 버전이며, 처음에는 Sun Microsystem [40]Labs에서 작성된 강력한 타이핑 옵션을 제공합니다.
  • TruffleSqueak, GraalVM용 Squak/Smalltalk VM 및 폴리글롯 프로그래밍 환경(GraalVM 기반 Smalltalk 구현에 대한 자세한 내용은 여기를 참조하십시오)

자바스크립트 VM

  • PharoJs는 Smalltalk에서 Javascript로 오픈 소스 트랜스파일러Pharo 환경을 확장합니다.
  • SquakJ는 Open Smalltalk와 호환되는 웹용 VM으로 Etoys나 Scratch와 같은 오래된 Squak 어플리케이션도 실행합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Alto I Schematics" (PDF). Bitsavers. p. 54. Retrieved 21 July 2016.
  2. ^ "History of Computers and Computing, Birth of the modern computer, Personal computer, Xerox Alto". Retrieved 2016-04-19.
  3. ^ a b c d e f g h Kay, Alan; Ram, Stefan (2003-07-23). "E-Mail of 2003-07-23". Dr. Alan Kay on the Meaning of 'Object-Oriented Programming'. Retrieved 2009-01-03.
  4. ^ a b c d Kay, Alan. "The Early History of Smalltalk". Retrieved 2007-09-13.
  5. ^ "ANSI Smalltalk Standard". Smalltalk.org. 2004. Archived from the original on 2006-02-16. Retrieved 2021-03-02.
  6. ^ "Stack Overflow Developer Survey 2017".
  7. ^ "Stack Overflow Developer Survey 2018".
  8. ^ "Versions". Smalltalk.org. Archived from the original on 2015-09-08. Retrieved 2007-09-13.
  9. ^ "ANSI Smalltalk Standard". Smalltalk.org. Archived from the original on 2015-09-07. Retrieved 2007-09-13.
  10. ^ "Hobbes". Archived from the original on 19 April 2003.
  11. ^ "History". Seagull Software. Archived from the original on 2002-08-06. Retrieved 2007-09-13.
  12. ^ "VisualAge Smalltalk Transition FAQ".
  13. ^ Simula 언어도 객체 지향적이고 Smalltalk보다 앞서 있었지만(그리고 Smalltalk에 영향을 준 것으로 인정받았지만) 범용 프로그래밍 언어가 아닌 시뮬레이션 언어였다.
  14. ^ Cannon, Howard. "Flavors A non-hierarchical approach to object-oriented programming" (PDF). softwarepreservation.org. Retrieved 17 December 2013.
  15. ^ "About Ruby". ruby-lang.org. Retrieved 17 December 2013.
  16. ^ "Where Did Refactoring Come From?". sourcemaking.com. Retrieved 17 December 2013.
  17. ^ "DARPA / ARPA". livinginternet.com. Retrieved 16 December 2013. To meet this need, ARPA established the IPTO in 1962 with a mandate to build a survivable computer network to interconnect the DoD's main computers at the Pentagon, Cheyenne Mountain, and SAC HQ.
  18. ^ "Engelbart's Role in Early Computer Networking". dougengelbart.org. Retrieved 17 December 2013.
  19. ^ Krasner, Glen; Pope, Stephen (August–September 1988). "A Cookbook for Using the Model-View-Controller User Interface Paradigm in Smalltalk -80". Journal of Object-Oriented Programming.
  20. ^ "Our Influence". cincomsmalltalk.com. Retrieved 16 December 2013.
  21. ^ Kay, Alan (October 10, 1998). "Prototypes vs Classes (e-mail on Squeak list)".
  22. ^ Goldberg, Adele; Robson, David (1989). Smalltalk-80 The Language. Addison Wesley. pp. 31, 75–89. ISBN 0-201-13688-0.
  23. ^ Clark, A.N. (1997). "Metaclasses and Reflection in Smalltalk". CiteSeerX 10.1.1.33.5755. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  24. ^ Ducasse, Stéphane; Lienhard, Adrian; Renggli, Lukas. "Seaside – A Multiple Control Flow Web Application Framework" (PDF). scg.unibe.ch. Software Composition Group Institut fur Informatik und angewandte Mathematik Universitaat Bern, Switzerland. Retrieved 16 December 2013.
  25. ^ Foote, Brian; Johnson, Ralph (1–6 October 1989). "Reflective Facilities in Smalltalk-80". Oopsla '89: 327–335. doi:10.1145/74877.74911. ISBN 0897913337. S2CID 14207536. Retrieved 16 December 2013.
  26. ^ Smith, Brian C (1982-01-01). "Procedural Reflection in Programming Languages". MIT Technical Report (MIT-LCS-TR-272). Retrieved 16 December 2013.
  27. ^ Denker, Marcus; Peck, Mariano Martinez; Bouraqadi, Noury; Fabresse, Luc; Ducasse, Stéphane. "Efficient Proxies in Smalltalk" (PDF). {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  28. ^ http://sdmeta.gforge.inria.fr/Programmez/OnTheWeb/Art2-Eng-AminimalistSyntax.pdf[베어 URL PDF]
  29. ^ http://scg.unibe.ch/archive/lectures/DucasseLectures/Duca00y1SmalltalkLectures.pdf[베어 URL PDF]
  30. ^ Goldberg, Adele; Robson, David (1989). Smalltalk-80 The Language. Addison Wesley. pp. 17–37. ISBN 0-201-13688-0.
  31. ^ Goldberg, Adele; Robson, David (1989). Smalltalk-80 The Language. Addison Wesley. pp. 39–53. ISBN 0-201-13688-0.
  32. ^ "Image-Based Persistence". book.seaside.st. Retrieved 17 December 2013.
  33. ^ Kay, Allen (1968). "FLEX – A flexible extendable language". University of Utah MSC Thesis.
  34. ^ Fowler, Martin. "Memory Image". martinfowler.com. Retrieved 17 December 2013.
  35. ^ "opensmalltalk-vm", OpenSmalltalk, Git hub, 2020-11-03, retrieved 2020-11-08
  36. ^ "Slang". Squeak. Retrieved 2020-11-08.
  37. ^ a b Mirand, Eliot; Bera, Clément; Gonzalez Boix, Elisa; Dan, Ingalls (October 8, 2018). "Two Decades of Smalltalk VM Development: Live VM development through Simulation Tool" (PDF).{{cite web}}: CS1 maint :url-status (링크)
  38. ^ Table of Contents, Cuis Smalltalk, 2021-11-24, retrieved 2021-11-25
  39. ^ Scott Warren (1979). A LANGUAGE LOST TO THE PUBLIC-- Rosetta Smalltalk Flap,1979.
  40. ^ "Strongtalk: A High-Performance Open Source Smalltalk With An Optional Type System". Retrieved 2021-11-25.

추가 정보

외부 링크