2/3장 역사 및 언어 설계 원리.

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

Introduction to Programming Languages What is Programming Language?
장. 프로그래밍 언어의 이해 컴퓨터공학과 권기태 프로그래밍언어론프로그래밍 언어.
컴퓨터와 인터넷.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
8장 프로그래밍 언어 8.1 프로그램이란? 8.2 프로그램 언어의 역사 8.3 프로그램 설계 절차
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
제14장 동적 메모리.
제 3장 프로그래밍 언어 설계 3.1 설계 기준의 역사적 변천 3.2 효율성 3.3 일반성, 직교성, 획일성
최윤정 Java 프로그래밍 클래스 상속 최윤정
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
C 프로그래밍 I.
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
Chapter 1 – 프로그래밍 언어 소개 Outline 1.1 프로그래밍 언어란 무엇인가
Introduction To Computers
C 언어 강의 Windows, Unix 중심으로.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
컴퓨터 프로그래밍 기초 [Final] 기말고사
Power Java 제2장 자바 개발 도구.
C 언어 1 1주차 C언어 시작하기 - 1차시 C 언어 특징 및 프로젝트 생성 Programming Language.
1장 기본적인 사항(3) 순천향대학교 컴퓨터공학과 하상호.
제9장 추상 데이터 타입 및 모듈 (Abstract Data Type & Module)
Chapter 2 – 언어의 변천 Outline 2.1 디지털 컴퓨터 이전의 언어
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
Lesson 9. 예외처리.
Java 기초 (Java JDK 설치 및 환경설정)
11 장 LAN 기본 개념과 Ethernet LAN
Visual Basic .NET 처음 사용하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
C++ Programming: Sample Programs
Error Detection and Correction
Wireless Java Programming
1장 기본적인 사항(3) 순천향대학교 컴퓨터공학과 하상호.
프로그래밍 언어론 2nd edition Tucker and Noonan
Chapter 2 – 언어의 변천 Outline 2.1 디지털 컴퓨터 이전의 언어
Method & library.
JA A V W. 03.
자바 5.0 프로그래밍.
프로그래밍 개요
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
UNIX Unbounded A Beginning Approach
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lesson 2. 기본 데이터형.
프로그래밍 언어론 - 소개 순천향대학교 컴퓨터공학과 하 상 호.
6장 데이터 타입(4) 순천향대학교 컴퓨터공학부 하 상 호.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
제1장 Unix란 무엇인가?.
웹디자인
자바 5.0 프로그래밍.
메모리 타입 분석을 통한 안전하고 효율적인 메모리 재사용
6.4 타입 검사 (Type Checking).
VHDL를 이용한 DES 설계 정보통신컴퓨터공학부 5조 김인옥, 백미숙
Computers: Tools for an Information Age Chapter 12
제 6 장 함수(functions).
Chapter 01 자바의 개요 자바는 최초 전자기기의 내장형 소프트웨어를 위해 개발되었으나, 최근 엔터프라이즈 응용에도 폭 넓게 활용됨 자바의 특징과 실행방법, 개발 환경 및 도구에 대해 소개.
Chapter 3 – 프로그래밍 언어 설계 Outline 3.1 설계 기준의 역사적 변천 3.2 효율성
1장 기본적인 사항(2) 순천향대학교 컴퓨터공학부 하 상 호.
발표자 : 이지연 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 프로그램 예제.
학부 컴퓨터공학부 교육과정 (학부) 2학년 4학년 3학년 1학년 1학기 2학기 IPP 자격과정 전공트랙
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
6장 데이터 타입(5) 순천향대학교 컴퓨터공학부 하 상 호.
1장. C Language Synopsis.
JAVA 프로그래밍 16장 JNLP.
Presentation transcript:

2/3장 역사 및 언어 설계 원리

차례 2.1 초기 역사 : 최초의 프로그래머 2.2 1950년대: 최초의 프로그래밍 언어 2.3 1960 년대 : 프로그래밍 언어의 폭발적 증가 2.4 1970 년대 : 단순성, 추상화 및 연구 2.5 1980 년대 : 새로운 방향의 모색 2.6 1990 년대 : 통합, 인터넷, 라이브러리 미래

2.1 초기 역사 : 최초의 프로그래머

초기의 프로그래밍 Early electronic computer Machine language programming Assembly language programming

2.2 1950 년대: 최초의 프로그래밍 언어

