Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성

Slides:



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

Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
- 1 - IT COOKBOOK 컴퓨터 기술 IT COOKBOOK Chapter 01. 서론.
운영 체제의 일반 발표자 : 백승재 황영종. 1. 운영체제의 의의 전자 계산기에서 사용자와 하드웨어와의 직접적으로 대화하는 대신 운영 체제라는 시스템 프로그램을 통하여 하드웨어를 다루는 것이다. 한정된 컴퓨터 자원을 효율적으로 관리, 운영함으로써 사용자에게 편의성을 제공하는.
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
프로젝트 구성. 프로젝트 델파이 프로그램의 기본 단위 즉, 델파이로 만드는 프로그램을 구성하 는 모든 파일들의 집합 구성파일 확인 –View 메뉴 -> Project Manager 메뉴 – 프로젝트 파일 (DPR 확장자 ) – 폼 관련 파일 (FRM 확장자 ) – 소스.
Chapter 7 서브프로그램. Introduction 서브 프로그램의 명시 형식 인자전달 방법 ▫ Call by value ▫ Call by value result ▫ Call by reference ▫ Call by name 구현 방법 2.
장. 프로그래밍 언어의 이해 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어.
제 4 장 변수, 영역, 수명 변수 바인딩 영역 기억장소 할당과 수명 변수와 그 환경 변수 초기화 상수와 변수.
8장 프로그래밍 언어 8.1 프로그램이란? 8.2 프로그램 언어의 역사 8.3 프로그램 설계 절차
9장 부프로그램(2) 순천향대학교 컴퓨터공학부 하 상 호.
제 3장 프로그래밍 언어 설계 3.1 설계 기준의 역사적 변천 3.2 효율성 3.3 일반성, 직교성, 획일성
Chapter 13 – 병렬 프로그래밍과 병렬 처리
제 7 장 문장 구조화 제어문 지정문 조건문 반복문 GOTO 문 비결정적문.
C 언어 강의 Windows, Unix 중심으로.
Chapter 10 – 추상 자료형 Outline 10.1 소개 10.2 Ada의 추상 자료형 10.3 C++의 추상 자료형
데이터 구조 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
컴퓨터 소프트웨어.
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 1 강원대학교 컴퓨터과학전공 문양세.
제 2장 언어의 변천 2.1 디지털 컴퓨터 이전의 언어 년대 : 최초의 프로그래밍 언어
제 6 장 데이터 타입 6.1 데이터 타입 및 타입 정보 6.2 타입의 용도 6.3 타입 구성자 6.4 사례 연구
제7장 제어구조 I – 식과 문장.
제 5 장 자 료 형 기본 데이터 형 포인터 형 배열 데이터 형 스트링 집합 형 레코드 공용체 형 형 시스템.
프로그래밍언어론 2nd edition Tucker and Noonan
Part 08 함수 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
4장 병행 프로세스 병행성의 원리를 이해한다 병행 프로세스 수행과 관련된 상호 배 제 해결방안을 알아본다
제4장 블록 및 유효범위 Reading Chap. 5 © 숙대 창병모.
Chapter 6 – 변수, 바인딩, 식 및 제어문 Outline 6.1 변수 6.2 바인딩 6.3 선언 6.4 배정문
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
프로그램 개발과 언어 Chapter 05 컴퓨터의 이해
Chapter 9 – 부 프로그램 Outline 9.1 개요 9.2 매개변수 평가와 전달기법 9.3 형식 매개변수 명세
장. 문법 구조(Syntax) 컴퓨터공학과 권기태 프로그래밍언어론.
제 1장 시스템 소프트웨어의 개요.
4 병행 프로세스와 상호배제.
제1장 시스템 소프트웨어의 개요 컴퓨터시스템 및 하드웨어 구성 컴퓨터의 구성과 기능 시스템프로그램의 개요
Lecture 01: Compiler Overview
Chapter 2 – 언어의 변천 Outline 2.1 디지털 컴퓨터 이전의 언어
5장 이름, 바인딩, 영역(2) 순천향대학교 컴퓨터공학과 하상호.
제 10장 부 프로그램 10.1 개요 10.2 매개 변수 평가와 전달 기법 10.3 형식 매개 변수 명세
6장 데이터 타입(2) 순천향대학교 컴퓨터공학부 하 상 호.
프로그래밍 보고서 작성법 순천향대학교 컴퓨터공학과 하 상 호.
알고리즘(Algorithm)  알고리즘 개요 (효율, 분석, 차수) Part 년 봄학기
6장 데이터 타입(2) 순천향대학교 컴퓨터공학부 하 상 호.
2. 상호배제와 동기화 01 program versionone; // 첫 번째 버전
6장 데이터 타입(3) 순천향대학교 컴퓨터공학부 하 상 호.
프로그래밍언어론 2nd edition Tucker and Noonan
제 5장 변수, 바인딩, 식 및 제어문 5.1 변수 5.6 표현식 5.2 바인딩 5.7 조건문 5.3 선언 5.8 반복문
제 1 장. 자료구조와 알고리즘.
운영체제 발표자료 B반 최민웅.
Chapter 4 변수 및 바인딩.
소방시설 자동산정 프로그램.
Chapter 02. 소프트웨어와 자료구조.
9장 부프로그램(2) 순천향대학교 컴퓨터공학부 하 상 호.
Signature, Strong Typing
Signature, Strong Typing
1장 기본적인 사항 순천향대학교 컴퓨터공학부 하 상 호.
데이터 구조 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
Chapter 13 – 객체 지향 프로그래밍 Outline 13.1 소프트웨어의 재사용과 독립성
제6장 소프트웨어와 정보시스템 김진수
Signature, Strong Typing
언어 언어 사람 사람 사람들간의 의사 소통을 위한 수단
Part 02. 파워포인트 실무와 활용.
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
03. 병행 프로세스(Parallel Process)
4. 데이타베이스 시스템의 구성.
Report #4 (1) (due 4/4) 문제 #1 3개의 막대 A, B, C와 원판 n개를 전달받아 Hanoi 탑 문제를 해결하는데 필요한 원판의 이동 회수를 구하여 반환하는 hanoi_tower(n, A, B, C)를 작성하라. 여기서 원판 n은 막대 A에 쌓여 있고.
운영체제 학 번 : 이름 : 변현영.
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
Presentation transcript:

Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성 3.1 설계 기준의 역사적 변천 3.2 효율성 3.3 일반성, 직교성, 획일성 3.4 프로그래밍 언어의 기타 설계 원칙 3.5 문제점과 해결책들

