프로그램 세계 원고 - "씨앗은 C가 아닙니다"

차례

머리말

아래의 글은 내가 "프로그램세계'에 실었던 기사이다. 정확히 몇년인지 기억이 가물거리는데, 대강 95년 쯤의 일이 아닌가 싶다. 이를 계기로하여, "프로그램세계'에 "씨앗"에 대해서 6개월에 걸친 연재를 실은 적이 있다. 원고는 다섯 개의 부분으로 나누어져 있다.

 
우리나라에 컴퓨터가 보급된 후 지금까지 한글을 표현하려는 노력이 있어왔고, 우리글, 우리말로 된 소프트웨어 개발이 꾸준히 진행되어 왔다. 초창기에 한글 카드나 에뮬레이터를 이용하던 프로그렘들로 부터 시작하여, 지금은 내장 한글 방식의 여러 유용한 프로그렘이 많이 나오고 있다. 그만큼 컴퓨터의 환경이 많이 한글화 되었다는 이야기이다. 하지만 우리들은 한글을 나타내기 위해 영문으로 된 프로그렘 언어를 배워야 했고, 또 그것이 당연하다고 생각해왔다. 그래서 프로그렘에 입문하는 사람들은 당연히 영어에 능숙해야 한다는 풍토가 생겨났 다. 만일 빌 게이츠가 우리나라에 태어났다면 그는 아마 프로그렘을 배우기 전에 영어에 매달려야만 했을지도 모른다.
<씨앗>은 이러한 잘못된 생각을 불식시키기 위해서 1990년에 나눔 기술에서 개발되었다. 그리고 올 4월에 1.0판이 첫 선을 보였다. 씨앗은 아직 뿌려진지 오래 되지 않은 언어이다. 우리가 잘 기르고 돌보아 주지 않으면 그 뿌리를 내리지 못할 것이다. 나는 이제 씨앗을 심어 기른지 6개월이 된 농사꾼(?)이다. 내가 씨앗을 써 보고 느낀 점을 담담하게 써 보려 한다. 아래에 쓰는 글은 어느정도 프로그렘을 해본 사람을 대상으로 하고 있다. 최소한 베이직을 알면 좋고, C나 파스칼을 아는 사람이라면 더욱 더 좋겠다. 물론 프로그렘을 모르는 분들도 아래의 글을 읽어보고 씨앗이 어떤 언어인지를 알 수 있다고 생각된다.

씨앗의 특징

1. 한글 프로그렘 언어...

씨앗은 '한글 프로그렘 언어'이다. 베이직, 파스칼, C와 같은 언어들은 모두 영어권 문화에서 개발된 언어로써, 언어의 구성요소가 모두 영어로 되어 있고, 문법도 영어의 어순을 따르고 있다. 하지만 씨앗은 한글 언어이다. 우리나라에서, 우리나라 사람의 손으로 만들어졌고, 또 우리내 생각을 표현할 수 있도록 모든 것이 한글로 되어 있고, 문법 또한 한글 어순에 맞춰 설계되어 있다.
가령 프로그렘할 때 자료의 합계를 나타내는 변수가 필요하다고 생각해 보자. 이 때 우리는 "합계"라고 생각하면서 실제로 변수명을 지을 때에는 'total', 'Sum', 'HabGye',.. 와 같이 영어로 표현해야 했다. 하지만 씨앗은 한글 언어이다. 모든 것이 한글로 되어 있기 때문에, 변수명과 같은 명칭도 한글로 지을 수 있다. 씨앗에서라면 그냥 '합계'라고 하는 것만으로 족하다. 모든 것을 한글로 표현할 수 있다는 것은 바로 "생각한 것을 그대로 표현할 수 있다"는 말이다.
아무리 좋은 언어가 나온다 해도, 우리의 모국어가 영어가 아닌 이상, 생각한 대로 표현할 수는 없다. 이렇게 씨앗은 언어의 모든 요소가 한글로 되어 있어서 우리의 생각을 그대로 프로그렘에 반영할 수 있다. 씨앗이 가지는 장점중의 장점은 바로 이것이다.

2. 진정한 한글 언어 -- 읽고 쓰기가 쉽다...

