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

Slides:



Advertisements
Similar presentations
Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
Advertisements

0 CHAPTER 0 C언어 들어가기 전. 1 1 What is the Programming Language? Ghost in the Shell, 1995.
인공지능 소개 부산대학교 인공지능연구실. 인공 + 지능 인공지능이란 ? 2.
Scientists who made Computers 컴퓨터를 만든 과학자들. 1 언어 (Language) 학자 2 알고리즘 (Algorithm) 학자 3 인공지능 (Artificial Intelligence) 학자 contents 차례 뉴욕 시티의 헤이든 플라네타리움.
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
제 4 장 변수, 영역, 수명 변수 바인딩 영역 기억장소 할당과 수명 변수와 그 환경 변수 초기화 상수와 변수.
8장 프로그래밍 언어 8.1 프로그램이란? 8.2 프로그램 언어의 역사 8.3 프로그램 설계 절차
Chapter 2 정보시스템 아키텍처 (IS Architecture)
1. 컴파일러 개론 1-1. Compiler 정의 1-2. Language Processing System
Scientists who made Computers
제 3장 프로그래밍 언어 설계 3.1 설계 기준의 역사적 변천 3.2 효율성 3.3 일반성, 직교성, 획일성
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
알기 쉽게 해설한 Java 8th edition
제 7 장 문장 구조화 제어문 지정문 조건문 반복문 GOTO 문 비결정적문.
제4부 전문가시스템 (Expert Systems)
컴퓨터 소프트웨어.
Operating Systems Overview
프로그래밍 언어론 2004년 가을학기 창 병 모 숙명여대 컴퓨터과학과.
Internet Computing KUT Youn-Hee Han
12. 데이터베이스 설계.
바인딩, 메모리 관리 SANGJI University Kwangman Ko
Programming Languages 프로그래밍 언어론 2nd edition Tucker and Noonan
소프트웨어 공학 (Software Engineering)
프로그래밍언어론 2nd edition Tucker and Noonan
출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
프로그램 개발과 언어 Chapter 05 컴퓨터의 이해
Data Modeling Database 활용을 위한 기초 이론 Database의 개요 Data Modeling
강의 내용 및 방법 접근방법 시험 수업은 75분(14:30-15:45), 혹시 부족하면 보강
장. 문법 구조(Syntax) 컴퓨터공학과 권기태 프로그래밍언어론.
제 1 장 C 언어의 개요 Google 공동 창업자, 래리 페이지와 세르게이 브린.
Visual C++ Programming
Tel : Office : 2공학관 408호 오토마타 및 형식언어 김 현 성 Tel : Office : 2공학관 408호
프로그래밍 서울대학교 통계학과 2009년 2학기 컴퓨터의 개념 및 실습 (
멀티미디어시스템 멀티미디어 정보화 사회 IT응용시스템공학과 김 형 진 교수.
강의 내용 및 방법 접근방법 시험 수업은 75분(14:30-15:45), 혹시 부족하면 보강
Power Java 제1장 자바 소개.
제 1장 시스템 소프트웨어의 개요.
제1장 시스템 소프트웨어의 개요 컴퓨터시스템 및 하드웨어 구성 컴퓨터의 구성과 기능 시스템프로그램의 개요
Chapter 1 Welcome Aboard.
Lecture 01: Compiler Overview
Chapter 2 – 언어의 변천 Outline 2.1 디지털 컴퓨터 이전의 언어
컴퓨터 시스템 개관 시스템 프로그래밍 - Lecture #1 신라대학교 컴퓨터공학과 시스템 프로그래밍.
6장 데이터 타입(2) 순천향대학교 컴퓨터공학부 하 상 호.
강원대학교 공과대학 제어계측공학과 2010년도 제2학기
소프트웨어 공학 (Software Engineering)
Introduction to Programming Language
컴 파 일 러 Compilers.
6장 데이터 타입(3) 순천향대학교 컴퓨터공학부 하 상 호.
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
프로그래밍언어론 2nd edition Tucker and Noonan
제 1 장. 자료구조와 알고리즘.
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
Chapter 4 변수 및 바인딩.
Chapter 02. 소프트웨어와 자료구조.
4. 어휘 분석(Lexical analysis)
Signature, Strong Typing
Signature, Strong Typing
1장 기본적인 사항 순천향대학교 컴퓨터공학부 하 상 호.
제6장 소프트웨어와 정보시스템 김진수
Signature, Strong Typing
Name Title Company Name
언어 언어 사람 사람 사람들간의 의사 소통을 위한 수단
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
강의교안 이용 안내 *이 책에 딸린 강의자료는 교수님의 효율적인 수업진행을 돕기 위해 만들어졌습니다.
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
제02장 컴퓨터 개요.
Programming Language Technology Trends
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
Presentation transcript:

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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 역사

Copyright © 2006 The McGraw-Hill Companies, Inc.

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

Copyright © 2006 The McGraw-Hill Companies, Inc.

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

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

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

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

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

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

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

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

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)

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)

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

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)

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)

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)

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

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