제2, 3 장: 프로그래밍언어...

60
9 ) 2 , 3 8 : F 8 ) , ( - A 6 6 L - ) 9 8 1 - C 2 1 l 8 ? 1 ı : $ 4 F @ (F B = 9 " . ( ) F . · E + (@...r)

Transcript of 제2, 3 장: 프로그래밍언어...

Page 1: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2, 3 장 : 프로그래밍 언어발전사 및 설계 원칙

상지대학교 컴퓨터정보공학부

고 광 만

([email protected])

Page 2: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 2

프로그래밍 개념 학습 이유표현 능력 향상

생각 -> 표현 -> 전달

특정 프로그래밍 언어

제어구조, 자료구조, 추상화 등을 제약

응용 분야에 적합한 언어 선택 능력 향상새로운 프로젝트에 적합한 언어 사용

적합한 도구

새로운 언어에 대한 적응(학습) 능력 향상

Page 3: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 3

프로그래밍 언어의 구현 중요성 이해프로그래밍 언어 설계(Design).

프로그래밍 언어 구현(Implementation).

새로운 프로그래밍 언어 설계 능력 향상

전반적인 전자계산 분야의 이해 능력 향상

Page 4: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 4

프로그래밍 영역과학 응용 분야

간단한 데이터 구조, 부동소수점의 산술 연산

복잡한 제어 구조(반복, 선택 위주)

효율성 중시

Assembly, FORTRAN(1957), ALGOL 60

사무 응용 분야보고서(reporting) 기능 요구

데이터에 대한 정밀한 표현 및 저장 능력 요구

COBOL(1960), spread sheet, database

Page 5: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 5

인공지능 분야수치 데이터 처리 -> 기호 데이터 처리

배열 -> 연결리스트(노드)

LISP(1959), Prolog(1970s), scheme

논리(Logical) 프로그래밍 언어

Page 6: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 6

시스템 프로그래밍 분야시스템 소프트웨어란 ?

운영체제와 컴퓨터 시스템에 속한 모든 프로그래밍을 지원하는 도구

실행 효율성 강조

저급 수준의 기능 제공

PL/S(IBM), BLISS(DEC), Extended ALGOL, C(UNIX)

Page 7: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 7

스크립트 언어(Script Language)명령어 리스트를 하나의 실행 파일로 작성

명령어의 작은 집합 + 부가 기능 추가

종류

shell, ksh, awk, tcl, perl(shell+awk), 4GL

최근의 스크립트 언어

World Wide Web

Common Gate Interface; CGI

Java Script, …

Page 8: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 8

언어 평가 기준판독성(readability)

전반적인 단순성

직교성

제어문

테이터 타입과 구조

작성력(writability)단순성과 직교성

추상화

표현력

신뢰성(reliability)신뢰성

예외처리

별칭

판독성과 작성력

비용(cost)유지보수

Page 9: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 9

판독성판독성이란 ?

프로그램을 쉽게 읽고 이해할 수 있는 능력

소프트웨어 개발 변화1970년대 이전 : 코드 작성에 관심

1970년대 이후 : 소프트웨어 생명 주기 개념 도입

생산성 향상 및 유지보수 개선

프로그래밍 언어 판독성의 중요성 강조

Page 10: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 10

전반적인 단순성(Overall simplicity)너무 많은 언어의 기본 특성

언어의 부분적인 기능(요소)만 사용

판독성 문제 발생

기본적인 요소의 지나친 다중성(multiplicity)

특정 연산을 한 가지 이상의 방법으로 수행count = count + 1 ; count += 1 ;

count ++ ; ++count ;

연산자 중복(operator overloading)

한 연산자가 하나 이상의 의미를 가짐

지니친 단순성의 피해

Page 11: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 11

직교성직교성(orthogonality) 이란 ?

직각 또는 완전히 독립적인 방향

언어의 구성자들이 각각의 의미를 가진 채 조합

예 : 기본 자료형과 타입 연산자의 조합- 기본 자료형 : 정수, 실수, 문자, …- 타입 연산자 : 배열, 포인터

언어를 읽기 쉽고 배우기 쉽게 만듬.

단순성과 밀접한 관련

Page 12: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 12

제어문1970년대, 구조화 프로그래밍

제한된 제어문의 보완

GOTO 문의 무분별한 사용

프로그램의 판독성 감소

GOTO 문 사용 제한

다양한 제어문 등장GOTO문의 실효성 감소

구조화된 프로그래밍 기법

Page 13: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 13

작성력정의 및 특성

프로그램 구현시 프로그래밍 언어를 쉽게 사용할 수 있는 척도

판독성과 밀접한 관련

언어를 특정 응용 분야에 적합하도록 설계

COBOL복잡한 문서 형식을 갖는 재무 보고서 작성에 용이

Page 14: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 14

단순성과 직교성적은 기본구조 + 일관된 규칙(직교성)

추상화(abstration)복잡한 세부 내용 및 구조 은닉(hiding)

복잡한 데이터 구조 및 연산을 단순화하여 편리하게 사용할 수 있도록 하는 기능

최근 고급 프로그래밍 언어 설계시 중요 고려사항

추상화 기능을 자연스럽게 구현(표현)

프로세스 추상화, 데이터 추상화

표현력(expressivity)

Page 15: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 15

신뢰성자료형 검사(type checking)

컴파일 시간 및 실행 시간에 프로그램에 대한 자료형오류 검사

피연산자 사이의 호환성

부프로그램의 매개변수 전달시 자료형 일치

예외처리(exception handling)프로그램의 실행시간 오류를 탐지하고 처리

Ada, C++, Java

Page 16: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 16

별칭(alising)동일 기억 장소에 대해 하나 이상의 접근 방법이 존재

EQIVALENCE(FORTRAN)

pointer(PASCAL)

union & inter(C)

판독성과 작성력

Page 17: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 17

비용(cost)비용 결정 요소

프로그래머 훈련 및 교육 비용: 단순성 & 직교성

소프트웨어 생성(프로그램 개발) : 작성력

컴파일 비용

실행

컴파일러 비용

빈약한 신뢰성

유지보수 :신뢰성

Page 18: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 18

언어 설계에 영향컴퓨터 구조

폰 노이만 구조 = 프로그램 내장 방식

명령형 언어(Imperative language)

비 폰 노이만 구조 = 병렬 컴퓨터

함수 언어(Functional language)

프로그래밍 방법론구조화 프로그래밍

하향식 소프트웨어 설계(Top-down design)

데이터 지향 소프트웨어 설계 -> 추상화

객체지향 프로그래밍

Page 19: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 19

컴퓨터 구조폰 노이만(von Neumann) 컴퓨터

데이터와 프로그램을 메모리에 동시 저장

메모리와 CPU사이 파이프 설정

명령형 언어의 특징

변수 : 기억 장소(공간, 셀)

배정문 : CPU와 기억 장소가 데이터 이동

반복문 : 빠른 수행

재귀 함수(recursive function)의 사용은 회의적

Page 20: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 20

프로그래밍 방법론구조화 프로그래밍, 1970년 초반

소프트웨어 생산성 증가 및 개발 비용 증가

하향식 소프트웨어 설계 Or 단계별 세분화

데이터 지향 소프트웨어 설계추상화 데이터 타입, SIMULA67

객체지향 소프트웨어 설계

캡슐화, 정보 은닉, 상속, 동적 바인딩

Smalltalk67(80), Ada95, C++, Java, …병행 프로그래밍, 동시성(Concurrency)

Ada 언어의 Task, Java 언어의 쓰레드, …

Page 21: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 21

언어의 분류

명령형언어

객체지향언어

함수언어

논리 언어

병행 언어

Page 22: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 22

언어 설계 절충언어 설계의 상충 요소

타협하는 공학적 기술

상충 요소신뢰성 VS. 비용

Ada와 C 언어의 배열 첨자 범위 계산

판독성 VS. 간결성

APL 배열 연산자

유연성 VS. 안전성

PASCAL - 가변 레코드

C - Union

Page 23: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 23

프로그래밍 언어 구현 방법프로그래밍 언어의 구현

작성된 프로그램을 실제 컴퓨터에서 수행할 수 있도록변환(번역)하는데 필요한 모든 자원을 제공.

구현 방법가장 공통적인 기본 연산

하드웨어에서 직접 구현

마이크로 명령어

고급 언어로 작성된 프로그램

실제 기계에서 수행을 위한 시스템 소프트웨어 요구

컴파일, 순수 해석(interpreter), 혼합형

Page 24: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 24

컴파일러(Compiler)

고급 언어로 쓰여진 프로그램을 어떤 특정한 컴퓨터에

서 직접 수행 가능한 형태의 프로그램으로 번역해 주는

시스템 프로그램.

어휘분석

구문분석

의미분석

중간코드생성

코드최적화

목적코드생성

토큰 구문트리 중간코드

의미분석트리

최적화된중간코드

Page 25: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 25

해석(Interpretation)인터프리터

원시 프로그램을 입력으로 받아 목적 언어 또는 프로그

램으로 변환하지 않고 직접 실행해서 결과를 출력해 주

는 시스템 프로그램.

소프트웨어 모의실험(simulation)

특정 언어를 위한 가상 기계(Virtual Machine) 지원

장단점

번역시간 효율성, 실행시간 비효율성

메모리 사용의 비효율성

순수 해석이 용이, 복잡한 계산에는 비효율성

HTML 인터프리터, Bytecode 인터프리터(Java)

Page 26: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 26

혼합형 구현 시스템혼합형 구현 시스템

컴파일러와 인터프리터의 절충

전단부(입력언어->중간코드) : 컴파일 방식

후단부(중간코드 -> 실행결과) : 인터프리터 방식

자바 언어 시스템, JDK컴파일러(javac) : *.java -> *.class

인터프리터(java) : *.class -> 실행 결과

Page 27: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 27

프로그래밍 환경통합 프로그래밍 개발 환경

Integreated Development Environment; IDE

프로그램 개발에 필요한 컴파일러, 편집기, 디버거, 파일 시스템 등이 하나의 통합된 환경에서 제공

그래픽 유저 인터페이스

강력한 프로그래밍 개발 환경소프트웨어 생산성 향상

소프트웨어 품질 향상

Java Development Kit; JDK

System Development Kit; SDK

Page 28: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 28

고급 프로그래밍 언어 계보

Page 29: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 29

의사 코드(Pseudo Code)

기계 코드를 사용하는 문제점 ?빈약한 판독성

빈약한 수정성

표현식 코딩이 지루하다.

컴퓨터 자체의 결점

인덱스 기능과 부동 소수점 수자가 없음.

Short code; 1949; BINAC; MauchlyUNIVAC I (1 워드 = 72 비트)

표현식은 좌에서 우로 코딩

인터프리터

Page 30: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 30

Speedcoding; 1954; IBM 701, Backus산술 및 수학 함수를 위한 의사 연산

부동 소수점 연산

조건 및 비조건 분기

배열 접근을 위한 자동 증가 레지스터

느림!

사용자는 단지 700 워드 공간만 사용

인터프리터

UNIVAC “컴파일링” 시스템;1951-53

의사 코드의 기계 코드로의 확장

Page 31: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 31

IBM704와 FORTRAN이전 시스템

부동소수점 연산 : 소프트웨어(모의실험) 처리

지나친 연산 시간 요구

IBM704부동 소수점 명령의 하드웨어적 처리

FORTRAN 출현에 결정적 역할

Page 32: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 32

Laning과 Zierler 시스템- 1953MIT Whirlwind computer에서 구현첫번째 ”대수" 컴파일러 시스템

첨자화된 변수, 함수 호출, 표현식 변환

다른 기계에 이식(port)되지 않았다.

FORTRAN I – 1957FORTRAN 0 - 1954 - 구현되지 않았음

개발 환경

컴퓨터는 크기가 작고 신뢰성이 없었다.

응용분야는 과학계산 분야로 한정.

프로그래밍 방법론과 도구가 미흡.

기계의 효율성이 매우 중요.

Page 33: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 33

FORTRAN I의 설계 영향동적 기억 장소가 필요하지 않음

좋은 배열 처리와 계수 루프가 필요함

스트링 처리, 10진 산술식, 강력한 입출력 장치가 없음(상업적 가치가 없다)

Page 34: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 34

FORTRAN 초기 버전이름은 6자까지 사용

사후 검사 계수 루프(DO)

형식화된 입출력

사용자-정의 부프로그램

3방향 선택문 (산술적 IF)

데이터 타입문이 없음

분리 컴파일이 안됨

400라인 이상의 프로그램은 704의 신뢰성 부족 때문에거의 올바르게 컴파일 되지 않았음

널리 사용

Page 35: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 35

FORTRAN II – 1958

독립 컴파일

Fortran I의 오류 수정

FORTRAN IV - 1960-62명시적 타입 선언문

논리 선택문

부프로그램이 매개 변수로 사용

1966의 ANSI 표준

Page 36: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 36

FORTRAN 77 – 1978문자 스트링 처리

논리 루프 제어문

IF-THEN-ELSE 문

FORTRAN 90 – 1990모듈 작성(추가) 및 배열 연산을 함수 내장

동적 배열(ALLOCATABLE 사용)

포인터

재귀 호출

CASE 문

매개변수 타입 검사

Page 37: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 37

함수 프로그래밍 : LISP리스트 처리 언어

MIT에서 McCarthy에 의해 설계

인공지능 연구에서 주로 사용

리스트로 데이터를 처리(배열보다)

기호 계산(숫자 보다)

두 가지 데이터 타입: 원자와 리스트

구문 : 람다 계산식에 기반

함수 프로그래밍을 개척함

변수나 배정문이 없음

재귀와 조건식을 통해 제어

인공지능 분야에서 주도적 언어

COMMON LISP과 Scheme LISP 파생

ML, Miranda, Haskell은 관련 언어

Page 38: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 38

ALGOL 60ALGOL(1958 – 1958) 개발 배경

FORTRAN 은 거의 IBM 70x에 의존적

많은 언어들이 모두 특정 기계에 의존적

이식성 결여, 기계 의존적

알고리즘을 서술하는 범용 언어가 존재하지 않음

초기 설계언어의 구문을 수학적 기호로 표현, 판독성 강조

계산 과정(알고리즘)을 위한 언어

소스 프로그램을 기계적으로 기계어로 번역

Page 39: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 39

ALGOL 58 FORTRAN 언어의 후손, 일반화

기계 종속성 탈피

특징

타입의 개념이 형식화

이름 길이의 제한이 없음

배열의 차수는 무한(다차원 배열)

첨자는 대괄호를 사용했다.

복합문 (begin ... end)

문장 구분자로 세미콜론 사용

배정 연산자는 :=

If문은 else-if(내포된 if 문장)

Page 40: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 40

ALGOL 60 – 1960

ALGOL 58을 파리에서 회의을 통해 수정함

새로운 특징

블록 구조(지역 영역)

두 가지 매개변수 전달 방법

재귀적 부프로그램

스택-동적 배열

여전히 i/o와 스트링 처리가 제공되지 않음

Page 41: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 41

ALGOL60의 성공20년 이상 알고리즘을 기술하는 표준

후속 명령형 언어들은 Algol 58 또는 60에 기반

첫번째 기계-독립적 언어

문법의 형식(BNF)이 정의된 첫번째 언어

ALGOL60의 실패i/o와 문자 집합 부재 => 프로그램의 이식성 결여

지나친 유연성 --구현하기가 어려움

FORTRAN의 정착(확고한 기반)

형식 문법 서술에 대한 회의(인식 부족)

IBM의 지원 부족

Page 42: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 42

COBOLCOBOL(1960) 개발 환경

FLOW-MATIC에 기반

이름은 하이폰을 포함하여 12자까지 사용

산술 연산자를 위한 영어 이름

데이터와 코드는 완전히 별개

첫번째 설계 회의 - 1959년 5월단순한 영어처럼 사용

덜 강력하더라도 사용하기 쉬워야 함

컴퓨터 사용자 기반을 확대

현 컴파일러의 문제에 의해서 편중되어서는 안됨

설계 회원, 컴퓨터 제조사와 DoD 부서 출신

Page 43: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 43

기여한점고급언어에서 첫번째 매크로 사용(DEFINE 문장)

계층적인 데이터 구조(레코드)

중첩된 선택문

긴 이름(하이폰을 포함해서 30글자까지)

데이터 부(DATA DIVISION)을 사용

평가DoD에 의해 요구된 첫 번째 언어

DoD가 없었다면 실패(전폭적 지원)

사무 응용 분야에서 가장 널리 사용

Page 44: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 44

BASICBASIC(1964)

Kemeny & Kurtz에 의해 설계

설계 목표

비과학 전공 학생들에게 사용하기 쉬운 언어

즐겁고 친숙한 언어

빠른 작업 시간 제공

자유롭고 개인적인 접근을 허용

사용자 시간을 컴퓨터 시간보다 더 중요하게 생각해야 한다.

QuickBASIC, Visual BASIC, … 에 파생

Page 45: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 45

PL/1PL/1(1965)

IBM과 SHARE에 의해 설계

1964의 컴퓨터 상황(IBM의 관점)과학 계산

IBM 1620과 7090 컴퓨터

FORTRAN

SHARE 사용자 그룹

사무 응용 계산

IBM 1401, 7080 컴퓨터

COBOL

GUIDE 사용자 그룹

Page 46: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 46

1963년의 상황과학 사용자

정교한 i/o를 필요

사무 응용 사용자

부동 소수점과 배열을 필요(MIS)

비용 감소 요구

명백한 해결책

두 가지 종류의 응용을 할 수 있는 새로운 컴퓨터 및언어 제작

Page 47: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 47

PL/I 기여:

사용자-수준 동시성

예외 처리

재귀적 프로시저

포인터 데이터 타입

배열 일부 참조 기능

평가

새로운 기능이 빈약하게 설계 되었음

지나치게 크고 복잡함

실제적으로 과학과 사무 분야에 사용

Page 48: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 48

APL과 SNOBOL초기 동적 언어

동적 타입과 동적 기억 장소 할당

APL(A Programming Language) 1962

하드웨어 명세 언어로 설계

IBM에서 Kenneth E. Iverson이 설계

고도의 표현력(스칼라와 다양한 차원을 위한 많은연산자)

프로그램이 매우 읽기 어려움

SNOBOL(1964)

문자열 조작 언어.

문자열 패턴 매칭을 위한 강력한 연산자

Page 49: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 49

SIMULA 67SIMULA 67(1967)

시스템 모의 실험을 위해서 설계

Norway에서 Nygaard와 Dahl에 의해 설계

ALGOL 60과 SIMULA I에 기반

특징

코루틴(부프로그램의 한 종류)

클래스 구조 표현

데이터 추상화의 기초

지역 데이터와 함수를 포함하는 구조

Page 50: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 50

ALGOL 68ALGOL 68(1968)

ALGOL 60의 후속 번전 + 기능 추가

직교성 개념에 기초한 설계

특징

사용자-정의 데이터 구조

참조 타입

동적 배열 (flex 배열이라 불림)

평가ALGOL 60보다 덜 사용되었다

Pascal, C, Ada에 영향

Page 51: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 51

PASCALPascal(1971)

설계의 단순성 강조

ALGOL 68의 개선 또는 새로운 시도

N. Wirth에 의해 설계

교육 구조 프로그래밍을 위해 설계

응용 분야에 필수적인 요소들을 지원하지 못함

분리 컴파일 불가능

단순성, 표현력 우수

신뢰성(안전성)

Page 52: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 52

C 언어C 언어(1972)

시스템 프로그래밍을 위해 설계

Bell연구소의 Dennis Richie에 의해서 설계

B에서 유래되지만 ALGOL 68에 의해서도 영향

CPL -> BCPL -> B -> C

강력한 연산자 집합

빈약한 타입 검사

UNIX를 통하여 퍼짐

Page 53: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 53

ALGOL 언어의 후손 언어CLU(1970년대 중반, MIT)

데이터 추상화를 안전하게 지원한 첫 번째 언어

혁신적인 예외 처리

Modula-2(1970년대 중반Niklaus Wirth에 의해 설계

Pascal에 모듈과 시스템 프로그래밍을 위한 저급 특징을 추가

Page 54: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 54

Modula-3 (1980년대 후반, Digital & Olivetti)Modula-2에 클래스, 예외 처리, 쓰레기 수집, 동시성을 추가

Oberon (1980년대 후반Niklaus Wirth에 의해 설계

Modula-2에 OOP를 위한 지원을 추가

많은 Modula-2 특징 제거

Delphi (Borland)혼합 언어

Pascal에 OOP를 지원하는 특징 추가

C++보다 우아하고 안전

C++보다 덜 복잡

Page 55: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 55

PrologProlog(1972)

논리 기반 프로그래밍 언어

Comerauer과 Roussel에 의해 개발

형식 논리에 기반

비절차적

주어진 질의의 진위 여부를 추론하기 위해 추론과정을사용하는 데이터베이스 시스템.

Page 56: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 56

AdaAda(1983, 1970년대 중반에 시작)

수백명을 포함, 거대한 자금, 8년의 기간에 걸친 막대한설계 노력

특징패키지 - 데이터 추상화를 지원

정교한 예외 처리

포괄적 프로그램 단위

태스크 모델을 통한 동시성

Page 57: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 57

평가

경쟁적인 설계

당시 알려진 소프트웨어 엔지니어링과 언어 설계 기술총망라

유용한 컴파일러는 언어 설계 부재(5년후에 컴파일러출현)

Ada 95

타입 유도를 통하여 OOP를 지원

공유 데이터를 위한 보다 나은 제어 메커니즘

유연한 라이브러리

Page 58: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 58

SmalltalkSmalltalk(1972-1980)

Xerox PARC연구소의 Alan Kay에 의해 설계

Adele Goldberg에 의해 개발

특징

객체지향 언어의 첫번째 완전한 구현

(데이터 추상화, 상속,동적 타입 바인딩, …그래픽 사용자 인터페이스(GUI) 개척

Page 59: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 59

C++C++(1985)

Bell 연구소의 B. J. Stroustrup에 의해 개발

C와 SIMULA 67에서 유래

SIMULA 67 + C언어

예외 처리 기능

OOP와 함께 대중적으로 빠른 속도로 인기 상승.

ANSI 표준이 1997년 11월에 승인

Eiffel - OOP을 지원하는 관련 언어Bertrand Meyer에 의해 설계,1992

다른 언어로부터 직접적으로 파생되지 않았다.

C++보다 작고 단순하지만 대부분의 기능 지원.

Page 60: 제2, 3 장: 프로그래밍언어 발전사및설계원칙compiler.sangji.ac.kr/lecture/plt/2006_2/PLT_ch02_OLD.pdf · 제2,3 장프로그래밍언어발전사및설계원칙 15

제 2,3 장 프로그래밍 언어 발전사 및 설계 원칙 60

JavaJava (1995)

1990년대 초 Sun사에서 개발, James Gosling

C++에 기반

매우 단순화

OOP를 지원

포인터를 갖지 않고 참조 지원

애플릿에 대한 지원과 동시성을 포함

플랫폼 독립성

가상 기계(Virtual Machine) 환경