이 말을 하면 어떤이는 "한글로 되어 있으니 당연히 다른 언어보다는 읽고 쓰기가 쉽지 않겠느냐"고 할 것이다. 하지만 씨앗은 영문 언어의 지정어(Key Word)만을 직역한 언어가 아니다. 예를 들어보자.
(1) here: if (a == 3) goto here; (2) 여기: 만약 (가 == 3) 가기 여기; (3) <<여기>> 가 = 3 { 참이면 여기 갈피로 간다. }
가령 (1)의 문장을 그대로 직역한 것이 (2)인데, (2)는 (3)보다 읽기가 불편하다. (2)도 (3)도 모두 한글로 되어 있는데, 왜 (3)쪽이 읽기가 더 쉬울까? 그것은 (2)는 영문 어순의 단어들을 단지 한글로 바꿔치기 한것 뿐인데 반하여 (3)과 같은 경우에는 한글의 어순에 따라 문장을 만들었기 때문이다. 바로 이것이 씨앗의 특징이다. 단순히 단어들을 한글로 바꿔치기 한 것이 아니라 완전히 세로운 토대 위에 한글의 어순을 생각해서 만든 언어가 바로 씨앗이다. 그러므로 읽기와 쓰기가 쉽다.
예를 하나 더 들어보면, C의 함수중에 strstr()이란 것이 있다. 그런데 C를 왠만큼 한 사람들도 이 함수를 보게 되면, 도대체 무슨 일을 하는 함수인지 짐작하기가 힘들다. 심지어 외국 사람들도 알아보기가 힘들것이다. 그런데 씨앗에서는 C의 strstr()함수와 대응되는 '글줄찾기()'라는 절차가 있다. 그냥 그 명칭만을 봐도 어떤 일을 하는 절차인지를 쉽게 알 수 있다. 따라서 씨앗으로 된 바탕글은 풀이글(comment) 없이도 분석이 가능하다. 씨앗의 언어 자체가 풀이글의 역할을 해 주고 있기 때문이다. 이것 역시 무시할 수 없는 장점이 아닐까?
그런데 여기서 "하지만 씨앗의 명칭은 다른 언어들보다 산만하다."라고 말하는 이가 있을지 모른다. 사실 씨앗의 바탕글과 다른 언어의 바탕글을 비교해 볼 때, 씨앗의 그것은 시각적으로 상당히 번잡하다(?)고 생각할 수 있다. 하지만 그것은 바탕글의 전체 윤곽을 볼 때의 이야기이다. 위에서도 예를 들었듯이, 씨앗의 어휘들은 모두 한글로 되어 있으므로, 눈에 금방 들어온다. 더구나 씨앗의 바탕글 편집기는 각각의 어휘들을 따로 따로 문법 돋이(Syntax Hilting)해 주기 때문에 바탕글을 읽기가 오히려 더 쉽다고 본다. 그리고 바탕글은 한 번 작성되고 여러번 읽혀지기 때문에 명칭이 길어져서 키보드를 치는데 시간이 걸리더라도, 실제로 나중에 바탕글을 이해하는데에 걸리는 시간은 다른 언어보다 훨씬 빠르다고 필자는 생각한다. 독자들도 씨앗의 바탕글을 접하게 되면 거의 다 필자와 같은 생각을 하게 될 것이다.

3. 큰 프로그렘의 작성이 쉽다...

씨앗은 "한글로도 프로그렘이 가능하다"는 것을 보여주기 위해서 개발된 언어도 아니요, 프로그렘 초보자들에게 교육을 목적으로 작성된 언어는 더욱 아니다. 씨앗은 실용 프로그렘을 만들 목적으로 개발된 범용 프로그렘 언어이다. 실제로 씨앗은 C나 파스칼이 가지고 있는 특징들을 많이 반영하고 있을 뿐 아니라, 이러한 언어들보다 훨씬 뛰어나다. 씨앗이 다른 언어보다 뛰어난 점이 바로 '단원화 프로그레밍'이다.
프로그렘이 커지게 되면 하나의 바탕글(source code)로 작성할 때는 유지보수가 힘들어진다. 그래서 보통은 관련 있는 동작을 하는 명령들을 하나의 바탕글로 묶어서 관리하는데, 이렇게 나누어진 것을 흔히 "모듈"이라 부르고, 씨앗에서는 "단원"이라 부른다. 다른 언어에서 이런 모듕을 관리하려면 각각의 모듈을 이어주는 다리가 필요하게 된다. C언어를 예로 들자면 적어도 하나 이상의 접속 화일(Header File)이 필요하고, 또 각각의 모듈을 이어주는 MAKE화일을 작성해야 한다. 그런데 이 MAKE화일을 만든다는 것이 또다른 하나의 언어를 배우는 것과 같아서, 매우 귀찮고, 실수할 여지가 많이 있다. 그래서 요즘 나오는 Borland사의 통합 환경은 "Project Maneger"를 제공하는데, 이 또한 기획화일(*.PRJ)라는 화일이 따라다녀야 하고, 또 사용자가 일일이 사용되는 모듈을 지정해 주어야 한다. 더구나 모듈이 많아질 때에는 각각의 모듈에 딸린 접속 화일을 관리하는 문제가 엄청 번거로와 진다. 따라서 여러 개의 모듈로 된 프로그렘을 작성하기가 매우 귀찮다.
하지만 씨앗은 언어 자체가 "단원"을 단위로 해서 구조화 되어 있다. 먼저 씨앗에서는 C와 같이 접속 화일을 사용자가 만들 필요가 없다. 그것은 씨앗 단원의 구조가 접속부(Interface Part)와 구현부(Implementation Part)로 나누어져 있어서, 번역기(compiler)가 접속부의 내용을 번역하여 자동으로 접속 화일을 만들어 주기 때문이다.
 
