opensmalltalk-vm 컴파일 성공은 했습니다만…

일단 컴파일은 성공했는데…. 이걸 돌려볼 엄두가 안나네요. 일단 컴파일에 성공하고 나니 뭔가가 귀찮아져 버렸…. 아무래도 배포본처럼 디렉토리 구성을 한번 맞춰야 하지 않을까 싶은데… 일단 공식으로 배포되는 Pharo 5 이미지는 한글 폰트 지정만 해주면 역시 출력에는 별 이상이 없는듯 합니다. 다만 compositeinput 을 적용하면 입력이 제대로 되지 않는 것으로 보아 제가 몇년전에 디밀었던 patch 는 국물도 없었던듯 합니다. 뭐… 한글 쓸일 별로 없으니.. 걍 냅둘까요 이거..-.-;
 
coreonion build # file squeak
squeak: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, not stripped

opensmalltalk-vm 개요(overview) 초벌번역

OVERVIEW
개요

Cog is an evolution of the Squeak Back-to-the-future Smalltalk virtual machine that provides a number of different Smalltalk virtual machines.

Gog 는 여러가지 형태로 공급되고 있던 서로 다른 Smalltalk 가상머신의 미래를 위한 혁명입니다.

 

The VMs are developed in Smalltalk, using all the dynamic and reflective facilities of the Squeak/Pharo Smalltalk system.

VM 들은 Smalltalk 으로 개발되었으며 Squeak/Pharo Smalltalk 시스템에 동적(dynamic) 그리고 반영(reflective-런타임 시점에서 스스로를 관리 및 수정) 을 사용할 수 있는 편의를 제공합니다.
As such, developing in Cog is a delight. The Smalltalk framework comprising the various Cog VMs is translated into C by its Slang component to produce VM source that is combined with platform-specific support sources and compiled via a C compiler to obtain a fast production VM.

따라서 Cog 에서 개발한다는건 즐거운 일입니다. 다양한 CogVM 에서 구성된 smalltalk 프레임워크는 Slang 컴포넌트에 의해 C 로 변환되며 플랫폼 고유의 지원소스(support source) 와 결합된 VM 소스를 생성하며 이는 C 컴파일러를 통해 production VM 을 빠르게 컴파일 합니다.
This directory tree includes the output of Slang for various configurations of “Cog VM” and the associated platform support code, plus build directories that can be used to produce production VMs.

이 디렉토리에는 트리에는 다양한 “Cog VM” 구성 및 관련된 플랫폼 지원코드용 Slang 출력 및 production VM 을 생성하는데 사용할 수 있는 빌드 디렉토리를 포함하고 있습니다.

 

This directory tree also includes an instance of the Smalltalk Cog development system, suitable for developing the VM in Smalltalk, and for generating new VM sources.

이 디렉토리 트리는 Smalltalk Cog 개발 시스템의 인스턴스를 포함하고 있으며 Smalltalk 에서 VM 을 개발하고 새로운 VM 소스를 생성해내는데 적합합니다.

 

The “Cog VM” comes in a bewildering variety of forms. The first distinction is between Squeak/Croquet VMs that run Squeak, Pharo, Cuis, Croquet images and their ilk, and between Newspeak VMs that run Newspeak.

