Download presentation
Presentation is loading. Please wait.
1
2/3장 역사 및 언어 설계 원리
2
차례 2.1 초기 역사 : 최초의 프로그래머 2.2 1950년대: 최초의 프로그래밍 언어
년대 : 프로그래밍 언어의 폭발적 증가 년대 : 단순성, 추상화 및 연구 년대 : 새로운 방향의 모색 년대 : 통합, 인터넷, 라이브러리 미래
3
2.1 초기 역사 : 최초의 프로그래머
4
초기의 프로그래밍 Early electronic computer Machine language programming
Assembly language programming
5
년대: 최초의 프로그래밍 언어
6
FORTRAN 개요 개요(Overview) 그 당시 컴퓨팅에서 가장 중요한 것은 ?
John Backus at IBM 과학계산용 언어 새로운 기능 array, loop, if, 새로운 버전들 FORTRAN66, FORTRAN77, FORTRAN90, HPF 그 당시 컴퓨팅에서 가장 중요한 것은 ? FORTRAN의 주요 설계 목표는 무엇인가?
7
FORTRAN 설계 목표 실행 효율(Efficiency of execution) 왜 실행 효율인가?
효율적인 실행 코드 생성 왜 실행 효율인가? 실행 효율과 관련된 FORTRAN의 기능은 무엇인가?
8
Algol60 (ALGOrithmic Language)
알고리즘 기술을 위한 일반적(general)이고 표현력 좋은(expressive) 언어 현재 명령형 언어의 기초 Pascal, C, Modula-2, and Ada 새로운 개념 free-format, structured statements, begin-end blocks, type declarations for variables Recursion call-by-value parameters
9
ALGOL의 주요 설계 원리 작성용이성(Writability) 예
계산과정을 명확하고, 올바르고, 간결하고 빨리 기술할 수 있는 능력 예 block structure, and recursion
10
COBOL: 개요 COBOL(Common Business-Oriented Language)
미국 국방성(U.S. DoD) Grace Hopper 팀에 의해서 개발됨 사무용 언어(business-oriented language) 새로운 기능 구조체(record structure) 자유스런 출력 포맷(versatile output formatting) separation of data structures form the execution section
11
COBOL: 주요 설계원리 판독성(Readability) 예 계산과정을 쉽고 정확하게 이해할 수 있는 능력
영어 문장 스타일의 구문 구조
12
LISP: 개요 LISt Processor AI 응용을 위한 함수형 언어 MIT의 John McCarthy에 의해서 설계
일반적인 리스트 구조 함수
13
LISP: 주요 설계 원리 표현력(Expressiveness) 예 단점 복잡한 계산가정 및 구조를 쉽게 표현할 수 있는 능력
자기호출(recursion) 단점 표현력은 단순성과 상충될 수 있다.
14
Dream of more general and universal languages
년대 : 프로그래밍 언어의 폭발적 증가 Dream of more general and universal languages
15
왜 이런 유행이 있었을까?
16
PL/I : 개요 IBM PL/I 프로젝트 컴파일러 언어
FORTRAN, COBOL, Algol60의 모든 좋은 기능을 통합하자 ! 병행성(concurrency) 및 예외처리(exception handling) 컴파일러 작성이 어려웠다 느리고, 크고, 신뢰성이 떨어졌다. 언어 배우기 어렵다 사용하는데 오류를 범하기 쉽다. 언어 기능들 사이에 예상치 못한 상호작용으로 인하여
17
Algol-68 : 개요 Algol60 개선 보다 표현력있고 일반적인 언어 완전히 직교적인(orthogonal) 언어
18
직교성 원리(Orthogonality Principle)
구문구조가 상황에 따라 의미가 달라지면 안 된다. 문맥 의존적인 제약은 직교성을 위반한 것이다.
19
직교성 원리 동등비교 연산자의 일반성 부족 C의 매개변수 전달 C/C++에서 반환 직교성 부족으로 이해할 수 있다.
배열을 제외한 모든 타입은 값 전달(pass by value) 배열은 참조 전달(pass by reference) C/C++에서 반환 배열을 제외한 모든 데이터 타입의 값은 함수로부터 반환될 수 있다. Ada와 대부분의 함수형 언어에서 이러한 제약은 없어졌다.
20
Simula-67: 개요 시뮬레이션을 위해 설계됨 객체 지향 언어 복잡도 제어(Complexity control) 객체 클래스
상속 복잡도 제어(Complexity control) 프로그래밍과 언어에 복잡도 증가 추상화 메커니즘을 이용하여 프로그래밍의 복잡도를 제어
21
2.4 설계 원리: 규칙성
22
규칙성(Regularity) 언어가 제공하는 기능들을 어떻게 통합할 것인가? 왜
통합에 있어서 보다 규칙성이 있다면 좋을 것이다. 왜 사용에 있어서 별난 제약이 적고 구문구조 사이의 이상한 상호작용이 적고 언어의 기능성에 있어서 놀라운 경우가 적을 것이다. Regular rules, without exceptions, are easier to learn, use, describe and implement
23
규칙성의 종류 일반성(Generality) 직교성(Orthogonality) 일관성(Uniformity)
24
일반성 원리(Generality Principle)
구문구조 사용에 있어서 특별한 경우를 피한다. 밀접하게 연관된 구문구조를 하나의 보다 일반적인 것으로 통합한다.
25
일반성 원리 예1 동등비교 연산자 “==” C 언어에서 스칼라 타입 혹은 포인터 타입에 대해서 적용 가능하다.
일반성 원리 예1 동등비교 연산자 “==” C 언어에서 스칼라 타입 혹은 포인터 타입에 대해서 적용 가능하다. 배열 및 레코드에 적용 불가 이 제약은 Ada와 C++에서 부분적으로 해결됨
26
일반성 원리 예: 프로시저의 일반성 Pascal C 언어 함수형 언어 프로시저 혹은 함수는 중첩가능 매개변수로 전달 가능
프로시저 변수는 없다 C 언어 함수를 중첩할 수 없다 함수를 변수에 저장할 수 있고 매개변수로 전달할 수 있고 반환할 수 있다. 함수형 언어 함수가 완전히 일반적으로 사용될 수 있다. Function is a first-class value in functional language
27
일반적일수록 좋을까?
28
직교성 원리 (Orthogonality Principle)
구문구조가 상황에 따라 의미가 달라지면 안 된다. 문맥 의존적인 제약은 직교성을 위반한 것이다.
29
직교성 원리 동등비교 연산자의 일반성 부족 C의 매개변수 전달 C/C++에서 반환 직교성 부족으로 이해할 수 있다.
배열을 제외한 모든 타입은 값 전달(pass by value) 배열은 참조 전달(pass by reference) C/C++에서 반환 배열을 제외한 모든 데이터 타입의 값은 함수로부터 반환될 수 있다. Ada와 대부분의 함수형 언어에서 이러한 제약은 없어졌다.
30
일관성(Uniformity) Things which look similar should be similar and things which look different should be different C++ 세미콜론 Class A { … } ; // 세미콜론 필요함 Int f() { … } // 세미콜론 불필요 Pascal 반환문과 배정문 function f: boolean; begin … f := true; end;
31
년대: 단순성, 추상화 및 연구
32
Pascal 개요 N. Wirth에 의해 설계됨 Algol-68의 단순화된 버전 작고, 간단하고, 효율적인 블록 구조 언어
(small, simple, efficient structured language)
33
C 언어 설계 목표 Pascal과 다른 형태의 단순성을 추구함 전체적인 설계의 일관성
벨 연구소의 Dennis Ritchie에 의해 Algol의 발전된 형태로 설계됨 UNIX 구현을 위한 언어로 설계됨 Pascal과 다른 형태의 단순성을 추구함 타입 및 실행시간 시스템의 복잡도를 줄임 하부 기계(하드웨어)에 대한 접근 전체적인 설계의 일관성
34
Pascal과 C의 설계원리 : 단순성(Simplicity)
단순성은 쉬운 것 같지만 실제로는 매우 어렵다. 일반성, 일관성, 직교성은 단순성과 배치된다. Simplicity Principle by A. Einstein Everything should be made as simple as possible, but not simpler
35
70년대 중반/후반 실험적 연구 CLU by MIT Euclid by Univ. of Toronto
데이터 추상화, 병행성, 프로그램 검증 등을 위한 실험적 언어 개발 CLU by MIT 추상화 메커니즘 프로그램 개발의 생산성 Euclid by Univ. of Toronto 추상화 자료형 프로그램 검증 Mesa by Xerox PARC 모듈, 예외처리, 병행성
36
년대: 새로운 방향 및 객체-지향
37
시대적 배경 프로그램의 복잡도 증가 추상화 메커니즘의 필요성 증가
38
Ada : 개요 미국 국방성 J. Ichbiah 팀에 의해 개발 추상화 자료형(Abstract data type)
Package 병행 프로그래밍(Concurrent programming) Task 예외 처리(Exception handling) 질문 Is Ada another PL/I ?
39
객체-지향 프로그래밍 언어 객체-지향 프로그래밍에 대한 관심 증가 Smalltalk-80
프로그램 복잡도 증가에 대한 해결 방안 Smalltalk-80 Alan Kay at XEROX PARC 순수 객체-지향 프로그래밍 언어
40
C++ : 개요 벨 연구소의 B. Stroustrup에 의해 개발됨 객체-지향을 포함한 C 언어의 확장
복잡도 제어(Complexity Control) 증가하는 프로그래밍의 복잡성(S/W 위기) 통합 추상화(unit abstraction) 클래스
41
새로운 방향 함수형 언어(functional language) 논리 언어(logic language)
Scheme, ML, Miranda, Haskell 논리 언어(logic language) Prolog, Concurrent Prolog, ... Constraint Logic Programming(CLP)
42
년대: 인터넷 환경
43
인터넷 프로그래밍 Java 설계원리 1995년 Sun 사 James Gosling에 의해서 개발됨
프로그래밍 언어 역사에서 가장 놀라운 사건 웹 및 인터넷을 위한 객체-지향 언어 모바일 코드가 웹 브라우저 상에서 실행 가능 설계원리 비교적 단순하고, 깨끗하게 설계됨 이식성(portability)이 좋은 언어 JVM의 바이트코드로 컴파일되어 해석기로 실행된다 강력한 라이브러리 윈도우, 네트워크, 병행성
44
인터넷 프로그래밍 인터넷 환경을 위한 Script 언어 라이브러리의 중요성 증가 통합 사용 클라이언트 서버
AWK, Tcl, HTML, JavaScript 서버 Perl, JSP, ASP 라이브러리의 중요성 증가 통합 사용 유틸리티, 라이브러리, 운영체제 명령어
45
2.8 미래
Similar presentations