씨앗에서 자신의 단원은 이미 만들어진 다른 단원을 사용할 수 있다. 물론 C와 같은 언어도 이미 만들어진 라이브러리를 사용할 수는 있지만, 번역할 때 일일이 라이브러리를 사용자가 MAKE화일이나 기획 화일에 지정해 주어야 하는 불편이 따른다. 하지만 씨앗에서는 MAKE화일이나 기획 화일을 만들 필요 없이 단지
사용 단원의_이름.
이라고 하게 되면, 별다른 지시 없이 번역기가 알아서 필요한 단원을 연결(Link)해 주기 때문에 메우 편리하다. 그래서 씨앗으로는 여러개의 단원으로 된 바탕글도 쉽게 작성할 수 있다. 내가 C로 프로그렘을 짤 때에는 여러개의 모듈로 나누어 관리하는 것이 매우 귀찮아서, 2000줄이 넘는 프로그렘도 하나의 바탕글에 넣어서 관리했지만, 씨앗을 쓰는 지금은 그런 걱정은 모두 번역기에게 맡기고 다만 단원을 잘 분류하고 프로그렘 짜는뎅에만 집중할 수 있으니 너무나 편한것 같다. C언어는 절대로 따라올 수 없는 씨앗의 특징이라 할 수 있겠다.

4. 제사용이 쉽다.

이미 만들어진 것을 다시 사용한다는 것은 자원을 효율적으로 이용한다는 측면에서 매우 필요한 것이다. 하나의 프로그렘을 만들다 보면 그 프로그렘과는 독립적으로 돌아가는 모듈이 분명히 있기 마련이다. 가령 어떤 수의 부호를 판단한다던가, 인자로 주어진 배열을 정렬(sort)한다던가.. 이런 것들은 어떤 목적에 귀속되지 않고 범용으로 쓰이는 것들이다.
단원화 프로그렘밍이 기초가 되는 씨앗에서는 이러한 범용의 목적으로 만들어진 단원을 다른 수정을 가하지 않고 그대로 불러쓸 수 있다. 가령 주소록을 만들 때 글줄(string)을 대문자로 바꾸는 절차(Procedure)를 가진 단원을 만들었다고 하자. 그럼 이 단원은 주소록 프로그렘에만 쓰이는 것이 아니라, 다른 필요한 단원에서도 충분히 쓰일 수 있다. 이 때 씨앗은 단지 "사용"문을 이용해서 그 단원을 사용한다고만 알려주면 그 단원을 전혀 건드리지 않고 사용할 수 있는데, 이것은 씨앗의 명칭은 단원별로 분리 되어 있어서 똑같은 명칭이라도 여러 단원에 걸쳐 존제할 수 있기 때문이다. 따라서 C언어와는 달리 명칭에 신경 쓸 필요도 없고, 서로 다른 모듈에 명칭이 중복 되어서 바탕글을 고쳐야 할 필요도 전혀 없다.
그런데 다른 언어들을 보게 되면, 한결같이 단원과 보통의 프로그렘을 구분하고 있다. 가령 터보 파스칼의 Unit 개념은 씨앗의 단원 개념과 아주 비슷하다. 하지만 보통의 프로그렘과 unit는 서로 다른 구조를 가지고 있다. 따라서 보통의 프로그렘을 다른 목적에 제 사용할 수가 없겠지만, 씨앗은 보통의 프로그렘도 하나의 단원이므로, 심한 경우에는 어떤 일을 하는 주된 프로그렘(으뜸단원)을 다른 단원이 사용할 수도 있는 것이다. 씨앗은 이렇게 이미 만들어진 단원을 제사용하기가 쉽기 때문에 프로그렘을 만들 때의 노력과 시간으 절약할 수 있다. 씨앗이 퍼지면 퍼질수록, 더욱 더 많은 단원이 쌓이게 되고, 그에 따라 사용자는 탄탄한 기반 위에서 프로그렘을 할수 있게 될 것이다.