3.1 설계 기준의 역사적 변천 주요 언어 성공 요인 (언어 자체보다 외적 요인) 주요 언어 설계 목적 Fortran – 컴퓨터 제조회사 후원 Cobol – 미 국방성 지원 Lisp – 인공지능 분야에서 사용 Pascal – 교육용, 마이크로컴퓨터 표준언어 역할 PL/I – IBM의 적극 후원 C – UNIX 운영체제의 성공 Ada – 미국방성 지원 주요 언어 설계 목적 Fortran – 실행의 효율성 Cobol – 영어와 유사한 문법 구조로 프로그램 판독성 용이 Algol 60 – 블록 구조 제공으로 알고리즘 작성 용이 Pascal – 간단한 명령형 언어, 하향식 설계 증진

3.1 설계 기준의 역사적 변천 1950년대 1960년대 초기에는 실행의 효율성 중시 예) Fortran Cobol과 Algol 60의 등장으로 효율성보다 일반적인 원칙 중시 예) Algol 60 : 블록구조, 재귀적 용법으로 논리적으로 간결 명료한 알고리즘 표현 용이 Cobol : 프로그램 판독성 증가(영어 유사 문법 구조) 1960년대 복잡성 제어(complexity control) 필요성 인식 추상화 기법, 언어 규칙과 제한의 감소 필요성 예) Simula 67 : 강력한 추상화 기법 제공 Algol 68 : 일반성, 직교성 제공으로 언어의 복잡성 감소

