2017-02-27 2장. 프로그래밍 언어의 이해 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어.

Slides:



Advertisements
Similar presentations
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Advertisements

프로그래밍언어론 TA 윤들녁. 소개 윤들녁 연락처 : 공대 7 호관 4 층 401 호 데이터베이스 연구실 실습 후 날짜 _ 학번.zip 으로.
Introduction to Programming Languages What is Programming Language?
제 5 장 구문 정의  프로그래밍 언어의 기본 문자 집합  Alphabet 문자 (A-Z) 26 개 + 아라비아 숫자 (0 - 9) 10 개  예 ) Fortran : 기본 문자 집합 + 13 개의 특수문자 (=+ - * / ( ),. $ ‘ : 공백 ) Algol60.
천안천일고등학교 Copyright © by Ryu Bin All rights reserved 프로그래밍 실무.
9. 중간언어 9-1. 소개 9-2. Polish표기법 주소 코드 9-4. 트리 구조 코드
컴퓨터와 인터넷.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
제 3장 프로그래밍 언어 설계 3.1 설계 기준의 역사적 변천 3.2 효율성 3.3 일반성, 직교성, 획일성
최윤정 Java 프로그래밍 클래스 상속 최윤정
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
Entity Relationship Diagram
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
제 4장 프로그래밍 언어의 구문과 구현 기법 4.1 언어 구문 4.2 프로그래밍 언어 구현 기법.
Chapter 1 – 프로그래밍 언어 소개 Outline 1.1 프로그래밍 언어란 무엇인가
C 언어 강의 Windows, Unix 중심으로.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
제 9 장 구조체와 공용체.
2/3장 역사 및 언어 설계 원리.
컴퓨터 프로그래밍 기초 [Final] 기말고사
C 언어 1 1주차 C언어 시작하기 - 1차시 C 언어 특징 및 프로젝트 생성 Programming Language.
Chapter 4 – 프로그래밍 언어의 구문과 구현 기법
1장 기본적인 사항(3) 순천향대학교 컴퓨터공학과 하상호.
시스템집적반도체 설계 검증 환경과 기법 Ch 7.
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
디지털시스템설계 과목 담당교수 : 원 충 상 한국교통대학교 컴퓨터공학과
컴퓨터과학 전공탐색 배상원.
23장. 구조체와 사용자 정의 자료형 2.
1장 기본적인 사항(3) 순천향대학교 컴퓨터공학과 하상호.
Method & library.
프로그래밍 개요
Chap 6.Assembler 유건우.
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
27장. 모듈화 프로그래밍.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
UNIX Unbounded A Beginning Approach
CHAPTER 04. 프로그래밍 언어 인간과 컴퓨터의 대화_진화하는 소통. 진화하는 컴퓨터
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
프로그래밍 언어론 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
제 9장 트랜스레이터.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
컴퓨터 시스템 하드웨어 컴퓨터 시스템 소프트웨어 C P U Control Unit 입 력 장 치 출 력 장 치 ALU
자바 5.0 프로그래밍.
LabVIEW WiznTec 주임 박명대 1.
Part 1 개요 Chapter 1 : 컴퓨터와 프로그램 그리고 자바 Chapter 2 : 자바의 환경
메모리 타입 분석을 통한 안전하고 효율적인 메모리 재사용
6.4 타입 검사 (Type Checking).
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
알고리즘 알고리즘이란 무엇인가?.
9. 중간언어 9-1. 소개 9-2. Polish표기법 주소 코드 9-4. 트리 구조 코드
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
3과목 운영체제 강사 이 민 욱.
1장 기본적인 사항(2) 순천향대학교 컴퓨터공학부 하 상 호.
공학도를 위한 C언어 프로그래밍실습1 -통합개발환경 사용법-
발표자 : 이지연 Programming Systems Lab.
Numerical Analysis Programming using NRs
프로그래밍 언어 학습을 위한 가상실습환경 창원대학교 이수현.
.Net FrameWork for Web2.0 한석수
왜 ‘프로그래밍’을 ‘비이공계 학생’이 알아야 하는가?
Chapter 1 – 프로그래밍 언어 소개 Outline 1.1 프로그래밍 언어란 무엇인가
제 4 장 Record.
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
1장. C Language Synopsis.
6 객체.
Presentation transcript:

2017-02-27 2장. 프로그래밍 언어의 이해 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

프로그래밍 언어론 소개 의사 소통하는 방식(언어) 생각하는 방법(사고) 프로그래밍 방법 컴퓨터에 대한 생각 프로그래밍 언어 2017-02-27 프로그래밍 언어론 소개 의사 소통하는 방식(언어) 생각하는 방법(사고) 프로그래밍 방법 컴퓨터에 대한 생각 프로그래밍 언어 프로그래밍 언어 컴퓨터에 대한 이해와 활용에 영향 컴퓨터 발전 컴퓨터에 대한 생각 프로그래밍 언어의 변화 요구 영향 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

