이러한 컴퓨팅 환경에 최적으로 적응하는 코드를 만들기 위해서는 지금까지 생각지 못한 많은 문제들이 해결되야한다. 물론, 현재의 컴퓨팅환경(desk-top computing) 에서도 실행코드의 부품과 데이타를 적시에 동원해서(디스크로부터 불러들여서) 프로그램을 실행하는 것은 가능해왔던 일이다. 그러나 미래의 전 지구적 컴퓨팅 환경에서 문제가 되는 것은, 그러한 일들이 전세계의 모든 컴퓨터를 묶은 초고속 넷트웍을 타고 엄청난 양과 빈도로 발생하게 된다는 것이다. 전세계 모든 코드가 광속으로 지구위를 움직이면서 사용자에게 최적의 성능을 제공하려고 경쟁하는 환경에서 그러한 일들이 일어나는 것이다. 이러한 환경에서 최적으로 수행되는 코드는 다음의 문제를 해결하고 있어야 한다.
전세계적으로, 프로그래밍 시스템을 연구하는 그룹은 대상으로 하는 프로그래밍 인구의 관성(programming sociology)을 따라가기 때문에(Java 주변의 경우와 같이) 프로그래밍 언어의 신 이론을 받아들이는 것이 느리고, 프로그래밍 언어 이론에 몰두하는 그룹은 프로그래밍 시스템 기술에의 응용에 무관심하다. 이 틈새를 본 연구가 공략할 것이다. 본인이 이 두 분야의 대표적인 연구그룹 (Center for Supercomputing Research and Development, University of Illinois at Urbana-Champaign 과 Software Principles Research Department, Bell Laboratories) 에서 연구한 잇점을 모두 동원할 것이며, 그 중심에는 본인이 지금까지 성공적으로 수행해온, 의미구조에 입각한 프로그램 분석 (semantics-based static analysis) 연구가 자리할 것이다.
더군다나, 지금까지의 글로벌 프로그래밍 시스템의 여러가지 문제를 해결하는 데에는 프로그램 분석 분야에서 연구된 많은 결과들이 매우 유용하게 사용될 수 있는 데도 불구하고 이 두 분야가 아직 활발히 소통하고 있지 못하다\cite{ToTh97}. 어쩌면, 글로벌 프로그래밍 시스템의 문제들이 어떤것이 있을지도 아직 정확하게 정의되지 않은 상태라서, 프로그램 분석이론이 어떻게 사용될 수 있을 지가 드러나지 않은 것일 수도 있다.
프로그램이 실행중에 파행적으로 중단되지 않는다는 기본적인 안전성 (type safety), 프로그램이 실행중에 자원을 얼마 이하만 사용해야 한다는 실행비용의 안전성 (resource safety), 실행중에 항상 약속한 원칙(예를들어, 메모리에 표현되는 리스트구조는 항상 특정 메모리 영역에서만 구현된다는 등)을 준수해야 한다는 안전성 (invariant safety) 등을 검증하는 것이 모두 프로그램의 분석을 통해서 가능해진다.
이때, 고안된 분석기가 임의의 프로그램의 실행중에 발생하는 모든 경우를 예측한다는 것이 증명되야 하고, 이 증명은 대상 프로그래밍 언어의 의미구조 식으로 부터만이 엄밀하게 진행될 수 있다.
한편, 프로그램을 받아든 측에서 안전성 검증이 제대로 된 것인지를 확인할 수 있어야 하는데, 이 방법도 프로그램 분석이론을 이용해서 고안될 수 있다. 모든 프로그램 분석의 계산 과정은 반복법(fixpoint iteration)을 사용해서 구현 될 수 있는데, 이 반복 과정을 거쳐서 최종적으로 변하지 않는(repeat until no change) 분석 값을 찾는 것이 분석의 과정이 된다. 이때, 반복적으로 계산되는 분석 값들은 항상 단조증가하게 되는데, 이러한 분석 계산의 단조증가(monotonicity) 성질을 이용할 수 있다. 코드를 제공하는 측에서는 코드의 각 식들에 대해 분석된 내용을 코드에 딸려 보내고, 코드를 받아든 측에서는 이 내용에서 부터 분석의 반복 계산을 수행해 본다. 이때 계산의 첫 반복 후에 그 따라온 내용이 변하지 않는 것이었다면, 그 내용들은 올바른 분석 내용이라는 것을 확신하게 된다.
주어진 프로그램을 같은 일을 하면서 더욱 밀도 있는 프로그램으로 변형해 주기 위해서는, 그 프로그램이 실행중에 무슨일을 벌이는 지를 분석해야 한다. 고안된 분석기는 프로그램이 실행중에 일으킬 수 있는 모든 메모리 반응을 빠짐없이 예측해서 동일한 메모리 반응을 이끌어내는 고 밀도 코드를 생성하게 된다.
프로그램 분석을 통해서 코드에서 같은 값을 계산하는 중복된 식이나 실행중에 사용되지 않을 값을 계산하는 식들을 찾아낼 수 있다. 또, 코드의 물류비용을 줄이는 한 방법으로, 코드의 크기와 그 코드가 만들어내는 값의 크기를 비교해서 작은 것을 실어 보내는 아이디어가 있을 수 있는데, 이때 코드가 만들어내는 값의 크기를 프로그램 분석을 통해서 예측할 수 있다.
코드 스스로 입력패턴을 인식해서 자신을 최적화 시키기 위해서도 프로그램 분석이 유용하게 쓰일 수 있다. 프로그램을 최적화하기 위해서는 프로그램의 실행 내용을 미리 분석하고 있어야 하는데, 분석하는 도중에 부수적으로 파악될 수 있는 것이, 실행중에 어떤 정보를 알게되면 어떠한 성질을 가지게 되고 따라서 어떻게 최적화 될 수 있는지이다. 이러한 최적화 가능성을 함수꼴로 요약해서 코드에 딸려 보내는 것이 가능해 진다. 이렇게 따라간 최적화 함수는 실행중에 발생하는 입력이 도화선이 되어서, 같이 온 코드를 최적화 시킬 것이고 이렇게 최적화된 코드는 다음에 오는 비슷한 입력에 대해서 최적의 실행을 할 것이다.
지금은 우리가 1950년대에 놓쳐버렸던 정보 기술의 주도권 대열에 들어설 수 있는 두번째 기회가 되고 있다. 지금은 곧잘 1950년대 - 디지탈 컴퓨터가 막 만들어지면서 그 기계를 사용할 프로그램의 개념이 막 무르익던 시기 - 에 비견된다. 당시에 컴퓨터 메모리에 저장된 프로그램을 실행하는 컴퓨팅 환경이 만들어 지면서, 프로그램이란 것을 효과적으로 기술하는 언어를 디자인하고 구현하는 문제가 대두되었다. 이 문제에 대한 오늘날과 같은 해답을 가능하게 했던 핵심 연구들(형식언어 (formal language or automata) 이론에 기초한 프로그램 문법의 검증기술(parsing theory), 타입 이론(type theory)에 기초한 프로그램의 실행 값 검증기술(strong typing, type inference), 컴파일러등의 시스템 구현 기술, 람다 계산법(Lambda Calculus)에 기초한 프로그래밍 언어 이론등)을 이룩한 그룹들이 오늘날 정보 기술의 주도권을 잡고 있게 되었다.
오늘날 새롭게 출현하고 있는 컴퓨팅 환경은 1950년대와 똑 같은 문제를 부각시킨다: 새로운 환경에서 효과적으로 수행될 프로그램을 만드는 기술이 필요한 것이다. 본 연구에서는, 이러한 기술의 핵심이라고 여겨지는 세가지 문제 - 코드의 안전성 검증, 코드의 최소화, 코드의 자기 최적화 - 를 엄밀한 프로그램 분석 이론과 구체적인 시스템 구현을 통해서 해결하려고 하는 것이다. 새롭게 태동하는 컴퓨팅 환경에 최적인 프로그래밍 이론과 실제를 본 연구가 천착해 간다면, 다음 시대의 정보 기술의 주도권 대열에 당당하게 설 수 있을 것이다.
전 세계를 하나의 시장으로 묶는 글로벌라이제이션의 물결은, 정보기술분야에서는 전 지구적 넷트웍 컴퓨터의 모습으로 다가 오고있고, 이 구조는 마치 계곡에 흘러드는 물처럼 모든 것을 균일화하는 습성을 가지고 있다. 커뮤니케이션의 발달은 세계적으로 동일한 문제를 해결하려는 프로그램을 대량으로 요구할 것이고, 최고의 품질을 갖춘 소수정예의 코드나 데이타만이 그러한 다수의 프로그램들속으로 적시에 끼어들어갈 것이기 때문이다.
따라서, 이 넷트웍위에 가장 빈번히 사용되는 프로그램이나 데이타를 올려놓을 수 있으면 우리는 번영하게 되지만, 자칫하면 우리앞에 모든 문제를 해결한 모습으로 외부로부터 강요되기 쉽다.
이와같은 미래에는 전 지구위의 컴퓨터를 광속으로 이동하면서 주어진 일을 수행해가는 수없이 많고 다양한 코드 부품들이 산업의 쌀 구실을 할 것이고, 본 연구의 성공적인 결실은 최고 품질의 쌀을 생산하는 데 필수적인 프로그래밍 도구 기술을 세계적으로 선도해 갈 것이다.
대표적인 연구 그룹은 아래와 같다.
Java나 Agent관련 연구그룹들은 글로벌 컴퓨팅 모델의 엄밀한 분석에 기초하고 있지 않을 뿐더러, 미래의 넷트웍은 지금의 인터넷과는 많은 차이(각 스위칭 노드가 프로그램 가능한 일반 프로세서의 수준으로 향상되는 등)가 있을 것이기 때문에, 이러한 연구들이 차세대 넷트웍 프로그래밍 환경에 쉽게 적용되는 기반기술을 만들어 낼지는 의문이다.
국내의 프로그래밍 시스템 연구들은 Java 관련 연구들이 활발하게 진행되고 있는데, 이 연구들도 프로그래밍 언어 이론이나 엄밀한 컴퓨팅 모델에 기초하고 있지 않기 때문에, 미래의 효과적인 글로벌 컴퓨팅을 가능하게 하는 핵심 기반기술로 부각되기는 힘들것으로 보인다.
그리고, 본 연구가 진행중에 항상 그 발전과정을 염두에 두어야 하는 분야로, 프로그래밍 언어 모델에 대한 연구가 있다. 미래의 글로벌 컴퓨팅 환경의 계산 모델을 제안하고 그 모델에 기초한 다양한 프로그래밍 언어 모델들을 고안하는 연구로써, Milner의 Pi-calculus\cite{MiPaWa89a,MiPaWa89b}, Fournet의 Join-calculus\cite{FoGo96,FGLMR96,FLMR96}, Cardelli의 Ambient-calculus\cite{CaGo98}, Abadi의 Spi-calculus\cite{AbGo97,AbGo97b}등이 있다. 미래에는, 이러한 기초적인 모델들에 기반한 새로운 글로벌 프로그래밍 언어가 만들어지거나(Obliq\cite{Ca94,BrNa96}, PLAN\cite{HKMGN98} 등), 기존의 언어에 적절한 확장이\cite{Fac93} 이루어 질 것으로 예상된다. 우리는 이러한 글로벌 프로그래밍 모델의 핵심 구조들에 대한 이론 연구를 항상 고려하게 될 것이다. 첫째 이유는, 본 연구가 이러한 모델에 기초한 미래의 언어들의 컴파일러 시스템에 쉽게 적용되는 핵심기술을 만들어내야 하기 때문이고, 둘째 이유는, 그러한 엄밀한 모델에 기초한 연구는 우리가 대상으로 하는 프로그래밍 언어의 엄밀한 의미구조를 제공하는 기초가 되어 우리 연구를 엄격히 검증하고 그 한계를 규명하는 데에 필수이기 때문이다.