3.1 설계 기준의 역사적 변천 1970년대 – 80년대 초 간결성(simplicity)과 추상화(abstraction)를 강조 예) Pascal, C, Euclid, Modula-2, Ada 언어 구성에 수학적 정의 도입 프로그램의 정확성 증명 기법을 갖춘 언어 제공 프로그램 신뢰성 증진 1980년대 언어에 논리 또는 수학 개념의 삽입 증진 논리를 프로그래밍 언어 자체에 포함 함수형 언어에 관심 예) ML, Miranda, Scheme 객체 지향 언어에 관심 증가 예) C++

프로그래밍 언어 설계 원칙 언어 설계의 기본 원칙 기타 설계 원칙 효율성 (efficiency) 일반성 (generality) 직교성 (orthogonality) 획일성 (uniformity) 기타 설계 원칙 - 간결성 (simplicity) - 안전성 (security) - 표현력 (expressiveness) - 기존 표기나 규칙과의 일관성 - 정확성 (preciseness) - 확장성 (extensibility) - 기계 독립성 (machine independence) - 제약성 (restrictability), 부분성 (subset)

3.2 효율성 효율성의 기준에 따른 분류 목적 코드의 효율성 번역의 효율성 구현의 효율성 프로그래밍 효율성

3.2 효율성 목적 코드의 효율성 번역의 효율성 번역기의 효율적 실행 코드 생성 최적화 번역기의 효율적 실행 코드 생성 최적화 예) Pascal에서 상수는 수식으로 표현되지 않음 상수 식별자는 번역 과정에서 배정된 값으로 대체 번역의 효율성 적절한 크기의 번역기로 빠르게 번역할 수 있는 것 예) 언어 번역의 단계 구성 문제 Pascal : 단일 패스, Modula-2 : 2 패스

3.2 효율성 구현성 프로그래밍 효율성 번역기의 효율적인 구현 문제 프로그램 작성의 단순성, 용이성 문제 예) 번역기 구현이 어렵거나 번역 수행 알고리즘이 충분히 이해되지 않아 언어가 성공하지 못한 경우(Algol 60) 프로그래밍 효율성 프로그램 작성의 단순성, 용이성 문제 언어의 표현성, 추상화 메커니즘과 관련 이상적인 언어 - Lisp, Prolog

3.3 일반성, 직교성, 획일성 일반성, 직교성, 획일성은 매우 밀접한 관계 일반성 직교성 획일성

3.3 일반성, 직교성, 획일성 일반성 일반성이 부족한 예 (1 of 2) 프로시저 배열 Pascal : 프로시저 선언과 매개 변수 허용, 프로시저형 변수 불허 Modula-2 : 일반성 갖음 Ada : 매개 변수에 프로시저 사용 못함 배열 Pascal : 가변 배열 불허 C, Ada : 가변 배열 허용 Modula-2, Fortran : 가변 배열 전달능력, 가변배열 선언 불허

3.3 일반성, 직교성, 획일성 일반성이 부족한 예 (2 of 2) 동등 연산자 , 배정 연산자(=, :=) 매개 변수 상수 대부분 언어 : 배열, 레코드에 적용 불허 Ada : 배열, 레코드에 적용 허용 매개 변수 Fortran : call by reference 만 허용 Algol 68, C, Java : call by value, 객체에 대한 포인터를 값으로 전달 가능 일반성제공 Ada : 일반성 제공 상수 Fortran : 상수 이름 부재 Pascal : 상수 표현에 수식 사용 불가 Ada : 일반성 갖춘 상수 제공

3.3 일반성, 직교성, 획일성 일반성이 갖는 문제점 언어의 간결성 저하 언어의 판독성 저하 언어의 신뢰성 저하 예) C 언어의 포인터 (일반성 제공) - 문제점 제기 Java는 포인터 불허 : 신뢰성과 판독성 문제 해결 Pascal에서는 이명(aliasing)과 위험을 줄이기 위해 포인터가 본질적으로 제한

3.3 일반성, 직교성, 획일성 직교성 직교성이 부족한 예 (1 of 2) 함수 반환 값 자료형 Pascal : 스칼라형, 포인터형만 허용 C : 배열형만 제외 Ada : 완벽한 직교성 제공 (모든 자료형 허용)

