Presentation is loading. Please wait.

Presentation is loading. Please wait.

Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 프로그래밍 언어론 2nd edition Tucker and Noonan 1 장 소 개 A good programming language is a.

Similar presentations


Presentation on theme: "Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 프로그래밍 언어론 2nd edition Tucker and Noonan 1 장 소 개 A good programming language is a."— Presentation transcript:

1 Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 프로그래밍 언어론 2nd edition Tucker and Noonan 1 장 소 개 A good programming language is a conceptual universe for thinking about programming. 좋은 프로그래밍 언어는 프로그램에 대하여 사고하는 개념적인 세계를 제공해준다. 앨런 펄리스 (Allen Perlis)

2 Copyright © 2006 The McGraw-Hill Companies, Inc. Why study concepts of programming languages? 1. 생각을 표현할 수 있는 능력이 향상된다. 2. 적합한 언어를 선택할 수 있는 능력이 향상된다. 3. 새로운 언어를 배울 수 있는 능력이 향상된다. 4. 구현의 중요성에 대해서 보다 많이 이해한다. 5. 새로운 언어를 설계할 수 있는 능력이 향상된다. 6. 전자계산 분야의 이해가 향상된다.

3 Copyright © 2006 The McGraw-Hill Companies, Inc. 목차 1.1 원리 1.2 패러다임 1.3 주요 개념 1.4 역사 1.5 언어의 설계에 대하여 1.6 컴파일러와 가상기계

4 Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어의 4 가지 구성 요소 : 구문구조 (Syntax) 이름 (Names) 타입 (Types) 의미구조 (Semantics) 프로그래밍 언어 : 언어 설계자는 이 구성요소를 모두 정의해야 함 프로그래머는 이 구성 요소에 모두 정통 (master) 해야 함 1.1 원리

5 Copyright © 2006 The McGraw-Hill Companies, Inc. 구문구조 (Syntax) 프로그래밍언어의 구문구조 : 문법적으로 올바른 프로그램에 대한 자세한 기술 구문구조를 공부할 때 생기는 궁금증 언어의 문법 (grammar) 은 무엇일까 ? 사용할 수 있는 기본 어휘 (vocabulary) 는 무엇일까 ? 구문 오류 (syntax error) 는 어떻게 발견하나 ?

6 Copyright © 2006 The McGraw-Hill Companies, Inc. 이름 (Names) 프로그램은 다양한 종류의 엔티티 (entities) 를 가지며, 이 엔티티는 이름 (name) 을 가진다. 변수, 타입, 함수, 매개변수, 클래스, 객체 등 엔티티에 부여된 이름은 프로그램이 실행되는 동안 다음에 묶여있다 (bound: 결속 ) 영역 Scope ( 유효범위 ) 가시성 Visibility 타입 Type 생명주기 Lifetime ( 수명 )

7 Copyright © 2006 The McGraw-Hill Companies, Inc. 타입 (Types) 타입은 값들과 그 값에 적용될 수 있는 연산들의 집합이다. 단순 타입 – 수 numbers, 문자 characters, 불 booleans, … 구조 타입 – 문자열 Strings, 리스트 lists, 트리 trees, 해시테이블 hash tables, … 타입시스템 type systems 이 제공해주는 이점 – 허용하는 연산을 결정 – 타입 오류 감지

8 Copyright © 2006 The McGraw-Hill Companies, Inc. 의미 구조 (Semantics) 프로그램의 의미 (meaning) 를 의미구조로 표현한다. 의미구조를 공부하면 다음과 같은 질문에 답할 수 있다. 프로그램 실행 중 특정 변수의 값은 어떻게 변하나 ? 각 문장은 어떤 뜻일까 ? 함수 호출을 하면 일어나는 현상을 설명해줄 수 있는 모델이 있을까 ? 실행 중에 객체는 어떻게 메모리에 할당될까 ?

9 Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 패러다임은 특정 장르의 프로그램과 언어에 깔려있는 문제 해결 사고의 패턴이다. 대표적인 4 가지 프로그래밍 패러다임 명령형 Imperative 객체지향형 Object-oriented 함수형 Functional 논리형 Logic ( 선언형 declarative ) 1.2 패러다임 (Paradigm)

10 Copyright © 2006 The McGraw-Hill Companies, Inc. 명령형 패러다임 전통적인 폰노이만 - 엑커르트 계산 모델을 따름 : 프로그램과 데이터가 메모리에 구별없이 저장됨 프로그램 = 명령문의 나열 상태 State = 프로그램 실행 시, 변수의 값 프로그램이 길어지면 프로시저 추상화 procedural abstraction 명령형 언어의 사례 : Cobol, Fortran, C, Ada, Perl, …

11 Copyright © 2006 The McGraw-Hill Companies, Inc. 폰노이만 - 엑커르트 모델 The von Neumann-Eckert Model