5. 배우기가 쉽다...

씨앗은 한글로 되어 있으므로 우선 이해하기가 쉽다. 더블어 씨앗은 굳이 어려운 개념을 쓰지 않더라도 프로그렘을 짤 수 있는 여러 방법이 마련되어있다.
C를 배우는 사람 중에 70%가량이 포인터에서 막혀버리고 만다. 이것은 C언어의 포인터가 다분히 시스템 프로그렘에 적합하도록 되어 있기 때문이다. 씨앗에서는 포인터가 할 일을 다른 것들이 해 주는 경우가 상당히 많다. 물론 씨앗도 포인터에 해당하는 '접근형'이 마련되어 있다. 그리고 차림표(menu)를 만든다거나, 창(window)를 만드는 등의 작업이 아주 쉽게 이루어 지고 있다. 따라서 씨앗을 배우는 사람들은 쉬운 것을 먼저 배우고, 차근 차근 수준 있는 프로그레밍을 배울 수 있다. 씨앗이 배우기 쉬우면서 강력하다는 이유가 바로 여기에 있다.

6. 객체 지향적 요소를 가지고 있다.

씨앗은 원래 객체 지향 언어(OOP)를 목적으로 만들어 졌다고 한다. 그래서 그런지, 다른 명령형 언어에서는 찾아볼 수 없는 객체 지향적 요소가 상당히 많이 포함되어 있다. C++을 예로 들자면, C++은 Class를 기본으로 하여, 이 class에 서 생성자(constructor)와 소멸자(destructor)를 가질 수 있고, 자체적으로 독립된 성원 함수(Member function)와 성원 자료칸(Member Field)를 가지고 있다. 그리고 각각의 자료칸(Field)는 private, public, protect 등의 접근 권한을 가질 수 있고, 또 자체적으로 연산자의 중첩(Overloading)이 가능하다. 씨앗에서는 "단원"을 기초로 해서 C++의 생성자와 소멸자에 해당하는 시작점()과 마무리()라는 독특한 절차를 가지고 있고, 또 하나의 단원 안에서 선언된 변수에 '보호된'(portected)이란 특성을 가지게 할 수 있을 뿐 아니라, 구조물(struct)의 각각의 자료칸(field)에 '가무림'(private)과 '터놓음'(public) 이라는 접근 권한을 줄 수 있다. 요컨데 C++은 class를 대상으로 함수와 자료를 추상화 하지만, 씨앗은 "단원"을 단위로 이러한 것들을 추상화 하고, 켑슐화 한다. 따라서 씨앗은 C언어 보다 한 수 위에 있는 언어라는 것을 금방 알 수 있다.

7. 한글 입출력이 자유롭다...

씨앗은 기본으로 한글 입출력 환경 "태극"에서 돌아간다. C와 같은 다른 언어에서 한글 입출력을 구현하려면 우선 한글 라이브러리를 사용하는 법을 알아야 한다. 그리고 다른 언어들은 기본적으로 한글을 지원하지 않기 때문에 한글 자료를 프로그레머 자신이 직접 관리해야 하는 불편이 있다. 하지만 씨앗을 쓰면 한글 입출력에 관한 자질구래한 신경을 쓸 필요가 없고, 모든 것을 "태극"이 처리해 주기 때문에, 사용자는 프로그렘 자체에만 매달릴 수 있다. 단적인 예로, 다른 언어의 char형은 모두 1바이트이다. 1바이트로 한글을 나타낼 수 없다는 사실은 프로그렘을 조금만 접해본 사람들도 알 것이다. 하지만 씨앗의 '글자'형은 2바이트이다. 즉 한글을 자연스럽게 처리할 수 있는 언어는 씨앗 뿐이다. 이것만 보아도 씨앗이 얼마나 한글을 자연스럽게 다루고 있는지 알 수 있다.
지금가지 씨앗의 특징을 대강 설명했는데, 이러한 특징들이 바로 <씨앗>을 빛내주는 역할을 한다고 본다. 이제 필자가 <씨앗>을 접하는 독자들께 한마디 하려고 한다.

