Visual Basic, C & C++
분류 기타/참고

프로그래밍 언어의 변천사

페이지 정보

본문

프로그래밍 언어의 변천사가 주된 내용입니다. 구럼... 즐감. 

################################################################## 
이문서는 C/C++ 스터디 그룹 "씨앗"(http://www.onple.com) 에서 레포트로 만든 문서입니다. 

소유권은 각각 참고한 자료들에게 있습니다. 

/*********************************************************************************** 

*            첫번째 : C/C++ 프로그램 구성요소 
*                                  
*                                    
*                작은주제 
*                                      
*                    +  프로그램 언어란? 
*                                  
*                    +  C/C++ 프로그래밍의 변화 
*                
*                    +  C/C++ 장단점 
*                                  
*                    +  컴파일러의 구성 
*                                  
*                    +  프로그래밍의 단계 

***********************************************************************************/ 



+----------------------------------+ 
| 1. 프로그램 언어란? 
+----------------------------------+ 

  대부분의 마이크로 프로세서가 하는 일은 볼 수 없다. 즉 여러분이 프로그램을 컴퓨터 안으로 입력시키면 
  마이크로 프로세서는 자신이 해야 할 일을 아는 것으로 가정한다. 그러나 프로그래밍이 어떻게 작동하는지를 
  이해하기 위해서는 여러분도 마이크로프로세서가 어떻게 작동하는지를 필요한 부분은 알고 있어야 한다. 

  기술적으로 마이크로 프로세서는 단지 네 가지 작업만을 수행한다. 즉, 마이크로 프로세서는 
  한 메모리에서 다른 메모리로 데이터를 이동시키고, 
  메모리상에서 데이터를 변경하며, 
  특정 데이터를 위치시킬 메모리상의 장소를 결정하고, 
  마지막으로 수행되는 명령어의 순서를 변경한다. 
  이러한 모든 작업은 전자적 펄스를 주고 받거나 감독함으로써 수행된다. 

  컴퓨터는 펄스를 두가지 상태로 다루며, 전자 신호는 on, off 이다. 
  매우 기본적인 수준에서 컴퓨터 명령을 작성하기 위해서는 off 상태를 나타내는 0과 On 상태를 
  나타내는 1을 사용한다. 이러한 체계를 모두 숫자로 나타내기 위해 단지 0과 1의 결합만을 사용하는 이진수 
  체계를 바이너리 디지트(비트) 또는 이진 명령어라고 부른다. 

  컴퓨터와 컴퓨터 프로그램이 만들어졌을때 프로그램은 On과 Off 신호를 직접 조작해서 수행되었다. 
  이때는 어떠한 마이크로프로세서도 없었으며, 기술자들은 일련의 On과 Off 스위치를 물리적으로 
  변환시켰으며 통제자로서 행동했다. 

  그러나 전체 응용 프로그램을 수행하기 위해서는 수천의 개별 신호를 가져야 하기 때문에 프로그램의 작성은 
  시간이 많이 드는 작업이었다. 무식하게도..-_-;; 정말 이런 짓(?)을 해서 창시한 사람들은 
  우리가 존경할 필요가 충분하다. 

  컴퓨터가 발달되어 감에따라 프로그램을 컴퓨터로 한번에 모두 입력하는 것이 가능하게 되었고, 
  그 후에 컴퓨터는 이 명령어들을 수행하였다. 
  어셈블리언어가 개발될 때까지 수천 개의 개별적인 0과 1이 여전히 필요하였다. 
  그리고, 여전히 많은 코드를 사용하고 시간이 많이 소비되는 방식이었다. 

  알아둬야 할것은.. on, off 의 무지막지함으로 컴퓨터 발전에 기여를 한 사람들을 존경해야 한다는 것이며,. 
  사용자 측면에서는 고급언어의 특성을 지니면서도 기능적인 측면에서는 어셈블리 언어와 같이 컴퓨터의 
  하드웨어를 제어할 수 있는 새로운 시스템 프로그래밍 언어의 증장이 절실하게 요구되었다. 
  그래서 오늘날같이 C 기타등등 과 같은 강력한 프로그램 언어가 나오게 된것이다... 

  우리는 절대 C가 어렵다고 투정 부릴 거시기가 못된다. 
  
  하지만... 

  어렵다 -_-++  여기까지 읽고 지친사람들 반성하라!!! 반성하라!!! 




+----------------------------------+ 
| 2. C/C++ 프로그래밍의 변화 
+----------------------------------+ 

  길지만.. 필요한 부분들을 꽁꽁 압축해서, 꼭 한 두번쯤 집고 넘어가야 할 부분을 정리한 것이다. 
  그리 꼭 알필요는 없는 부분이지만, 무슨 일이든 아무개의 역사를 모르고는 절대 아무개를 사랑할 수 없는 법이다. 


  여기서부터는 우리 맴버분들이 열심히 모으신 자료들입니다. 


  C는 1972년 벨 연구소에서 데니스 리치(Dennis Ritchie)에 의해서 개발되었다. 이 언어는 우연히 
  개발된 것이 아니라  많은 컴퓨터에서 사용되는 UNIX 운영 체계를 제작하는데 사용한다는 특별한 
  목적을가지고 개발되었다. 즉, C 언어는 처음부터 프로그래머들이 작업을 완료하는데 유용하게 
  사용할 수 있도록 고안되었다. 

  이처럼 C 언어는 뛰어난 기능과 융통성을 제공해 주었으므로 오래지 않아 벨 연구소 뿐만 아니라 
  다른 여러 곳으로 빠르게 보급되었다. 많은 프로그래머들은 모든 프로그램을 작성하기 위해서 
  C 언어를 사용하기 시작했다. 

  그러나 서로 다른 곳에서 C 언어를  사용하는 프로그래머들은 C 언어를 약간씩 수정하여 
  각자 자신만의 독특한 환경을 구성하기 시작했고, 결과적으로 C 언어로 작성된 프로그램들 간에는 
  미묘한 차이가 생기게 되었으며, 그로 인해 많은 프로그래머들은 다른 곳에서 작성된 프로그램을 
  정상적으로 실행하기 위해 다시 수정해야 하는 상황이 발생했다. 

  이러한 문제점을 해결하기 위해서 미국의 국가 표준 협회(ANSI : American National Standard Institute)에서는 
  C에 대한 표준을 만들기 위해서 1983년 위원회를 결성했고, ANSI 표준 C(ANSI Standard C)라고 알려진 
  표준안을 발표했다. 

  이제, C 언어의 명칭에 대해서 알아보도록 하자. 
  C 언어는 이전에 사용되던 B언어를 계승한다는 점에서 'C'라는 이름을 가지게 되었다. 
  B 언어도 벨 연구소의 켄 톰슨(Ken Thompson)에 의해서 개발된 것이다. 
  B 언어의 명칭이 어떻게 정해졌는지는 (B = Bell Labs) 쉽게 추축할 수 있을 것이다. 

  C가 컴퓨터 프로그래밍 언어로서 성공을 누리고 있는 가운데 왜 C++가 필요하게 되었을까? 
  대답은 바로 '복잡성'이다. 이 복잡성이 C++의 탄생 배경이 되었다. 
  초기 프로그래머들은 가장 기본적인 컴퓨터 명령인 기계어로 작업했다. 
  이런 명령들은 1과 0 으로 이루어진 긴 문자열 형태로 표시되었다. 
  얼마 지나지 않아 인간이 읽을 수 있고 관리 할 수 있는 어셈블러가 발명되었지만, 
  그것으로도 역부족이었다. 그 후 고급언어가 개발되었다. 

  이런 언어들은 인간이 사용하는 유사한 문장으로 작업할 수 있게 되어 프로그래머들은 유 
  용한 도구를 확보하게 되었다. C가 전세계적으로 가장 많은 사랑을 받고 가장 널리 사용되는 
  프로그램 전문 언어중의 하나 이기는 하지만 이 언어 역시 한계에 부딪히게 되었다. 
  이에 따라 고도로 복잡한 프로그램을 관리하기 위하여 C++가 탄생하게 되었다. 

  1980년 잔 트루스트럽(Bjarne Stroustrup)이란 사람이 뉴저지주의 머리 힐에 있는 벨 연구소에서 
  근무할 당시 상업용 소프트웨어 개발을 위한 가장 일반적인 언어였던 C를 확장해서 개체 지향 프로그래밍을 
  구현하는 데 필요한 기능은 제공 하였다. 그는 C++를 만들었고, 10년이 채 지나지 않아 
  소수의 AT&T 개발자가 사용하는 것에서 시작하여 세계적으로 대략 백만 이상의 개발자들이 
  선택하는 프로그래밍 언어가 되었다. 곧이어 10년째가 되면, 상업용 소프트웨어 개발에서 
  가장 많이 쓰는 언어가 될것이다. 

  처음 이 언어의 이름을 "C with Classes"로 지었는데, 1983년에 C++로 그 이름을 바꾸었다. 
  C++는 C 언어의 모든 것을 담고 있다. 또한 C 언어의 모든 철학을 그대로 계승하고 있다. 
  즉 C++는 새로운 프로그래밍 언어가 아니며 이미 널리 사용되고 있는 언어를 향상시킨 것이다. 

  C++는 처음 소개된 이후로 1985년과 1989년, 그리고 C++에 ANSI표준을 적용하기 시작한 시기 등 
  3번에 개정되었다. 1994년에 최초로 표준안이 발표되었으며 ANSI의 C++위원회는 사실상 스트루스트럽이 
  설정한 모든 사양을 그대로 수용하고 그 외의 약간의 사양을 덧붙였을 뿐이다. 

  C++가 C의 모든 기능을 포함하고 있는 어떤 C프로그래머가 쉽게 C++에서 동작하지만, C에서 
  C++로 도약한 것에는 큰 의미가 있다. C++는 C프로그래머가 쉽게 C++를 사용할 수 있다는 
  관련성에서 큰 장점이 있다. 

  그러나 실제로 모든 C++의 장점을 사용하기 위해 많은 프로그래머들은 그들이 알고 있는 것을 잊어 버리고, 
  프로그래밍의 문제를 개념화하고 해결하는 완전 히 새로운 방법을 익혀야만 한다. 




+----------------------------------+ 
| C/C++ 장단점 
+----------------------------------+ 

  C언어의 장점 

    * C 언어는 모듈성을 가진다. 이로 인해 구조화 프로그래밍 및 모듈화 설계를 자연스럽게 할 수 있으며, 
    결과적으로 신뢰성 있고 이해하기 쉬운 프로그래밍을 작성 가능하게 한다. 

    * C 언어는 효율적이다. 즉, C 언어는 간결하면서도 어셈블리 언어 수준에서나 가능했던 하드웨어의 
    미세한 제어까지도 가능하게 해 준다. 따라서 C 언어로 짜여진 프로그램은 실행 속도를 고속으로 
    높이거나, 메모리를 가장 효율적으로 사용할 수 있다. 

    * C 언어는 이식성이 뛰어나다. 임의의 시스템에서 작성된 C 언어 프로그램은 다른 시스템 상에서도 
    약간의 수정 또는 전혀 수정하지 않고서도 실행이 가능하다. C 컴파일러는 8비트 컴퓨터에서 
    슈퍼 컴퓨터에 이르기까지 다양한 컴퓨터 시스템에서 이용이 가능하다. 

    * C 언어는 단순하면서도 강력하다. C 언어는 우선 작은 언어이다. 작다는 것은 언어의 구성 요소가 
    몇 가지 안되며, 그것들을 사용하는 법칙이 별다른 예외 사항이 없이 일정하므로 단순함을 의미한다. 
    따라서 C 언어는 배우기 쉽고 C 언어의 기능 모두를 프로그래머가 유효 적절하게 활용할 수 있다. 
    물론 이러한 단순성이 기능상의 제약을 초래할 수도 있으나, C 언어는 적절한 제어 구조와 자료형의 조합, 
    그리고 간결하면서도 매우 다양한 연산자 및 라이브러리 함수의 제공으로 인하여 이러한 제약을 뛰어 
    넘어 강력한 기능을 제공한다. 


  C언어의 단점 

    * 사용자의 책임이 수반된다. C 언어는 간결하면서도 많은 기능을 제공해주고, 사용자에게 많은 
    자유를 주지만, 이에 따른 책임은 사용자가 져야 한다. 예를 들면, C 언어의 표현식의 자유에는 
    철저한 책임이 뒤따른다. 특히 C 언어의 포인터 사용은 프로그래밍 오류를 찾는데 무척 어렵게 한다. 

    * C 언어 프로그램 자체는 이해하기 어렵다. C 언어가 갖고 있는 풍부한 연산자들과 연관된 간결성은 
    이해하기 아주 어려운 코드를 만들 수도 있다. 모호한 코드를 작성하도록 강요되지는 않지만 
    그 가능성은 항상 존재한다. 

    * 초보자에게는 혼동의 우려가 있다. 한 가지 부호를 여러 의미로 사용하기 때문에 혼동될 우려가 있다. 
    예를 들면, "*"는 경우에 따라서 곱하기 연산자로 또는 포인터 연산자로 사용된다. 


  C++언어의 장점 

    * 객체지향적 
    * C가 제공하는 기능 외에 C++는 추가적인 데이터 타입, 클래스, 템플릿, 예외처리, 이름공간, 
    인라인 함수, 연산자 오버로딩, 함수이름 오버로딩, 참조, 메모리관리 연산자와 추가적인 라이브러리 기능을 제공 
    * 소프트웨어 개발의 간소화 
    * 검사와 디버깅의 단순화 
    * 소프트웨어 재사용 증가 


  C++언어의 단점 

    * 다양한 기능을 추가함으로 인해 언어의 복잡도가 증가하여 C에 비해 배우기가 어려워 짐 
    * 적절한 객체 지향 모델을 설계하기가 쉽지 않음 




+----------------------------------+ 
| 컴파일러의 구성 
+----------------------------------+ 

  컴파일러가 무엇인지.. 왜 필요한지 부터 집고 넘어가도록 하자.. 
  자.. 어떤 언어가 읽기 쉽고 쓰기 쉬운가? 

  C 
  puts("hellow") 
  --------------------------------------------------------  
  Assembly 
    MOV    AH,  9 
    MOV    DX,  OFFSET NAME 
    INT      2lh 
    MOV    AG,  4Ch 
    INT      2lh 
  NAME DB "HELLO" 
  -------------------------------------------------------- 
  이진명령 
  1011010000001001101110100000000100001011 
  1100110100100001101101000100110011001101 
  00100001010100110101100110100001001000101 
  01011000 

  물론 컴퓨터는 실제로 PUTS 또는 다른 고급 언어 명령의 의미를 이해하지 못한다. 
  따라서 컴퓨터가 명령을 수행하기 전에 반드시 컴퓨터 자신의 언어, 즉 이진 명령으로 번역해야 한다. 
  이러한 수많은 단어를 이진 명령으로 번역하는 것은 컴파일링(Compiling) 또는 인터프리팅(interpreting)의 
  두 가지 방법에 의해 수행된다. 

  일반적으로 컴파일한다고 할때는 프로그램 전체를 한번에 릭어 들여서 컴퓨터가 직접 실행시킬 수 있는 
  형태인 목적 코드(object code)로 번역하는 것이다. 

  C, C++, PASCAL, COBOL 그리고 FORTRAN은 컴파일 되는 언어의 예이다. 

  그러나 컴파일러는 원시프로그램에 대하여 항상 목적코드를 생성하는 것은 아니다. 만약 프로그램에 어휘적으로 
  또는 문법적으로 오류가 있으면 결코 목적코드를 생성하지 않는다. 곧 목적 코드가 생성되려면 먼저 
  작성된 프로그램이 언어 정의시에 주어진 문법에 맞게 작성되었는지 어휘와 문장구조를 분석하고 
  이에 대한 오류가 있으면 수정하도록 프로그래머에게 메시지를 전달해야 한다. 즉, 컴파일러가 프로그램에서 
  오류를 결코 인식하지 못했을 때, 비로소 최종 목적코드가 생성된다. 이에 관련 컴파일러의 기능과 그의 실행과정은 
  일반적으로 기능에 따라 6단계로 구분되며, 전 과정을 통해 작성되고 유지관리되어야 하는 3개의 테이블로 구성된다. 
  여기서 후미의 3단계는 전통적인 방법에 따라 

  중간어 코드생성(intermediate code generator)과정, 
  코드최적화(code optimization)과정,  
  목적코드생성(Target code generator) 

  과정으로 구분 지을 수도 있다. 


  첫째, 어휘분석 
  컴파일러는 그의 입력자료인 원시 프로그램을 문자 단위로 한 개씩 읽어서 
  상징적인 단어(token)를 찾고 이에 대한 정보(literal/symbol table)를 작성하는 
  과정(어휘분석)을 수행한다. 이 과정은 프로그램 전체를 문자단위로 읽어 토큰열로 
  전환하기 때문에 컴파일러의 상당한 시간이 여기서 소모된다. 

관련자료

프로그래밍
Today's proverb
사랑만이 지나간 시간을 후회하지 않게 하며, 사랑만이 오는 시간을 기쁨으로 기다리게 한다.