FORTRAN 개요 개요(Overview) 그 당시 컴퓨팅에서 가장 중요한 것은 ? John Backus at IBM 과학계산용 언어 새로운 기능 array, loop, if, 새로운 버전들 FORTRAN66, FORTRAN77, FORTRAN90, HPF 그 당시 컴퓨팅에서 가장 중요한 것은 ? FORTRAN의 주요 설계 목표는 무엇인가?

FORTRAN 설계 목표 실행 효율(Efficiency of execution) 왜 실행 효율인가? 효율적인 실행 코드 생성 왜 실행 효율인가? 실행 효율과 관련된 FORTRAN의 기능은 무엇인가?

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

ALGOL의 주요 설계 원리 작성용이성(Writability) 예 계산과정을 명확하고, 올바르고, 간결하고 빨리 기술할 수 있는 능력 예 block structure, and recursion

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

COBOL: 주요 설계원리 판독성(Readability) 예 계산과정을 쉽고 정확하게 이해할 수 있는 능력 영어 문장 스타일의 구문 구조

LISP: 개요 LISt Processor AI 응용을 위한 함수형 언어 MIT의 John McCarthy에 의해서 설계 일반적인 리스트 구조 함수

LISP: 주요 설계 원리 표현력(Expressiveness) 예 단점 복잡한 계산가정 및 구조를 쉽게 표현할 수 있는 능력 자기호출(recursion) 단점 표현력은 단순성과 상충될 수 있다.

Dream of more general and universal languages 2.3 1960년대 : 프로그래밍 언어의 폭발적 증가 Dream of more general and universal languages

왜 이런 유행이 있었을까?

PL/I : 개요 IBM PL/I 프로젝트 컴파일러 언어 FORTRAN, COBOL, Algol60의 모든 좋은 기능을 통합하자 ! 병행성(concurrency) 및 예외처리(exception handling) 컴파일러 작성이 어려웠다 느리고, 크고, 신뢰성이 떨어졌다. 언어 배우기 어렵다 사용하는데 오류를 범하기 쉽다. 언어 기능들 사이에 예상치 못한 상호작용으로 인하여

Algol-68 : 개요 Algol60 개선 보다 표현력있고 일반적인 언어 완전히 직교적인(orthogonal) 언어

직교성 원리(Orthogonality Principle) 구문구조가 상황에 따라 의미가 달라지면 안 된다. 문맥 의존적인 제약은 직교성을 위반한 것이다.

직교성 원리 동등비교 연산자의 일반성 부족 C의 매개변수 전달 C/C++에서 반환 직교성 부족으로 이해할 수 있다. 배열을 제외한 모든 타입은 값 전달(pass by value) 배열은 참조 전달(pass by reference) C/C++에서 반환 배열을 제외한 모든 데이터 타입의 값은 함수로부터 반환될 수 있다. Ada와 대부분의 함수형 언어에서 이러한 제약은 없어졌다.

Simula-67: 개요 시뮬레이션을 위해 설계됨 객체 지향 언어 복잡도 제어(Complexity control) 객체 클래스 상속 복잡도 제어(Complexity control) 프로그래밍과 언어에 복잡도 증가 추상화 메커니즘을 이용하여 프로그래밍의 복잡도를 제어

2.4 설계 원리: 규칙성

규칙성(Regularity) 언어가 제공하는 기능들을 어떻게 통합할 것인가? 왜 통합에 있어서 보다 규칙성이 있다면 좋을 것이다. 왜 사용에 있어서 별난 제약이 적고 구문구조 사이의 이상한 상호작용이 적고 언어의 기능성에 있어서 놀라운 경우가 적을 것이다. Regular rules, without exceptions, are easier to learn, use, describe and implement

규칙성의 종류 일반성(Generality) 직교성(Orthogonality) 일관성(Uniformity)

일반성 원리(Generality Principle) 구문구조 사용에 있어서 특별한 경우를 피한다. 밀접하게 연관된 구문구조를 하나의 보다 일반적인 것으로 통합한다.

일반성 원리 예1 동등비교 연산자 “==” C 언어에서 스칼라 타입 혹은 포인터 타입에 대해서 적용 가능하다. 일반성 원리 예1 동등비교 연산자 “==” C 언어에서 스칼라 타입 혹은 포인터 타입에 대해서 적용 가능하다. 배열 및 레코드에 적용 불가 이 제약은 Ada와 C++에서 부분적으로 해결됨

일반성 원리 예: 프로시저의 일반성 Pascal C 언어 함수형 언어 프로시저 혹은 함수는 중첩가능 매개변수로 전달 가능 프로시저 변수는 없다 C 언어 함수를 중첩할 수 없다 함수를 변수에 저장할 수 있고 매개변수로 전달할 수 있고 반환할 수 있다. 함수형 언어 함수가 완전히 일반적으로 사용될 수 있다. Function is a first-class value in functional language

