CS(ComputerScience)/프로그래밍언어

Fortran부터 C#까지 찾아나가는 여정(프로그래밍 언어의 역사3)

susong 2022. 11. 1. 20:40
728x90

ALGOL

Fortran과 COBOL이 각각 연구와 민간에서 활약하며, 컴퓨터는 이제 단순히 계산하는 덩어리가 아니라 어떤 것을 만들 수 있는 가능성이 있는 기구로 변모했다.

 

이런 추세를 타고 만들어진 녀석이 바로 ALGOL!

풀네임은 ALGOrithmic Language으로, 말 그대로 알고리즘을 표현하기 위해서 제작된 언어이다.

 

이 친구의 가장 큰 특징이라고 하면 한가지를 꼽을 수 있는데

그것은 바로! 범용 소프트웨어라는 것이다!

 

크게 와닿지 않을 수 있는데, 이 녀석은 하드웨어와 독립적으로 작동한다.

그게 왜 큰 일인 것일까?

 

이전 COBOL 내용을 다시 한번 살펴보면, COBOL에는 Environment Division이 따로 있었다.

즉, 그 프로그램을 돌리기 위해서는 "특정 하드웨어"가 필요했던 것이다.

 

하지만, ALGOL부터는 소프트웨어가 하드웨어의 종속성에서 벗어나 이제는 그 자체로 존재할 수 있게 바뀌었다.

 

이 ALGOL은 그것말고도 다양한 특징을 가지고 있는데, 아래와 같다.

1. 한 줄의 끝을 ; 로 표현(그렇다 C언어의 그 녀석이다)

2. 블록 구조 개념을 창시

   - 이 개념을 통해 세상에 중괄호로 묶는 편리함을 선사하셨다.

3. 블록 단위를 위한 매개변수 개념 창시

   - 중괄호로 묶을 수 있게되니 이제 함수를 표현할 수 있게 되었고

   - 그 간에 매끄러운 데이터 전송을 위해 매개변수라는 개념이 만들어졌다.

4. 우리가 자주 쓰는 else if 논리구조 제공

5. 변수이름 제한 없음

   - 놀랍게도 이전까지는 변수 자료형의 길이에 제한이 있었다!

6. 재귀함수 표현 가능!

 

이런 한 획을 그은 녀석이었으나, 너무나도 획기적인 나머지 컴파일러 구현이 어려웠고,

그로 인해 크게 사용되지는 않았다. 하지만 ALGOL이 만든 개념은 이후 다른 언어에서 계승됨으로써 의의가 있다.

 


PL / I

누군가가 Fortran, COBOL을 보며 Algol을 만들 때, 누군가는 이 둘(Fortran, COBOL)의 장점을 섞어 새로운 언어를 창조시키겠다는 획기적인 생각을 해냈다.  그렇게 만들어진 녀석이 바로! PL/I이다.

 

PL/I는 IBM에 의하여 1964년 제작되었는데, IBM은 이런 생각을 가지고 이 언어를 만들어냈다.

 

'Fortran은 과학 연구 영역에서, COBOL은 비즈니스 영역에서 최고인데 둘이 장단이 뚜렷하네? 이 둘의 장점만 섞어서 언어를 만들면 최고가 될거야!'

 

물론 상상에서는 성공할 수 있겠지만, 현실은 그렇지 않았다.

 

당시에는 획기적인 다음과 같은 기능들을 구현하려 했는데

1. Unit Level 동시성 

2. 오류 핸들링(당시에는 최초!)

3. 분기 가능한 재귀

4. 포인터 데이터 타입!

5. 그 외 다양한 기능들..

 

지금 말만 들어도 왜인지 현대 프로그래밍에나 어울릴만한 친구들을 당시에 모두 만들려고 하다보니 결국 실패했다.

 

당시에는 너무 언어가 커지고 또 복잡해지면서 아무도 안쓰는 언어가 되었지만, 오히려 현대에 개선되면서 지금은 어느정도 양 분야(연구 및 비즈니스)에서 사용되고 있다.

 

이 언어가 이렇게 망했을지라도, 이 언어가 제시한 비전과 아이디어들은 이후 다른 언어로 계승되며 지금 프로그래머들의 시간 단축과 행복에 큰 기여를 하고 있다.

 


C언어

??? : B언어는 없나요? ??? : 있는데?

내가 가장 사랑하는 C언어이자 동시에 싫어하는 언어 C언어이다.

 

C언어는 1972년 Bell Lab에서 Dennis Ritchie와 Ken Thompson에 의해 UNIX개발용으로 제작되었는데, 이전에 나왔던 좋은 녀석들은 모두 몽땅 넣어서 만든 친구이다.

 

UNIX개발용으로 만들어졌기 때문에! 즉, 프로그래머를 대상으로 만든 녀석이기 때문에!

이런 특징들을 가지고 있다.

 

1. 약한 타입검사

   - 이 친구는 char(문자)형에 + 1을 해도 계산이 된다

   - b + 1 -> c가 되는 매커니즘

   - 다른 언어(C#같은 강한 타입검사를 하는 언어)에서는 바로 오류를 뱉을 수 있다.

   - 하지만! 프로그래머가 짜는 것이니까 알아서 다 잘 했을거란 언어 제작자의 믿음이 이걸 가능하게 한다.

2. 가동성이 낮음

   - 의사가 약어쓰면 우리가 못알아보듯, C언어에 익숙치 않은 사람은 바로바로 이해하기 힘들다

3. 데이터 캡슐화 미지원

   - 이 특성은 시대적 문제이기에 나중에 C++(C + 1)에서 simula 67의 OOP개념을 C에 도입함으로써 해결한다.

 

장점으로는 다음과 같다.

1. 단순하고 간결하다! (전문가용이므로)

2. 효율적이고 빠르다! (여전히 많은 이들이 알고리즘을 C로 구현하는 이유)

3. 포인터 데이터 유형을 제공한다

   - 메모리에 있는 데이터를 직접 조작함으로써 또 다른 지평을 열었다.

   - 물론, 매우 위험하다!(메모리에 직접 접근한다는 것은.. 나중에 운영체제 글에서 계속..)

   - 양날의 검인 포인터

4. UNIX의 기반이 되다보니, 현재에도 거의 모든 운영체제에서 기본으로 제공된다

   - 어디든 C는 있기에 일단 짜면 돌아간다는 뜻

 

그렇다면, 앞에서 다룬 녀석들과 연관성이 어떻게 되는가?

Algol의 특성

1. 중괄호 묶음

2. 끝을 ; 로 표현

3. 매개변수 창시

4. Else if 제공

PL/ I 특성

1. 포인터 자료형

COBOL 특성

1. 구조체 개념

FORTRAN

- 정적 메모리할당

 

모든 언어가 그렇듯, 우리가 잘 아는 C언어도 갑자기 뿅!하고 나온 것들이 아니다.

모든 학문이나 발전이 그러하듯, C언어도 이런 앞서간 언어들의 도움 덕분에 이렇게 사용하기 좋게 나올 수 있었다.

내 프로그래밍 앞날에 도움을 준 선배 프로그래머분들에게 감사 또 감사한다.

LISP는 어디갔나요? 나중에 할게요

 


애증의 C언어 어떻게 보면 이 친구로 프로그래밍 인생을 시작해서 다행인 것 같다.

메모리 관리부터 배우고 힘들었지만 포인터를 알고나니 다른 언어 배우는 것에 많은 도움이 된다.

고맙다 C언어

 

다음 글에서는 C++, C#에 대해 한번 다뤄보겠다.

728x90