관리 메뉴

Gyejoong's Information

프로그래밍 언어론 - 1. 프로그래밍 언어의 소개 본문

Study

프로그래밍 언어론 - 1. 프로그래밍 언어의 소개

연계중 2017. 5. 21. 01:43
반응형

1. 프로그래밍 언어란 무엇인가


* 프로그래밍 언어

 - 컴퓨터에 프로그래머의 의사를 전달하는 방법

 - 프로그램을 작성하는 방식

 - 프로그래머가 컴퓨터를 추상화 하는 방법

 - 컴퓨터가 읽을 수 있고 사람이 읽을 수 있는 형식으로 계산을 서술하는 표기체계


* 프로그램

 - 컴퓨터와 사람이 동시에 이해할 수 있는 형식으로 작성된 글




1-1 프로그래밍 언어에서의 추상화

  

  * 추상화(abstraction)

- 속성들의 특징적인 일부분만을 가지고 주어진 작업이나 객체를 표현하고, 그들의 공통점을 추출하여 표현하는 방법


  * 자료추상화

- 문자열, 수, 탐색 트리와 같은 계산의 주체가 되는 자료의 특성을 추상화 하는 것


  * 제어추상화

- 알고리즘 추상화

- 현 상황에 따라 실행 순서의 수정을 위한 제어의 특성을 추상화 하는 것


 * 기본적 추상화(basic abstraction)

- 가장 국지적인 기계 정보를 수집한 추상화


 * 구조적 추상화(structured abstraction)

- 프로그램의 구조에 대한 보다 전역적인 정보에 관한 추상화


 * 단위 추상화(unit abstraction)

- 단위 프로그램 전체 정보에 관한 추상화


1-2 계산 전형


 * 명령형 언어(imperative language)

- 절차 언어(procedural language)

- 순차적인 명령의 수행을 기본개념으로 하는 언어


 * 함수형 언어

- 함수 개념에 기반을 둔 언어

- 계산 기술이 함수의 평가, 즉 알려진 값을 함수에 적용하는 것에 기반

- 적용형 언어(application language)


 * 논리형 언어

     - 기호논리학에 기반을 둔 언어

- 계산 내용만 선언하듯이 기술

- 선언적 언어(declarative language)

 * 객체지향 언어

- 객체에 기반을 두고 있는언어


1-3 언어 정의


* 구문론(syntax)

- 형식화가 많이 되어 있는 부분

- 언어의 표면적인 구조만을 정의

- 대부분의 언어가 문맥자유(context free) 문법 사용


* 토큰(token)

- 프로그래밍 언어의 어휘 구조


* 의미론(semantics)

- 프로그램 실행 시 어떠한 일이 일어나는가를 기술




1.2 프로그래밍 언어란 무엇인가



1.2-1 디지털 컴퓨터 이전의 언어

  

  * 찰스 배비지(Charles Babbage : 1792~1871)

- 수치계산을 처리하기 위해 차분 엔진과 분석 엔진 설계

- 분석 엔진은 오늘날의 컴퓨터와 구조가 매우 유사


  * 오거스타(Ada Agusta)

- 세계 최초의 프로그래머로 인식


1.2-2 1950년대 : 최초의 프로그래밍 언어


  * 저급언어

- 기계의존적인 이진수 개념이거나 자연언어와 차이가 많은 언어

- 사람이 이해하기보다는 컴퓨터의 내부구조에 의존적인 언어


  * Fortan(Formula translation)

- 최초의 고급언어

- 응용과학 분야에서 우위를 차지하고 있음


  * Cobol(Common Business-Oriented Language)

- 미 국방성에서 해군 그레이스 호퍼가 이끈 팀에 의해 만들어짐

- 은행이나 대규모 회사에서 서류 처리와 같은 사무처리를 위해 재빨리 채틱됨


  * Alglo 60(Algorithmic Lanugauage 60)

- 알고리즘을 기술하기 위한 일반적인 표현 언어


  * LISP(List Processor)

- 일반적인 리스트 구조와 함수의 응용을 기본으로 한 언어


  * APL(Automatic Programming Language)

- 배열과 행렬을 포함하는 수학적 연산을 쉽게 프로그램이 하기 위한 언어

- IBM에서 제작


1.2-3 1960년대 : 다양한 프로그래밍 언어의 출현

  

  * Simula 67

- 노르웨이 컴퓨터 센터에서 뉘고르(Kriten Nygaard)와 달(Ole-John Dahl)에 의해 탄생

- 시뮬레이션을 위해 디자인 됨

- 객체지향언어의 기본이 되는 클래스 개념 도입


  * Basic(Beginners All-purpose Symbolic Instruction Code)

- 다트머스(Dartmouth) 대학교의 존 케머니(John Kemeny)와 토머스 커츠(Thomas Kurtz)가 개발

- 새로운 시분할 시스템을 위한 간단한 언어로 개발


1.2.-4 1970년대 : 간결성, 추상화 그리고 효율성


  * C언어