프로그래밍 언어론 소개 (2) 프로그래밍 언어 변화 요구 프로그래밍 언어 설계 2017-02-27 프로그래밍 언어론 소개 (2) 프로그래밍 언어 변화 요구 프로그래밍 언어 설계 교과 내용 - 특정 언어 중심이 아니라 언어의 밑바탕을 이루는 일반적인 개념 중심 아직도 완벽하게 이해되지 못한 면 존재 기본 법칙이나 개념 : 전산학의 근본 이에 대한 지식 컴퓨터 의사 소통, 컴퓨터 이해 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

1.2 프로그래밍 언어론을 공부하는 이유 프로그래밍 언어 고찰 언어의 특징들에 대한 기본 개념, 2017-02-27 1.2 프로그래밍 언어론을 공부하는 이유 프로그래밍 언어 고찰 언어의 특징들에 대한 기본 개념, 이 기본 개념을 구현할 때 발생하는 문제점, 언어의 특징들의 설계에 대한 기본 개념의 접근 실제 언어의 도입 예 : 비교 분석 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

프로그래밍 언어를 고찰함으로써 얻는 장점 (1) 사용하고 있는 언어의 이해와 효율적인 알고리즘 작성 2017-02-27 프로그래밍 언어를 고찰함으로써 얻는 장점 (1) 사용하고 있는 언어의 이해와 효율적인 알고리즘 작성 언어의 일부 특성들은 거의 사용 안되며 이해를 못함 이러한 특성들이 어떻게 수행되고 구현되는지 표현 안됨 (지침서) 프로그래머 시행 착오 의존 사용 여부에 따라 효율성과 비효율성 제공 예 : recursion문의 이해와 사용, 동적 기억 장소 할당(PL/I 등), 병행성 효율적인 알고리즘 작성 가능 (2) 유용한 프로그래밍 구사 능력 언어 사고 다양한 언어 구조 알고리즘 작성시 어휘 구사력 증가 (적재적소 사용) 다양한 특성 구현 기술 실제 적용 능력 제공 (coroutine 등) 좋은 알고리즘 작성 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

프로그래밍 언어를 고찰함으로써 얻는 장점 (2) 2017-02-27 프로그래밍 언어를 고찰함으로써 얻는 장점 (2) (3) 프로그래밍 언어 선택 능력 언어에 대한 다양한 지식 문제해결에 적절한 언어 선택 예 : 문자처리에 유용한 Snobol 4, 상업용 Cobol, 시스템 내장 프로그램 Ada (4) 새로운 프로그래밍 언어의 학습 능력 여러 외국어 능통 학자 새 외국어 쉽게 배움 언어의 다양한 특성 이해 새 언어 쉽게 배움 새 언어 : 기존의 여러 특성들의 선택 조합 (5) 새로운 프로그래밍 언어 설계 능력 언어 설계 기존의 여러 특성들의 선택 조합 개발 시스템 사용 방법 제공 일종의 언어 제공 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

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

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

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

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

효율성 효율성의 기준에 따른 분류 목적 코드의 효율성 번역의 효율성 구현의 효율성 프로그래밍 효율성 컴퓨터공학과 권기태 2017-02-27 효율성 효율성의 기준에 따른 분류 목적 코드의 효율성 번역의 효율성 구현의 효율성 프로그래밍 효율성 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

효율성 (2) 목적 코드의 효율성 번역기의 효율적 실행 코드 생성 최적화 예 - Pascal에서 상수는 수식으로 표현되지 않음 2017-02-27 효율성 (2) 목적 코드의 효율성 번역기의 효율적 실행 코드 생성 최적화 예 - Pascal에서 상수는 수식으로 표현되지 않음 상수 식별자는 번역 과정에서 배정된 값으로 대체 번역의 효율성 적절한 크기의 번역기로 빠르게 번역할 수 있는 것 예 - 언어 번역의 단계 구성 문제 Pascal : 단일 패스, Modula-2 : 2 패스 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

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

일반성, 직교성, 획일성 일반성, 직교성, 획일성은 매우 밀접한 관계 일반성 (generality) 2017-02-27 일반성, 직교성, 획일성 일반성, 직교성, 획일성은 매우 밀접한 관계 일반성 (generality) 특별한 경우를 피하고, 밀접하게 관련있는 여러 개념들을 일반적인 하나의 개념으로 통합하여 얻는 성질 직교성 (orthogonality) 수학 개념에서 유래 “직각 또는 완전히 독립적인 방향” 언어의 구성자들이 각각의 의미를 가진 채 결합하는 성질 획일성 (uniformity) 유사한 것들은 유사하게 보이고 유사한 의미를 갖게 하며, 상이한 것들은 서로 다르게 보이고 서로 다르게 행동하여야 된다는 성질 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