12 Copyright © 2006 The McGraw-Hill Companies, Inc. 객체지향 (OO) 패러다임 OO 프로그램은 상태를 변환시키는 메시지를 주고받으며 상호 교류하는 객체의 모임이다. OO 를 공부하면서 익히는 개념 메시지 전달 Sending Messages 상속 Inheritance 다형성 Polymorphism OO 언어의 사례 Smalltalk, Java, C++, C#, Python

13 Copyright © 2006 The McGraw-Hill Companies, Inc. 함수형 패러다임 함수형 프로그래밍은 계산 문제를 수학 함수의 집합으로 모델링한다. 입력 Input = 정의역 domain 출력 Output = 치역 range – 연속적인 함수 적용에 의해 결과를 생성 ( 함수 n ( 함수 n-1 ( … ( 함수 1 ( 데이터 ) ) … ))) – 부작용 (side-effect) 이 없어, 검증하기 용이 함수형 언어의 특징 함수 합성 Functional composition, 재귀 Recursion 함수형 언어의 사례 Lisp, Scheme, ML, Haskell, …

14 Copyright © 2006 The McGraw-Hill Companies, Inc. 논리형 패러다임 논리형 프로그래밍은 어떻게 문제를 풀 것인지를 고민하는 대신, 프로그램에서 얻어내야 하는 결과가 무엇인지를 선언하도록 문제를 모델링하여 프로그램을 작성한다. 논리형 프로그램을 공부하면서 관찰할 사항 프로그램을 문제에 대한 제한식의 집합으로 취급 프로그램은 문제의 가능한 모든 답을 만들어 냄 비결정적 nondeterministic 인 프로그램 작성 가능 논리형 프로그래밍 언어의 사례 Prolog

15 Copyright © 2006 The McGraw-Hill Companies, Inc. 이벤트 처리 Event handling – 예 : GUI, 홈 시큐리티 경보 시스템 동시 계산 Concurrency – 예 : 클라이언트 - 서버 프로그램 프로그램의 정확성 Correctness – 프로그램이 모든 가능한 상황에서 기획한 대로 작동하는지 어떻게 증명할 수 있을까 ? – 이게 왜 중요하지 ??? 1.3 주요 개념

16 Copyright © 2006 The McGraw-Hill Companies, Inc. 언제 어떻게 프로그래밍 언어가 진화되었나 ? 어떤 집단이 개발하고 사용했는가 ? 인공지능 Artificial Intelligence 컴퓨터과학 교육 Computer Science Education 과학과 공학 Science and Engineering 정보 시스템 Information Systems 시스템과 네트워크 Systems and Networks 월드 와이드 웹 World Wide Web 1.4 역사

17 Copyright © 2006 The McGraw-Hill Companies, Inc.

18 설계 고려사항 컴퓨터 구조 Computer architecture 기술적인 환경 Technical setting 표준 Standards 유물 시스템 legacy system 설계 결과와 목표 프로그래밍 언어는 어떻게 생겨나고 어떻게 하면 성공하는가 ? 이상적인 프로그래밍 언어가 되려면 어떤 주요 특징이 필요한가 ? 1.5 언어의 설계에 대하여

19 Copyright © 2006 The McGraw-Hill Companies, Inc.

20 어떻게 하면 성공적인 언어가 되는가 ? 주요 특징 단순성과 가독성 Simplicity and readability 묶기의 명확성 Clarity about binding 신뢰성 Reliability 지원성 Support 추상화 Abstraction 직교성 Orthogonality 구현의 효율성 Efficient implementation

21 Copyright © 2006 The McGraw-Hill Companies, Inc. 단순성과 가독성 명령문 (instructions) 개수의 소규모화 – 예 : Java vs Scheme 구문구조의 단순함 – 예 : C/C++/Java vs Python 장점 – 배우기 쉬움 Ease of learning – 프로그램 작성이 쉬움 Ease of programming

22 Copyright © 2006 The McGraw-Hill Companies, Inc. 언어에서 필요한 요소들은 언어의 특성이 정의될 때 묶인다 (bound). 묶기 binding 는 어떤 개체 (object) 와 그 개체의 성질 ( 속성 ) 을 결합 (association) 하는 것이다. – 예 : 개체 vs 속성 변수와 그 변수의 타입 변수와 그 변수의 값 – 조기 묶기 Early binding 는 프로그램 컴파일 시간에 일어남  오류탐지유리, cost↓ – 만기 묶기 Late binding 는 프로그램 실행 시간에 일어남.  유연성 ↑, 묶기의 명확성

23 Copyright © 2006 The McGraw-Hill Companies, Inc. 신뢰성 언어를 신뢰할 수 있는 충분조건 – 다른 플랫폼에서 실행해도 같은 결과가 나옴 예 : Fortran 초기 버전 – 타입오류를 모두 감지할 수 있음 예 : C vs Haskell – 의미 오류를 적절히 예외처리 할 수 있음 예 : C vs C++ – 메모리 누수 Memory leaks 를 방지할 수 있음 예 : C vs Java