일반적일수록 좋을까?

직교성 원리 (Orthogonality Principle) 구문구조가 상황에 따라 의미가 달라지면 안 된다. 문맥 의존적인 제약은 직교성을 위반한 것이다.

직교성 원리 동등비교 연산자의 일반성 부족 C의 매개변수 전달 C/C++에서 반환 직교성 부족으로 이해할 수 있다. 배열을 제외한 모든 타입은 값 전달(pass by value) 배열은 참조 전달(pass by reference) C/C++에서 반환 배열을 제외한 모든 데이터 타입의 값은 함수로부터 반환될 수 있다. Ada와 대부분의 함수형 언어에서 이러한 제약은 없어졌다.

일관성(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;

2.5 1970 년대: 단순성, 추상화 및 연구

Pascal 개요 N. Wirth에 의해 설계됨 Algol-68의 단순화된 버전 작고, 간단하고, 효율적인 블록 구조 언어 (small, simple, efficient structured language)

C 언어 설계 목표 Pascal과 다른 형태의 단순성을 추구함 전체적인 설계의 일관성 벨 연구소의 Dennis Ritchie에 의해 Algol의 발전된 형태로 설계됨 UNIX 구현을 위한 언어로 설계됨 Pascal과 다른 형태의 단순성을 추구함 타입 및 실행시간 시스템의 복잡도를 줄임 하부 기계(하드웨어)에 대한 접근 전체적인 설계의 일관성

Pascal과 C의 설계원리 : 단순성(Simplicity) 단순성은 쉬운 것 같지만 실제로는 매우 어렵다. 일반성, 일관성, 직교성은 단순성과 배치된다. Simplicity Principle by A. Einstein Everything should be made as simple as possible, but not simpler

70년대 중반/후반 실험적 연구 CLU by MIT Euclid by Univ. of Toronto 데이터 추상화, 병행성, 프로그램 검증 등을 위한 실험적 언어 개발 CLU by MIT 추상화 메커니즘 프로그램 개발의 생산성 Euclid by Univ. of Toronto 추상화 자료형 프로그램 검증 Mesa by Xerox PARC 모듈, 예외처리, 병행성

2.6 1980 년대: 새로운 방향 및 객체-지향

시대적 배경 프로그램의 복잡도 증가 추상화 메커니즘의 필요성 증가

Ada : 개요 미국 국방성 J. Ichbiah 팀에 의해 개발 추상화 자료형(Abstract data type) Package 병행 프로그래밍(Concurrent programming) Task 예외 처리(Exception handling) 질문 Is Ada another PL/I ?

객체-지향 프로그래밍 언어 객체-지향 프로그래밍에 대한 관심 증가 Smalltalk-80 프로그램 복잡도 증가에 대한 해결 방안 Smalltalk-80 Alan Kay at XEROX PARC 순수 객체-지향 프로그래밍 언어

C++ : 개요 벨 연구소의 B. Stroustrup에 의해 개발됨 객체-지향을 포함한 C 언어의 확장 복잡도 제어(Complexity Control) 증가하는 프로그래밍의 복잡성(S/W 위기) 통합 추상화(unit abstraction) 클래스

새로운 방향 함수형 언어(functional language) 논리 언어(logic language) Scheme, ML, Miranda, Haskell 논리 언어(logic language) Prolog, Concurrent Prolog, ... Constraint Logic Programming(CLP)

2.7 1990 년대: 인터넷 환경

인터넷 프로그래밍 Java 설계원리 1995년 Sun 사 James Gosling에 의해서 개발됨 프로그래밍 언어 역사에서 가장 놀라운 사건 웹 및 인터넷을 위한 객체-지향 언어 모바일 코드가 웹 브라우저 상에서 실행 가능 설계원리 비교적 단순하고, 깨끗하게 설계됨 이식성(portability)이 좋은 언어 JVM의 바이트코드로 컴파일되어 해석기로 실행된다 강력한 라이브러리 윈도우, 네트워크, 병행성

인터넷 프로그래밍 인터넷 환경을 위한 Script 언어 라이브러리의 중요성 증가 통합 사용 클라이언트 서버 AWK, Tcl, HTML, JavaScript 서버 Perl, JSP, ASP 라이브러리의 중요성 증가 통합 사용 유틸리티, 라이브러리, 운영체제 명령어

2.8 미래