3.3 일반성, 직교성, 획일성 직교성이 부족한 예 (2 of 2) 화일 문자열 매개변수 전달 기법 Pascal : 화일형은 특별한 상태 취급 (화일을 프로시저 매개 변수로 전달 금지, 화일 변수는 배정 금지) 대부분 언어 : 화일을 라이브러리로 취급 (비직교성 탈피) 문자열 Modula-2 : 문자열 배정 (작은 문자열 더 큰 문자열) 크기가 다른 객체에 대한 유일한 배정 매개변수 전달 기법 C : 배열 - call by reference, 이외 모든 자료형 - call by value 방식 Ada : 모든 자료형 - call by value, result, value-result 허용(직교성 보장) Algol 68의 중요 설계 목표 - 직교성 보장

3.3 일반성, 직교성, 획일성 획일성 획일성이 부족한 비조화의 예 (1 of 2) if문, while 문 : begin-end 구조 요구, repeat 문 : begin-end 구조 비 요구 가변 레코드에서 case 문, case 제어문 : 구문 상이 (Modula-2에서 해결) 함수 값의 반환 방법 - 배정문과 유사 (타 언어 return문 사용으로 해결) 1 function f : boolean ; 2 begin 3 . . . 4 f := true ; 5 end;

3.3 일반성, 직교성, 획일성 획일성이 부족한 비조화의 예(Pascal) (2 of 2) : 포인터 선언( integer)과 포인터 값(x )에 공용 (Modula-2는 POINTER TO로 해결) 세미콜론(;) : Modula-2, Pascal에서 문장 구분자와 선언 종결자로 사용 (C 언어에서는 종결자로만 사용) 비획일성은 특별한 문맥에서만 발생되고 구성자들간의 상호작용으로 볼 수 있으므로 비직교성으로 간주될 수도 있다. procedure p ; (* terminator *) var x : integer ; (* separator *) y : real ; (* terminator *) begin x := 0 ; (* separator *) y := 1.0 end; (* terminator *)

3.4 프로그래밍 언어의 기타 설계 원칙 간결성 (simplicity) Pascal의 주된 설계 원칙은 간결성 직교성, 일반성, 획일성 : 간결성 보장 못함 예) Algol 68 구성자의 수가 적다고 언어가 간결한 것은 아님 예) Lisp, Prolog : 적은 수의 구성자를 가지나 복잡한 실행시간과 시스템에 의존적 과다한 단순성 - 언어 사용에 방해, 표현력이 부족, 많은 제한 발생

3.4 프로그래밍 언어의 기타 설계 원칙 표현력 (expressiveness) 정확성 (preciseness) 복잡한 과정이나 구조를 표현하는데 용이함을 의미 표현력은 강하나 단순하지 않은 언어 - Lisp, Prolog, Algol 68 표현력이 강하면서 단순한 언어 - C 언어 예) while ( * s++ == * t++) ; 정확성 (preciseness) 언어에 대한 정확한 정의 언어의 행위가 예측 가능한 정의의 존재 여부 정확한 언어 정의 언어의 신뢰도, 번역기의 신뢰도에 영향

3.4 프로그래밍 언어의 기타 설계 원칙 기계 독립성 (machine independence) 안전성 (security) 기계 독립적인 언어 정의를 통하여 보장 (호환성 제공) 기억 장소 할당과 기계 구조와 별개로 정의된 자료형 사용 안전성 (security) 프로그래밍 오류를 줄이고, 오류 발견 용이한 언어 목표 언어의 신뢰성과 정확성에 밀접한 관계 언어 설계 시 자료형, 형 검사, 변수 선언을 도입

3.4 프로그래밍 언어의 기타 설계 원칙 기존 표기나 규칙과의 일관성 확장성 (extensibility) 언어 설계 시 표준화된 특성과 개념을 갖도록 해야 함 Algol 68 - 표준화된 표기를 잘 따르지 않은 언어 예) type 대신 mode 사용 확장성 (extensibility) 사용자가 언어의 특성을 쉽게 부가하도록 허용하는 기법 확장성을 가진 언어의 예 - Lisp 명령형 언어는 함수형 언어보다 언어 확장이 어려움 추상화 개념(자료 추상화, 제어 추상화)은 확장성 지원