<씨앗>은 '한글판 C언어'인가?

 
<씨앗>을 처음 대하는 사람들이 자주 오해하는 것이 있는데, 그것은 바로
"<씨앗>은 C언어의 문법을 모방한 언어"
라고 하는 생각이다. 필자도 처음 씨앗을 접했을 때에 위와 같은 생각을 가지고 있었다. 그도 그럴 것이, 씨앗의 바탕글을 별 생각 없이 훑어보게 되면 C에서 쓰이는 갖가지 기호들을 발견할 수 있기 때문이다. 먼저 풀이글을 나타내는 기호에서 부터 중괄호로 둘러싸인 문장들, 그리고 증가/감소 연산자(++, --), 또 그 외에 여러가지 C 에서 쓰이던 기호들 때문에 정말 "<씨앗>은 C언어를 한글로 바꿔놓은 듯"한 느낌을 가지게 된다.
물론 씨앗의 통합 환경은 Turbo C 2.0의 그것과 거의 똑같다. 이것은 애초에 통합 환경을 개발할 때 TC 2.0의 환경을 모델로 해서 만들어 졌기 때문이라고 한다. 하지만 이런 환경이 C와 같다고 해서 <씨앗>이라는 언어 자체가 C와 특별한 관계가 있는 것은 결코 아니다. 씨앗은 C언어와 관계가 없지만, 그와 동시에 관계가 있다. 나눔 기술 박석봉 개발 팀장님의 말을 인용하면, 씨앗이 만들어질 때에 두 세가지 다른 언어를 참고로 했다고 한다. 따라서 씨앗의 어떤 부분은 C와 유사한 점이 분명히 있을 것이다. 하지만 대부분의 명령형 언어가 구현하는 기능들이 비슷비슷하듯이, 씨앗도 이러한 명령형 언어의 특징들을 가지고 있다. 하지만 씨앗은 이러한 다른 언어를 본따서 만들지 않았고, 단지 참고로 삼았다고 한다. 따라서 씨앗은 C 와 관계가 없으면서도 있다고 한 것이다.
하지만 씨앗이 "한글판 C언어"라는 생각은 잘못된 생각이다. 왜냐하면 씨앗을 조금만 유심히 살펴보면, C언어와는 다르다는 것을 금방 알 수 있기 때문이다. 씨앗은 C언어와 파스칼이 다른 것 보다 더 C언어와 다르다. 앞에서 예로 들었던 C의 if문과 씨앗의 참거짓문, 또 C의 goto문과 씨앗의 이동문을 비교해 보아도 금방 알 수 있을 것이다. 여기서는 씨앗이 결코 C언어를 한글로 직역한 것이 아니라는 것을 구체적인 예를 들어가며 설명하고자 한다.

1. 중괄호...

독자들이 씨앗을 "한글판 C"라고 하는 가장 큰 이유는, 바로 중괄호 때문이라고 해도 과언이 아닐 것이다. 정말 겉으로 봐서는 C와 씨앗 사이에 중괄호의 쓰임이 완전히 일치한다고 생각할 수도 있다. 하지만 다음의 두 문장을 보게 되면 그런 생각이 없어질 것이다.
 
(1) 절차 소개하기() 정수 내나이. { 내나이 := 20. 틀짜기("내 나이는 %십 입니다."). 정수쓰기( 내나이 ). } (2) void intro(void) { int myage; myage = 20; printf("My age is %d.", myage); }
 