일반성, 직교성, 획일성 (2) 일반성 (generality) 특별한 경우를 피하고, 밀접하게 관련있는 여러 개념들을 일반적인 2017-02-27 일반성, 직교성, 획일성 (2) 일반성 (generality) 특별한 경우를 피하고, 밀접하게 관련있는 여러 개념들을 일반적인 하나의 개념으로 통합하여 얻는 성질 일반성이 부족한 예 프로시져 - Pascal : 프로시져 선언과 매개 변수 허용, 프로시져형 변수 불허 - Modula-2 : 일반성 갖음 - Ada : 매겨 변수에 프로시져 사용 못함 배열 - Pascal : 가변 배열 불허 - C, Ada : 가변 배열 허용 - Modula-2, Fortran : 가변 배열 전달능력, 가변배열 선언 불허 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

일반성, 직교성, 획일성 (3) 일반성이 부족한 예 (계속) 동등 연산자 , 배정 연산자(=, :=) 2017-02-27 일반성, 직교성, 획일성 (3) 일반성이 부족한 예 (계속) 동등 연산자 , 배정 연산자(=, :=) - 대부분 언어 : 배열, 레코드에 적용 불허 - Ada : 배열, 레코드에 적용 허용 매개 변수 - Fortran : call by reference 만 허용 - Algol 68, C, Java : call by value, 객체에 대한 포인터를 값으로 전달 가능 일반성제공 - Ada : 일반성 제공 상수 - Fortran : 상수 이름 부재 - Pascal : 상수 표현에 수식 사용 불가 - Ada : 일반성 갖춘 상수 제공 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

일반성, 직교성, 획일성 (4) 일반성이 갖는 문제점 언어의 간결성 저하 언어의 판독성 저하 언어의 신뢰성 저하 2017-02-27 일반성, 직교성, 획일성 (4) 일반성이 갖는 문제점 언어의 간결성 저하 언어의 판독성 저하 언어의 신뢰성 저하 예 ) C 언어의 포인터 (일반성 제공) - 문제점 제기 Java는 포인터 불허 - 신뢰성과 판독성 문제 해결 Pascal에서는 aliasing과 위험을 줄이기 위해 포인터가 본질적으로 제한 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

일반성, 직교성, 획일성 (5) 직교성 (orthogonality) 수학 개념에서 유래 “직각 또는 완전히 독립적인 방향” 2017-02-27 일반성, 직교성, 획일성 (5) 직교성 (orthogonality) 수학 개념에서 유래 “직각 또는 완전히 독립적인 방향” 언어의 구성자들이 각각의 의미를 가진 채 결합하는 성질 (구성자간의 상호작용 또는 문맥의 사용이 예상 밖의 행위를 야기하지 않아야 함) 비직교성 - 문맥에 의존하는 제한, 비일반성 - 문맥과 관계없는 제한 직교성이 부족한 예 함수 반환 값 자료형 - Pascal : 스칼라형, 포인터형만 허용 - C : 배열형만 제외 - Ada : 완벽한 직교성 제공 (모든 자료형 허용) 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

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

일반성, 직교성, 획일성 (7) 획일성 (uniformity) 언어 구조들의 외모와 행동에서의 조화에 중점을 둠 2017-02-27 일반성, 직교성, 획일성 (7) 획일성 (uniformity) 언어 구조들의 외모와 행동에서의 조화에 중점을 둠 유사한 것들은 유사하게 보이고 유사한 의미를 갖게 하며, 상이한 것들은 서로 다르게 보이고 서로 다르게 행동하여야 된다는 성질 획일성이 부족한 비조화의 예 (Pascal) if문, while 문 : begin-end 구조 요구, repeat 문 : begin-end 구조 비 요구 가변 레코드에서 case 문, case 제어문 : 구문 상이 (Modula-2에서 해결) 함수 값의 반환 방법 - 배정문과 유사 (타 언어 return문 사용으로 해결) function f : boolean ; begin . . . f := true ; end; 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

* 비획일성은 특별한 문맥에서만 발생되고 구성자들간의 상호작용으로 볼 수 있으므로 2017-02-27 일반성, 직교성, 획일성 (8) 획일성이 부족한 비조화의 예 (Pascal) : 포인터 선언( 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 *) * 비획일성은 특별한 문맥에서만 발생되고 구성자들간의 상호작용으로 볼 수 있으므로 비직교성으로 간주될 수도 있다. 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

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

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

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

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

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

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

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

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