3.4 프로그래밍 언어의 기타 설계 원칙 제약성 (restrictability), 부분성 (subset) 일부의 언어 지식과 언어 구조만 가지고도 효과적인 프로그램 작성 가능 언어 제한성의 장점 프로그래머는 언어의 효과적인 사용을 위해 언어 전체를 배울 필요 없음 번역기 작성자가 언어 일부분 만을 선택하여 구현, 사용 가능 (부분언어 지원) 예 ) SP/1, SP/2 … SP/k : PL/I의 부분 언어들

3.5 문제점과 해결책들 성공적인 언어 설계를 위한 충고 (1 of 2) 신뢰성 효율적인 번역 프로그램의 신뢰성 위해 진단 컴파일러 또는 점검 컴파일러 사용 Cornell : PL/I diagnostic, C 언어 환경(debugger 포함) 효율적인 번역 초기 고급 언어 (Fortran, Cobol ...) : 분리 컴파일 제공 효율적 번역 가능, 오류 유발 Algol 68, Pascal(70년대 초반) : 신뢰성 강조 통합 컴파일러 Ada : 조화 (분리 컴파일의 장점 + 통합 컴파일의 장점) specification part, body part 제공으로 해결

3.5 문제점과 해결책들 성공적인 언어 설계를 위한 충고 (2 of 2) 코드 최적화 (optimization) 신뢰성 효율적인 목적 코드 컴파일링 비용 증가 반복 수행부 등 일부분만 최적화 효과 큼 실제 컴파일러 : 여러 최적화 단계 제공 신뢰성 언어 구문의 과다한 간결성과 생략은 프로그램 판독성을 저하 적절한 수준의 간결성은 프로그래머에게 좋은 훈련과 프로그램의 신뢰성을 증가 짧은 프로그램 신뢰성 증진 (APL, 4세대 언어)

3.5 문제점과 해결책들 C. A. R Hoare 의 성공적인 프로그래밍 언어 설계를 위한 충고 언어 설계 : (1) 언어의 특정한 특성(feature) 고안 (2) 새로운 언어 설계 (기존 특성들을 선택 조합) (1) 언어의 특정한 특성 고안 새 특성의 설계자는 한번에 한가지 특성에만 집중 잘 알려진 언어에 특성 구현 이미 존재하는 이 언어의 장점을 해치지 않고, 언어의 단점과 불완전성 해결, 완화하는 것을 확신 이 특성들이 어떻게 단순하고, 효율적으로 구현되는지 보여야 한다. 사용자 지침서 작성 많은 예제 프로그램들 작성 (다른 방법들과 비교 평가) (2) 새로운 언어 설계 기존의 많은 특성들 : 숙지, 선택, 판단력 구비 특성들 사이의 불일치 제거, 중첩부분 조정 능력 요구 새 언어의 영역, 목적, 범위, 복잡성, 확장성에 대한 명확한 개념 실제 구현과 사용자 지침서(초보자용, 고급용) 제공 새 언어 설계 작업은 단지 기존의 개념을 통합하는 것이다.

슬라이드 쇼가 끝났습니다.

용 어 정리

일반성 (generality) 특별한 경우를 피하고, 밀접하게 관련 있는 여러 개념들을 일반적인 하나의 개념으로 통합하여 얻는 성질

직교성 (orthogonality) 수학 개념에서 유래 “직각 또는 완전히 독립적인 방향” 언어의 구성자들이 각각의 의미를 가진 채 결합하는 성질 (구성자간의 상호작용 또는 문맥의 사용이 예상 밖의 행위를 야기하지 않아야 함) 비직교성 – 문맥에 의존하는 제한 비일반성 – 문맥과 관계없는 제한

획일성 (uniformity) 언어 구조들의 외모와 행동에서의 조화에 중점을 둠 유사한 것들은 유사하게 보이고 유사한 의미를 갖게 하며, 상이한 것들은 서로 다르게 보이고 서로 다르게 행동하여야 된다는 성질