- 벨연구소의 데니스 리치(Dennis Ritchie)에 의해 고안

- 컴퓨터 구조에 대한 접근을 제공해 주는 개념

- 중급 프로그래밍 언어로 부르기도 함

  

  * Pascal

- Algol의 개념 도입

- 복잡하거나 교육적 목적에 부합되지 않는 주요 기능은 생략

- 교육용으로 뿐만 아니라 상업적으로도 높은 기능성 갖춤


1.2-5 1980년대 : 통합과 새로운 방향


  * Ada

- 1980년대를 대표할 수 있는 중요한 프로그래밍 언어

- 미국 국방성의 주도로 탄생

- J. 이치바이어(J. Ichbiah)가 이끈 개발자들은 자료추상화, 타입 메커니즘(package), 병행처리(task)와 예외 처리기 등의 특징을 처음 도입


  * Modual-2

- 니클라우스 워스(Niklaus Wirth)가 개발

- 운영체제를 구축하기 위해 고안된 Modula라는 언어를 기본으로 한 언어

- 추상화와 부분적 동시처리 개념과 내장형 시스템 프로그래밍을 목적으로 하드웨어에 쉽게 접근할 수 있는 기능도 추가한 다목적 언어


  * ML(Meta Language)

- 에든버러(EdinBurgh) 대학교의 로빈 밀너(Robin Milner)가 개발

- 문법과 타입 검사가 훨씬 유연함


  * Prolog

- A. 콜메로에르(A. Colmerauer)가 이끄는 그룹에 의해 마르세유에서 개발

- 인공지능 분야에서 많이 쓰이고 있고 모범적인 언어로 인식됨


  * Smalltalk

- 제톡스사의 팰르앨로 연구소에서 앨런 케이(Alan Kay), 댄 인갈스(Dan Ingalls)와 다른 연구자에 의해 개발

- 객체지향 접근 방식으로 일관된 객체지향 언어의 순수한 모범 케이스


  * C++

- C언어를 확장한 개념

- 비야네 스트롭스트룹(Bjarne Strousstrup)이 개발


1.2-6 1990년대 : World Wide Web 프로그래밍(Java)


  * Java

- 1990년대 가장 특징적인 프로그래밍 언어

- 월드 와이드 웹 프로그래밍을 쉽게 구현가능

- 자바가상기계(JVM) 위에서 동작하기 때문에 다양한 응용 분야에 적합


  * Java 애플릿

- 웹 클라이언트에서 실행될 수 있는 작은 프로그램




1.3 프로그래밍 언어의 설계 기준




1.3-1 효율성


  * 최적화

- 목적 코드의 효율성

- 번역기가 효율적인 실행 코드를 생성할 수 있도록 언어설계가 이루어지는 것


  * 번역의 효율성

- 윈시 코드가 효율적으로 번역되도록 허가하는지, 즉 알맞은 크기의 번역기로 빠르게 번역할 수 있는지에 대한 것


  * 신뢰성

- 프로그램 실행시에 예상치 못한 행동을 하거나 결함을 발생시키는 방향으로 행동하지 못하도록 하는 것


  * 프로그래밍 효율성

- 얼마나 쉽고 빠르게 프로그램을 작성할 수 있는가 하는 것

- 프로그램의 작성력


1.3-2 일반성, 직교성, 획일성


  * 일반성

- 특별한 경우를 피하거나 밀접한 관련이 있는 여러 개념을 일반적인 하나의 개념으로 결합한 것을 의미


  * 직교성

- 같은 언어의 구성요소가 문맥이 다르다고 다르게 행동해서는 안 된다는 것을 의미


  * 획일성

- 의미적으로 형식적으로 유사한 것들은 그 유사성을 프로그래밍 언어 내에서 일관되게 유지되어야 함을 의미


1.3-3 표현력


  * 표현력

- 언어가 복잡한 과정이나 구조를 표현하는 데 용이함을 의미


1.3-4 정확성


  * 정확성

- 프로그래밍 언어의 정확한 정의, 즉 포로그래밍 언어의 행위를 예측할 수 있는 정의를 기본적으로 필요로 하는 것을 의미


1.3-5 컴퓨터 독립성


  * 독립성

- 하드웨어나 운영체제 측면의 컴퓨터에 대한 독립적인 프로그래밍 언어 정의를 통하여 보장될 수 있는 것을 의미


1.3-6 안전성


  * 안정성(security)

- 프로그래밍 오류를 줄이고 오류를 쉽게 발견하기 위한 것

- 프로그래밍 언어의 자료형, 형  검사, 변수선언 등


1.3-7 확장성

  

  * 확장성

- 프로그래머에게 언어의 특징을 더 추가할 수 있도록 하자는 것


1.3-8 부분성


  * 부분성

- 프로그래머가 언어에 대한 적은 지식과 언어구조에 대한 일부의 이해만 있어도 효과적으로 프로그램을 작성할 수 있도록 해야 하는 것을 의미

반응형
Comments