“Cog VM” 은 고르기 힘들 정도의 다양한 형태로 제공됩니다. 첫번째 차이점은 Squeak, Pharo, Cuis, Croquet 이미지 및 같은 종류를 실행하는 Squeak / Croquet VM 과 Newspeak 을 실행하는 Newspeak VM 에 있습니다.(역자주: http://newspeaklanguage.org/ 은 Self 및 Smalltalk 을 바탕으로하는 새로운 언어라고 하는군요)

 

Another distinction is between Stack, Cog and Sista VMs.

VM 사이의 또 다른 차이점으로는 Stack Cog 및 Sista VM 들 입니다.(Sista VM 의 경우는 http://www.mirandabanda.org/cogblog/about-cog/ 에서 언급되고 있습니다만…. 일단 속도가 빠른걸 장점으로 꼽고 있네요)

 

Stack VMs are those with context-to-stack mapping that optimise message sending by keeping method activations on a stack instead of in contexts.

Stack VM 은 context 가 아닌 Stack 에서 메서드 활성화(activation)을 유지함으로서 (smalltalk 에서의) 메시지 전송을 최적화 하는 context-to-stack 매핑을 합니다.

 

These are pure interpreters but are significantly faster than the standard context-based Interpreter VM.

이러한 VM 들은 순수한 인터프리터 기반이지만 표준 context 기반의 인터프리터 VM 보다 훨씬 빠릅니다.
Cog VMs add a JIT to the mix, compiling methods used more than once to machine code on the fly.

Cog VM은 JIT 를 같이 제공합니다, 이는 두번이상 사용되는 경우 컴파일된 메서드를 제공함으로서 코드를 컴파일 작업을 거지치 않고 즉시 처리되게 할 수 있습니다.

 

Sista VMs, as yet unrealised and in development, add support for adaptive optimization that does speculative inlining at the bytecode-to-bytecode level.

아직 개발단계인 Sista VM 은 bytecode-to-bytecode 수준(level)의 추론적 직렬을 수행하는 “적응형 최적화 지원”을 추가합니다.

 

These are under development and targeted for release in 2015.

이런것들은 아직 개발중이며 2015년에 출시될 예정입니다(지금은 2017년이죠 :D)
Another distinction is between “v3” VMs and Spur VMs.

또 다른 차이점은 “v3” VM 과 Spur VM 입니다.(…이제는 vm 의 포맷도 최적화를 위해 바뀌는 모양입니다)

 

“v3” is the original object representation for Squeak as described in the back-to-the-future paper.

“v3” 는 back-to-the-future 문서에 설명된대로 Squeak 의 원본 객체 표현입니다.

 

Spur, as described on the www.mirandabanda.org blog, is a faster object representation which uses generation scavenging, lazy forwarding for fast become, a single object header format common to 32 and 64 bit versions, and a segmented heap that can grow and shrink, releasing memory back to the host OS.

www.mirandabanda.org 블로그에 설명 된 바와 같이 Spur 는 객체의 빠른 생성 및 소거, 빠른 동작을 위한 지연 전송, 32 비트 및 64 비트 버전에 공통적 인 단일 객체 헤더 형식, 그리고 확장 또는 축소 가능한 분할(segmented) 힙, 메모리를 HOST OS 로 다시 해제(releasing) 반환할 수 있도록 만들어져 있습니다.

 

Newspeak, Squeak 5.0 and Pharo 5 use Spur.

Newspeak, Squeak 5.0 과 Pharo 5 는 Supr 를 사용합니다.

 

Another distinction is between normal single-threaded VMs that schedule “green” Smalltalk light-weight processes above a single-threaded VM, and multi-threaded VMs that share the VM between any number of native threads such that only one native thread owns the VM at any one time, switching between threads on FFI calls and callbacks or on Smalltalk process switches when Smalltalk processes are owned by threads.

또 다른 차이점으로는 단일 스레드 VM 에서 “green” Smalltalk 경량(light-weight) 프로세스를 스케줄링 하는 일반 단일스레드 VM 이며, 또한 한번에 하나의 기본 스레드만 VM을 소유하도록 하며 VM을 공유하는 모든 기본 스레드 간에 VM을 공유하는 VM, Smalltalk 프로세스가 스레드에 의해 소유 될 때 FFI 호출과 콜백 또는 Smalltalk 프로세스 스위치의 스레드 간 전환 등이 있습니다.
This architecture offers non-blocking FFI calls and interoperability with multiple native threads, but does /not/ provide true concurrency.

이 구조는 넌블럭킹 FFI 호출과 여러 원시 스레드와의 상호 운용성을 제공하지만 진정한 동시성을 제공하는 것은 아닙니다.

 

This multi-threaded support is as yet experimental.

진정한 동시성을 제공하는 멀티 스레드는 아직 실험적입니다.
nscogsrc/vm- Newspeak Cog V3
nsspursrc/vm- Newspeak Cog Spur
nsspurstacksrc/vm- Newspeak Stack Spur
nsstacksrc/vm- Newspeak Stack V3
sistasrc/vm- Smalltalk Sista V3
spursistasrc/vm- Smalltalk Sista Spur
spursrc/vm- Smalltalk Cog Spur
spur64src/vm- Smalltalk Cog Spur 64-bit
spurstacksrc/vm- Smalltalk Stack Spur
spurstack64src/vm- Smalltalk Stack Spur 64-bit
src/vm- Smalltalk Cog V3
stacksrc/vm- Smalltalk Stack V3

opensmalltalkvm

예전에는 분명 다른 방법으로 소스가 제공되었던 기억이 납니다만…. 이제 Pharo 와 CogVM 진영도 트렌드에 발 맞추어 github 을 이용하기 시작했습니다.

https://github.com/OpenSmalltalk/opensmalltalk-vm

우리가 익히 알고 있는 방식으로 git clone 을 사용해서 소스를 내려 받으면 됩니다만.. 사실 얼마전부터 노리고 있던 이유는 따로 있습니다. 소스트리 내에 제가 주목할만한 부분이 새로 생겼기 때문이죠.

build.linux64x64

 

….마………..만쉐????

어차피 pharo 를 사용하려면 VM 만 있으면 안되죠. 그래서 http://pharo.org 사이트에서 이미지를 받으러 갔더니.. 어머??

 

완.전.좋.은.데.이.거?

 

일단 Pharo 5.0 에서는 해당되는 이미지를 받아놓고 소스도 받아서 vm을 빌드하려 하는데..

build.linux64x64 디렉토리 안쪽에 makeall 이라는 스크립트가 보이네요?……… 어머? 뭔가 날로 먹을 수 있을거같은 느낌적인 느낌?

 

일단 컴파일은 잘 되는 중입니다. 사실 64bit vm 이 중요한 이유는 여러가지 이유가 있을 수 있겠습니다만.. 직관적으로만 본다면야.. lib32 시리즈를 필요로 하지 않는 부분이 가장 크지 않나 싶습니다. 그리고 sdl 부터 시작해서 각종 primitive 객체들이 보다 원활하게 동작한다는 의미겠죠. 일단 pharo 사이트의 내용으로만 본다면야.. 조금 experimental 한 부분이 있을수도 있겠습니다만… 폴더 자체에서 3개 플랫폼의 x64 를 지원하는걸 보면 나름대로 안정적이지 않겠나 생각합니다.

 

아마도 build.linux32ARMv7 정도만 있는걸 보면 아직 라즈베리상의 64bit linux 까지는 개발을 못하고 있는듯 합니다만…. linux64x64 개발이 어느정도 마무리되면 의외로 쉽게 빌드할 수 있지 않을까.. 라는 생각도 드는군요.

 

사실 사용하는것만이 아니라 제대로 공부를 해보고 싶기는 한데.. 그래야 ImmX11Plugin 도 다시 손보고 할텐데.. 아직은 시간이 요원하니.. 일단 64bit VM 을 즐겨보는걸로 만족해야 겠습니다 😀