24 Copyright © 2006 The McGraw-Hill Companies, Inc. 지원성 공개 소프트웨어로 쉽게 구하여 사용할 수 있는 컴파일러와 인터프리터가 존재 양질의 교재와 지침서 존재 활성화된 사용자 커뮤니티의 존재 통합개발환경 (IDE) 의 존재

25 Copyright © 2006 The McGraw-Hill Companies, Inc. 추상화 데이터 – 프로그래머 정의 타입 및 클래스 – 클래스 라이브러리 프로시저 – 프로그래머 정의 함수 – 표준 함수 라이브러리

26 Copyright © 2006 The McGraw-Hill Companies, Inc. 직교성 상호 독립된 소규모 기본 연산만으로 프로그램을 구축할 수 있는 언어를 직교적 orthogonal 이라고 한다. 필요한 예외적 규칙의 최소화 = 개념적으로 단순화 – 예 : 함수 인수의 타입을 제한함 ( 직교적 X: 함수정의가 인수로 전달될 수 없다 ) –C 언어에서 매개변수 전달 ( 직교성 ↓) 배열 -> 주소, 그외 -> 값전달 : 문맥에 의존하는 제한 효율성과 타협 Tradeoffs 의 여지 – 직교성이 좋아지면 효율성이 낮아질 수 있고, – 효율성이 좋아지면 직교성이 낮아질 수 있다.

27 Copyright © 2006 The McGraw-Hill Companies, Inc. 구현의 효율성 내장형 시스템 Embedded systems – 실시간 응답 속도 ( 예 : 네비게이션 ) – 초기 Ada 언어 구현의 실패 사례 웹 응용프로그램 – 사용자의 요구에 대한 응답 속도 ( 예 : 구글 검색 ) 전사적 데이터베이스 응용프로그램 – 효율적인 검색 및 수정 AI 응용프로그램 – 인간의 행동을 모델링

28 Copyright © 2006 The McGraw-Hill Companies, Inc. 언어설계의 상충 (Language Design Trade-offs) 1. 신뢰성 vs 실행비용 (Reliability vs cost of execution) 신뢰성   실행 비용  ( 배열의 첨자 범위 검사, Ada vs C) 2. 작성력 vs 가독성 (Writability vs readability) 작성력   가독성  (APL 의 배열 연산 ) 3. 유연성 vs 안전성 (Flexibility vs safety) 유연성   안정성  (variant record in Pascal)

29 Copyright © 2006 The McGraw-Hill Companies, Inc. 컴파일러 Compiler – 기계코드를 생성 실행기 ( 해석기 ) Interpreter – 가상 기계의 명령을 실행 컴파일하는 언어의 예 –Fortran, Cobol, C, C++ 실행기를 사용하는 언어의 예 –Scheme, Haskell, Python 컴파일러와 실행기를 모두 사용하는 경우 –The Java Virtual Machine (JVM) JIT(Just-in-Time) Compiler 1.6 컴파일러와 가상기계 (Virtual Machine)

30 Copyright © 2006 The McGraw-Hill Companies, Inc. 컴파일 실행 과정

31 Copyright © 2006 The McGraw-Hill Companies, Inc. position := initial + rate * 60 Lexical Analyzer id 1 := id 2 + id 3 * num 60 Syntax Analyzer S V E EE EE id 1 :=id 2 +id 3 *num 60 position… 1 initial… 2 rate… 3 4 Symbol Table S  V := E E  E + E | E * E E  id | num V  id 문 법문 법 컴파일 과정의 예 (1)

32 Copyright © 2006 The McGraw-Hill Companies, Inc. Semantic Analyzer S E E EE EE id 1 :=id 2 +id 3 *num 60 inttoreal Intermediate Code Generator temp1 := inttoreal(num 60 ) temp2 := id3 * temp1 temp3 := id2 + temp2 id1 := temp3 Code Optimizer temp1 := id3 * 60.0 id1 := id2 + temp2 컴파일 과정의 예 (2)

33 Copyright © 2006 The McGraw-Hill Companies, Inc. temp1 := id3 * 60.0 id1 := id2 + temp2 Code Generator MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 컴파일 과정의 예 (3)

34 Copyright © 2006 The McGraw-Hill Companies, Inc. 해석기 실행 과정

35 Copyright © 2006 The McGraw-Hill Companies, Inc. 토의 문제 1. 다익스트라 (E. Dijkstra) 의 다음 견해에 대한 토의 BASIC 을 먼저 습득한 학생들에게 프로그램을 잘 하도록 가르치는 것은 사실상 불가능하다. 잠재적인 프로그래머로서 재생성의 희망도 없이 정신적으로 파괴되었다. 2. 자신이 친숙한 언어에서 특별히 읽기가 힘들다고 생각되는 예제 문장을 하나 생각해 내보자. 예를 들면, C 언어에서 while (*p++ = *q++) 의 의미는 무엇일까 ? A[i++], x << 1, …


Download ppt "Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 프로그래밍 언어론 2nd edition Tucker and Noonan 1 장 소 개 A good programming language is a."

Similar presentations


Ads by Google