(1)은 씨앗, (2)는 C언어이다. 먼저 둘 사이의 다른 점은 문장의 끝을 알리는 마침표가 C언어에서는 쌍반점(;)인데 반해 씨앗은 마침표(.)라는 것이다. 바로 여기서 부터 씨앗이 C를 단슨히 모방한 것이 아님을 알 수 있다. 바로 우리내 생각과 일치하는 부분이라고 할 수 있겠다.
이제 독자들이 생각하고 있는 중괄호에 대해서 생각해 보자. C에서의 중괄호는 "구역(Block)의 시작"을 나타낸다. 하지만 씨앗의 중괄호는 "실행부의 시작"을 의미한다. 즉 C언어는 "{"에 의해서 구역의 실제적인 부분이 시작되지만, 씨앗에서의 "{"은 구역의 실행부분의 시작을 나타낸다는 말이다. 그래서 (1)의 경우 중괄호가 오기 전에 먼저 변수를 선언했는데, 바로 이 부분이 해당 구역에서 쓰일 변수나 기타 다른 명칭을 선언하는 부분이 된다. 즉 씨앗에서의 선언부와 실행부는 엄연하게 구별되어 있고, 이러한 실행부의 시작을 알리기기 위해서 중괄호가 쓰이지만, C는 중괄호 안에서 선언과 실행이 이루어지게 된다. 이것이 씨앗과 다른 점이다.
 
또, 흐름 재어 명령에서 쓰이는 중괄호도 양자간에 큰 차이가 있다. 우선 다음을 보자.
 
(1) 가 = 3 { 참이면 나간다. } (2) if (a == 3) break;
 
C에서 흐름 제어문(if, while, do~while, for)에 중괄호를 쓰는 이유는 복합문을 나타내기 위해서이다. 원래 이런 흐름 제어문들의 목표가 되는 것은 하나의 문장이다. 그래서 (2)와 같이 하나의 문장이 놓일 때에는 중괄호를 둘러줄 필요가 없는 것이다. 하지만 이와 같은 경우에는 문장이 하나만 더 늘어나도, 즉 문장이 둘 이상이면 그 문장들을 하나로 엮어줘야 한다. 따라서 이럴 때의 중괄호는 "여러개의 문장을 하나로 묶는" 역할을 한다. 하지만 (1)을 보자. 씨앗에서의 제어문(참거짓문, 조건선택문, 선택문, 되풀이문)에 쓰이는 중괄호는 제어문이 실행되는 대상의 시작을 알려준다. 바꾸어 말하면 씨앗 제어문에서의 중괄호는 그 문장의 일부라는 것이다. 그래서 (1)과 같이 '나간다'는 문장 하나만 있어도 중괄호를 둘러야 한다. 왜냐하면 중괄호 자체가 제어문의 구성요소에 속하기 때문이다. 이는 참거짓문 뿐만 아니라 모든 제어문에 마찬가지로 적용되는 법칙들이다.
요컨데 같은 중괄호라고 하더라도 C에서 의미하는 것과 씨앗에서 의미하는 것이 다름을 알 수 있을 것이다.

2. 선언문...

씨앗이 C를 모방했다는 오해를 받는 부분 중에 다음과 같은 것이 있는데,
 
int a, b, c; 정수 가, 나, 다.
 
이것만 놓고 볼 때, 씨앗은 C의 지정어를 그냥 직역한 것이라는 생각이 뇌리에 스칠 것이다. 하지만 이것은 단순 변수의 선언일 때나 그런 것이다. 아래를 보면,
 
(1) int i, *ip, ia[10]; (2) 정수 정. 정수^ 정접. 정수[10] 정배.
 
C언어에서는 int형에서 유도된 자료형이면 int를 앞에 두고 특별한 자료형 지시자를 써서 선언을 한다. 예컨데 포인터를 나타내는 '*', 배열을 나타내는 '[]'등을 명칭 뒤에 붙여주면 되는 셈이다.
하지만 (2)를 보자. 씨앗은 정수형에서 유도된 자료형이라 하더라도 각각을 서로 독립된 자료형으로 간주한다. 즉 보통의 정수와, 정수접근형(pointer), 그리고 정수배열을 모두 다른 것으로 보기 때문에, 자료형을 표시할 때 (2)와 같이 자료형의 이름 뒤에 지시자를 표시하고, 따로 따로 선언을 해주어야 한다. 이것만을 보아도 씨앗과 C언어의 생각이 근본적으로 다르다고 하는 것을 느낄 수 있을 것이다.
그럼 이번에는 절차(함수) 선언을 예로 들어 도록 하자.
 
void intor(void); 절차 소개하기().
 
역시 위의 두 문장만을 봤을 때에는 전혀 다른 점이 없어 보인다. 단지 씨앗에서 절차 뒤의 괄호를 비워둔 것이 다를 뿐이라고 생각하게 된다. 하지만 이것은 기본적인 선언이고 다음의 선언을 보게 되면, 역시 둘 사이에는 하늘과 땅만큼 차이가 난다는 것을 알 수 있다.
 