2.6 컴파일러 컴퓨터 : 프로그램을 저장하여 실행할 수 있는 알고리즘과 자료의 총괄 집합 2017-02-27 2.6 컴파일러 컴퓨터 : 프로그램을 저장하여 실행할 수 있는 알고리즘과 자료의 총괄 집합 Actual computer(hardware), software simulated computer 예) Cobol computer (가상 컴퓨터) 번역기 구성 번역된 프로그램 실행 hardware + software (virtual computer) 이론적으로 고급 언어를 기계언어로 하는 hardware 구성 가능 속도, 적응성, 비용 증가 저급 수준의 언어를 기계 언어로 하는 컴퓨터 제공 사용자 : 고급언어 프로그래밍 기계 : 저급 언어 프로그래밍 언어 구현 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

번역 기법 source (원시 언어) target translator (목적 언어) 컴퓨터공학과 권기태 2017-02-27 프로그래밍언어론프로그래밍 언어

- 저급 언어에는 준기계어 형태 또는 어셈블리 언어 ② 어셈블러(assembler) 2017-02-27 번역기의 종류 ① 컴파일러(compiler) - 원시 언어 :고급 언어 목적 언어 : 실제 기계 언어에 가까운 저급 언어 - 저급 언어에는 준기계어 형태 또는 어셈블리 언어 ② 어셈블러(assembler) - 원시 언어 : 어셈블리 언어 목적 언어 : 준기계어 형태 ③ 링키지 에디터(linkage editor) -여러 개의 프로그램(재배치 형태 기계어)을 묶음 로드 모듈 생성 -로드 모듈 : 어느 정도 실행 가능한 하나의 기계어 프로그램 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

-기계어 프로그램(로드 모듈)을 실제 실행 가능한 기계어로 번역해서 주기억 장치에 적재 2017-02-27 번역기 종류 (계속) ④ 로더(loader) -기계어 프로그램(로드 모듈)을 실제 실행 가능한 기계어로 번역해서 주기억 장치에 적재 ⑤ 프리프로세서(preprocessor) -원시 언어와 목적 언어가 모두 고급 언어인 번역기 -고급 언어 프로그램을 다른 고급 언어로 번역후, 출력된 고급 언어를 이미 구현된 방법으로 실행시킬 때 사용 -고급 언어에 대한 언어 확장하여 구현시 유용 (C++, concurrent C) 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

입력 자료 인터프리터 결과 실행 고급 언어 원시 프로그램 인터프리터 기법 2017-02-27 인터프리터 기법 고급 언어 기계를 다른 기계에서 소프트웨어로 시뮬레이션하는 방법 입력 자료 고급 언어 인터프리터 원시 실행 결과 프로그램 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

(linker, linkage editor) 2017-02-27 번역기 종류와 인터프리터 고급 언어 프로그램 컴파일러 기계어 , 준기계어 ( 목적 모듈 ) 어셈블러 링 커 (linker, linkage editor) 로드 로 더 (relocating loader) 실행 가능 Preprocessor 원시 입력 출력 소프트웨어 인터프리터 프로그램이 실행된 결과 출 력 하드웨어 프리프로세서 a) 번역기 b) 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

장점 - 실행 시간 효율성 제공 (한번 디코딩으로 반복 실행) 2017-02-27 번역 기법의 장단점 장점 - 실행 시간 효율성 제공 (한번 디코딩으로 반복 실행) 단점 - 번역된 프로그램이 큰 기억 장치 요구 (I/O routine 등) 인터프리터 기법의 장단점 번역 기법과 장단점이 반대임 사용자 적응성(flexibility) 제공 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

원시 프로그램 중간 코드 중간 번역 입력 자료 인터프리터 실행 결과 하이브리드 기법 2017-02-27 하이브리드 기법 프로그램을 실행시키기 쉬운 형태로 번역한 후, 그 번역된 형태의 프로그램을 디코드하여 시뮬레이션으로 실행 현 대부분의 인터프리터 언어가 이 방법을 따름 중간 형태 코드가 저급이면 번역 기법으로 간주되기도 함 원시 프로그램 중간 번역 중간 코드 입력 자료 인터프리터 실행 결과 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어

Fortran, Algol, PL/I, Pascal, Cobol, C, Ada 컴파일러 방법의 장점 2017-02-27 컴파일러 언어 Fortran, Algol, PL/I, Pascal, Cobol, C, Ada 컴파일러 방법의 장점 - 기계어로 번역된 것을 하드웨어 인터프리터가 디코드하여 실행 빠른 프로그램 실행(효율성) 인터프리터 언어 Lisp, Snobol 4, APL, Prolog 구현 방법 - 번역기가 중간언어를 생성 후, 중간언어로 작성된 프로그램을 소프트웨어 인터프리터로 실행 하이브리드 방법 - 컴파일러 방법보다 실행 시간이 비효율적이나 사용자 적응성 제공 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어