(3) int intro(int *p); (3) 절차 소개하기( 정수^ 접 ) => 정수.
 
C에서는 함수의 넘김형(return type)을 함수 이름 앞에 두지만, 씨앗은 함수의 넘김형을 "=>"라는 기호 뒤에 두어야 한다. (3)과 (4)중 어느 것이 의미가 더 분명히 나타날까? 그것은 독자들의 판단에 맡기겠다. 그리고 참고로 인자를 선언할 때, C에서는 포인터 지시자를 인자 앞에 나타내지만, 씨앗에서는 자료형 바로 뒤에 나타낸다는 것이 또 다르다.

3. 갖가지 문장들...

씨앗이 C와 많이 다르다는 것은 여러가지 문장을 보아서도 알 수 있는데,
 
(1) for (...) { for (...) { while (...) { .... if (a == 3) goto here; } ... } ... } here: ... (2) 깊은 구역 되풀이 { 되풀이 { 되풀이 { .... 가 = 3 { 참이면 깊은 구역에서 나간다. } } ... } ... }
 
C에서의 break는 자기가 속한 구역만을 빠져나갈 수 있으므로 (1)과 같이 goto 문을 써야 하지만, 씨앗은 '나감문'의 목표를 줄 수 있으므로 break문과는 전혀 다름을 알 수 있다.
 
그리고 조건에 의해서 실행되는 문장을 볼 때, C를 비롯한 다른 언어에서는 항상 "참일 때"만을 가정하여 어떤 작업을 하게 되는데, 예를 들면 다음과 같다.
 
(1) if (a != 3) ... (2) 가 = 3 { 거짓이면 ... } (3) while (!feof(stream)) { ... } (4) 되풀이 끝인가( 흐름 ) 거짓인 동안 { ... }
 
하지만 씨앗에서는 "참일때" 뿐만 아니라 "거짓일 때" 어떤 처리를 수행할 수 있도록 "거짓이면", "거짓인 동안" 등을 준비해 두었기 때문에, 이를 이용하여 선택적인 표현이 가능하다. 그래서 작성자는 어떤 틀에 메이지 않고 생각한 대로 바탕글을 쓸 수 있는 것이다.
마지막으로 어떤 절차(함수)에서 빠져나오는 넘김문(return statement)에 대해서 알아보면,
 
(1) return 3; (2) 3 넘긴다.
 
C는 영어의 어순을 따르고 있지만, 씨앗은 한글의 어순을 따르고 있다.

4. 여러가지 기호...

연산자와 기호들에 대해서 생각해 보자. "C에서 쓰이는 기호들이 씨앗에서도 그대로 쓰이고 있으므로 씨앗은 C를 모방한 것이다"라고 말하는 독자가 있을것이다. 그런데 이러한 기호들은 모방의 차원을 지나서 우리의 이성에 부합하는 것들이 많다. 가령 베이직과 C에서 쓰이는 사칙 연산 기호들이 같다고 해서 "C가 베이직을 모방했다"고 말할 수는 없는 것이다. 씨앗에서도 마찬가지 이치이다. 연산자를 채용한 것은 그 나름대로 그것들의 의미가 명확하다고 생각했기 때문이다.
덧붙여 알아둘 것은, 씨앗은 C의 기호들을 무비판적으로 수용하지 않았다는 점이다. 에를 들어보자. C의 상등 연산자는 '=='이이고, 대입 연산자는 '='이다. 그런데 통념적으로 '='은 양변이 같다는 것을 의미한다. 따라서 C의 상등 연산자와 대입 연산자는 혼동을 불러일으킬 여지가 상당히 크다. 그래서 씨앗에서는 좀 길어지더라도 상등 연산자를 '='으로, 대입 연산자를 ':='로 정했다. 이렇게 하면 C에서의 폐단을 없앨 수 있다. 예를 더 들려면 얼마든지 들 수 있겠지만, 지면의 재약 상 여기서 줄이도록 하겠다. 결론적으로 알아 둘 것은, 씨앗은 C의 기호들을 무조건적으로 받아들였다고 생각해서는 안된다는 것이다.
 
지금까지 이야기 했던 것만이 전부가 아니다. 씨앗을 깊이 공부하게 되면 정말 C와는 너무나 많은 차이점이 있음을 깨닫게 될 것이다. 이런 여러가지를 볼 때 씨앗은 결코 "C언어의 문법을 모방한 언어'가 아님을 알 수 있다. 독자들에게 부탁하고 싶은 것은, 이런 예들을 보고 또 씨앗을 공부하면서 씨앗은 "C를 모방했다"는 생각만큼은 버려주었으면 하는 것이다.

선입견을 버리자

 
내가 다른 사람들에게 씨앗을 뿌릴 때, 항상 하는 말이 있다. "씨앗은 C보다 강력하다"는 말이 그것인데, 내가 그렇게 말하면 사람들은 한결같이 "C보다 강력한 언어가 있을 수 있느냐"고 묻는다. 나는 감히 말한다. 씨앗은 C보다 우수하다. 사람들은 단지 "우리나라에서 만들었다"는 이유 하나만으로 씨앗을 색안경을 쓰고 보려한다. 앞에서 말했듯이 씨앗은 상용 프로그렘 작성을 목표로 개발되었다. 그래서 C에서 할 수 있는 대부분의 일을 씨앗에서는 더 편하게 할 수 있다. 메모리나 하드웨어를 직접 다룬다거나 하는 시스템적인 일도 씨앗은 능숙히 해 낸다. 중요한 것은 씨앗이 아무리 좋은 기능을 가지고 있어도 기존의 사용자들이 색안경을 쓰고 씨앗을 바라본다는 것이다. 필자가 이 글을 쓰는 까닭도, 그러한 선입견을 없애 보자는 데 뜻이 있었다.
 
그런데 우리는 한가지 잊은 사실이 있다. 지금의 씨앗은 개발된지 3년째, 그리고 세상의 빛을 본 지는 이제 겨우 한달이 조금 넘은 언어라는 것이다. 우리들이 들먹이는 C 언어는 무려 20년이 넘는 언어이다. 따라서 C언어는 20년 동안 갈고 닦아져서 성장하게 된 것이지 처음부터 C언어가 이런 체계적인 모습을 하고 있었던 것이 아니라는 점이다. 사람들 중에 "씨앗에서 인라인 어셈블러가 되느냐"라는 질문을 하는데, 실은 이 "인라인 어셈블리"라는것이 UNIX C에는 없다. 심지어 Turbo C 1.0에서도 지원하지 않는 기능이었다. C언어가 이렇게 인기를 누리게 된 것은 88년에 볼렌드사가 Turbo C 1.0을 발표한 이후이다. TC 1.0에는 우리가 지금 쓰는 디버거도, 그래픽 라이브러리도 없었다. 그리고 당연히 있어야 한다고 생각되는 난수 얻기나 PC 스피커로 소리를 내는 등의 함수도 없었다. TC 1.0과 씨앗 1.0을 비교하라면, 단연 씨앗이 앞선다. 씨앗은 간단하지만 그래픽 기능도 제공하고, TC 2.0에 있는 시스템을 조작하는 절차도 대부분 준비되어 있기 때문이다.

씨앗의 미래

씨앗은 아직 1.0이다. 그래서 개선해야 할 점도 많다. 우선 지금의 통합환경을 TC++ 3.0과 비교해 볼 때 너무나 열악한 것이 사실이고, 또 바탕글 수준 디버거가 준비되어 있지 않은 것도 큰 흠이라고 할 수 있다. 그리고 씨앗에서 C나 다른 언어로 된 프로그램과 접속하는 방법이 마련되어 있지 않고, 번역기의 성능도 아직까지는 만족할 만한 것이 못된다. 하지만, 우리나라에서 개발된 씨앗이기에, 우리들이 쓰다가 불편한 점이 있으면 건의해서 보완하면 된다. 오히려 우리들이 씨앗에 관심을 가지고 잘 키운다면, 씨앗은 우리들이 필요한 기능을 속속 가지게 될 것이 분명하다. 씨앗을 무조건 C와 비교하여 나쁘다고만 하지 말고 씨앗을 써 보자. 다른건 몰라도, 한글 입출력이 필요할 때 만이라도 씨앗을 쓰자. 그리고 다른 사람에게 씨앗을 뿌리자. 언재까지 남의 나라에서 만들어진 도구들에 우리의 생각을 끼워맞출 수는 없는 노릇 아닌가? 우리나라의 프로그래머들에게 씨앗이 널리 뿌려지는 날, 그 날이 비로소 우리의 소프트웨어 산업이 독립하는 날이 될 것이라고 필자는 다시한번 힘주어 강조하고 싶다. 씨앗이여, 널리 뿌려저라!