25
Chapter 3 언어 설계의 원칙들 역사와 설계의 지표들 효율성과 규칙성 다른 언어 설계의 원칙들 케이스 스터디: C++

원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

Cha

pte

r 3

언어설계의원칙들

역사와설계의지표들

효율성과규칙성

다른언어설계의원칙들

케이스스터디

: C++

Page 2: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

무엇이좋은언어인가

?

•언어의설계

–좋은언어가가지는바람직한특성은무엇인가

?

•언어가성공할지는예측하기어렵다

–Pa

scal은성공했으나

, Modul

a-2는실패

Progra

mm

ing L

angua

ges

2

–Pa

scal

, Modul

a-2

–Alg

ol6

0은성공했으나

, Alg

ol6

8는실패

–FO

RTRAN은성공했으나

, PL/

I는실패

•언어가성공하는이유는

?–실용성

: 사용의용이함

(ava

ilabili

ty), 가격

, 번역기의질

–킬러응용

: C는유닉스

, 자바는인터넷

, …–설계개념의일정함

(필요조건

)

Page 3: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

언어의중요한특성들

•설계의목표를명심해야함

•좋은프로그래밍언어가가지는중요한특성

은 –단순성

(Nik

laus

Wirth

)–언어구성요소

(lang

uage

cons

truc

ts) (C

. A. R

.

Progra

mm

ing L

angua

ges

3

–언어구성요소

(lang

uage

cons

truc

ts) (C

. A. R

. H

oare

)–멋진기능들의모음만은아님

(Bja

rne

Stro

ustrup

)→서로상충되는대답

… 즉

,애매한문제

•따라서이장에서는

설계원리를조망해보고

프로그래밍언어의좋은예와나쁜예를리뷰함

Page 4: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

Java는언제나

C보다쉬운가

?

•ht

tp://w

ww.b

orlan

dfo

rum

.com

/im

pboa

rd/

impboa

rd.d

ll?ac

tion=

read

&db=bcb

_qna

&no

=22

383

Progra

mm

ing L

angua

ges

4

Page 5: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

역사와설계지표

•19

50 년대

–효율성이제일중요함

–쓰기쉬운점과읽기쉬운점은부차적인지표

•19

60년대

Progra

mm

ing L

angua

ges

5

•19

60년대

–추상화메커니즘이중요해짐

•19

60 년대

~ 1

980년대초기

–단순성과신뢰성이강조됨

•19

80 년대

~ 1

990년대

–수학적인정밀도가높아짐

Page 6: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

효율성

•FO

RTRAN의주된목표

•C/C

++같은언어들에게는아직도중요한목

표•효율성의다양한측면

–실행코드의효율성

: 컴파일최적화와연관됨

Progra

mm

ing L

angua

ges

6

–실행코드의효율성

: 컴파일최적화와연관됨

–번역기의효율성

: 원-패스컴파일러

?–구현의어려운정도

(구현용이성

): 번역기를만드

는데의효율성

–프로그래밍효율성

: 표현의풍부함

(표현력

)–신뢰성

(rel

iabili

ty)와유지보수용이성

(mai

ntai

nabili

ty): 판독성

(rea

dab

ility

)과연관됨

Page 7: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

C 코딩에서의최적화

•W

riting

Effic

ient

C a

nd C

Code

Optim

izat

ion

•ht

tp://w

ww.jo

inc.co

.kr/

modul

es/m

oni

wik

i/w

iki.p

hp/S

ite/C

/Docu

men

ts/C

Optim

izat

iow

iki.p

hp/S

ite/C

/Docu

men

ts/C

Optim

izat

ion

Progra

mm

ing L

angua

ges

7

Page 8: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

규칙성

(Reg

ular

ity)

•언어의특성들이어떻게통합되어있는가

?•규칙성은다음과연관되어있음

(중요

!)–일반성

(Gen

eral

ity)

: 특별한경우를피함

(75쪽

)–직교성

(Ort

hogona

lity)

: 언어기능을사용함에

Progra

mm

ing L

angua

ges

8

–직교성

(Ort

hogona

lity)

: 언어기능을사용함에

있어문맥에독립적으로함

–일률성

(Uni

form

ity)

: 보이는바와행동하는바

가일관성있음

(외모와행동이일치

~)

Page 9: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

일반성

(Gen

eral

ity)의예

(76쪽

)

•프로시저변수

–파스칼은프로시저매개변수는있으나

, 프로시저변수는지원하

지않음

–C 언어는함수포인터로프로시저변수지원

•가변길이배열의예

–파스칼은지원하지않으나

, C, A

da,

그리고

FORT

RAN

은지원함

Progra

mm

ing L

angua

ges

9

–파스칼은지원하지않으나

, C, A

da,

그리고

FORT

RAN

은지원함

•등가연산자의응용

–C 언어는배열의비교를지원하지않으나

, Ada는지원

•상수

(Cons

tant

)의선언

–대부분의언어들은상수의초기값에대한제한이있음

Page 10: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

C의함수포인터

int func()

{

return 0;

} int main()

int main()

{

int (*fp1)() = &func;

(*fp1)(); // 함수포인터로함수호출

}

Progra

mm

ing L

angua

ges

10

Page 11: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

직교성

(Ort

hogona

lity)의예

(76쪽

)

•반환형

(Ret

urn

Type)

–파스칼

: 스칼라

(sca

lar) 또는포인터

(poin

ter) 형

–C, C

++: 배열형은제외

–Ada와대부분의함수언어들

: 모든형들

(Dec

lara

tion)

(C

#

)

Progra

mm

ing L

angua

ges

11

•선언

(Dec

lara

tion)

�실습해볼것

(C# 포함

)–

C: 블록의처음

–C++: 블록의어디에서도선언가능

•매개변수전달

(Par

amet

er P

assing

)–

C에서의매개변수전달방법은배열을제외하고

는값전달

(pas

s-by-

valu

e) →

직교적이지않음

Page 12: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

C의선언

#include <stdio.h>

int main()

{

int i = 10;

printf("i = %d\n",i);

int k = 30; // 에러

(C에서선언은블록의처음에만가능)

int k = 30; // 에러

(C에서선언은블록의처음에만가능)

// C++에서는에러아님

{

int j = 20;

printf("j = %d\n",j);

} printf("j = %d\n",j); // 에러

(범위밖)

}

Progra

mm

ing L

angua

ges

12

Page 13: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

C에서다차원배열의매개변수전달

void func1(int *ar1, int len) { }

void func2(int (*ar2)[3], int len) { }

void func3(int (*ar3)[5][6], int len) { }

int main()

{{

int ar1[5];

int ar2[2][3];

int ar3[4][5][6];

func1(ar1,5);

func2(ar2,2);

func3(ar3,4);

}

Progra

mm

ing L

angua

ges

13

Page 14: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

일률성

(Uni

form

ity)의예

•딜리미터

(Del

imite

rs) �실습

(C# 및자바

포함

)C++에서

–클래스정의의경우

; 으로끝나야한다

Progra

mm

ing L

angua

ges

14

–클래스정의의경우

; 으로끝나야한다

–함수의정의는

; 으로끝나면안된다

•값의반환

–파스칼에서의값반환은배정문

assignm

ent)처

럼보임

�일률적이지않음

(77쪽

)

Page 15: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

규칙성의몇가지더할얘기들

•왜불규칙적인것들이생기는가

?–역사적인이유

: 과거의기능과의호환성

–실제적인이유

: 스택기반실행환경의한계

(8장

)

•언어설계에있어지나치게일반성또는직교성

Progra

mm

ing L

angua

ges

15

•언어설계에있어지나치게일반성또는직교성

을기대하는것은위험할수있음

(78쪽

)–어느정도의트레이드

-오프

(tra

de-

offs

) 가필요함

–트레이드

-오프란

? (c

f: 데드락

, cat

ch-2

2)

기본적인

설계목표

규칙성추구로인해

생길수있는복잡성

trade-off

Page 16: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

단순성

(Sim

plic

ity)

(79쪽

)

•C 언어의특징중하나임

•파스칼이주된성공한이유

•단순성은규칙성이아님

–Alg

ol6

8은규칙적이지만단순

하지않음

•단순성은언어구성의개수가적다고달성되는것이아

Progra

mm

ing L

angua

ges

16

•단순성은언어구성의개수가적다고달성되는것이아

님: L

ISP은언어구성요소의개수가적으나

, 매우복잡한

실행환경을가짐

•즉

, 지나치게단순화된언어는사용하기어려움

“Eve

ryth

ing s

houl

d b

e m

ade

as s

imple

as

poss

ible

, but

no

t sim

ple

r”—

Alb

ert Ei

nste

in모든것은가능한한단순하게만들어져야하지만

, 너무단

순해서는안된다

.

Page 17: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

단순성

•오캄의면도

날, 또는검약

의원리

(princ

iple

of

pars

imony

)•출처

: Model

•출처

: Model

Se

lect

ion

and

Mul

tim

odel

Infe

renc

eby

Burn

ham

an

d

And

erso

nPr

ogra

mm

ing L

angua

ges

17

Page 18: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

표현력

(Exp

ress

iven

ess)

•복잡한과정이나구조를언어가얼마나쉽게

표현할수있는가를나타내는것

•단순성과상충될수있음

: Alg

ol6

8은표현력

이좋지만복잡한언어

•객체지향언어가인기있는이유

Progra

mm

ing L

angua

ges

18

•객체지향언어가인기있는이유

•표현력은간결함이라고도볼수있는데

, 간결함이지나치면가독성

(rea

dab

ility

)이떨어

짐 C 코드예

)while (*s++ = *t++); // 유명한

유명한

유명한

유명한예제이나

예제이나

예제이나

예제이나피해야

피해야

피해야

피해야함 함함함

(cf: C 언어의

언어의

언어의

언어의시퀀스

시퀀스

시퀀스

시퀀스포인트

포인트

포인트

포인트)

Page 19: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

확장성

(Ext

ensibili

ty)

•사용자가새로운기능을언어에추가할수있게하는능

•새로운데이터형이나함수정의

•키워드나언어구성요소를번역기가처리할수있도록

추가

: LIS

P 에서는이러한환경의변경이가능함

Progra

mm

ing L

angua

ges

19

추가

: LIS

P 에서는이러한환경의변경이가능함

•연산자오버로딩

(Ada,

C++, C

#) �실습

C++, C

#•새로운연산자정의

(oper

ator) (H

aske

ll은가능

)•확장성이없는단순함을가진언어는무용

(無用

)함•언어의설계자는

, 언어를처음설계할때

,어떤특성이언

어의핵심으로포함되어야하는지를결정해야함

Page 20: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

제약가능성

(Res

tric

tabili

ty)

•(가능한한간편하게

) 언어주제들을정의하는능력

�뭔

소류

?–프로그래머가그언어에대한최소한의지식과최소의구문을

사용하여프로그램을작성할수있도록함

•어떤특성이언어의기본기능으로들어가야하는가

? 아

니면라이브러리로지원되야하는가

? (자바

Thre

ad v

s. C

Progra

mm

ing L

angua

ges

20

니면라이브러리로지원되야하는가

? (자바

Thre

ad v

s. C

PT

hrea

ds)

•구문적당의

(構文的糖衣

; syn

tact

ic s

ugar

)로프로그램의

이해도를높일수있음

(C에서

for 루프는

whi

le 루프의

synt

actic

sugar

)•사용하지않는기능으로인해속도나시간같은성능의

저하가있으면안된다

Page 21: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

이미채택된표기법과관례와의일관성

•언어는경험있는프로그래머들이배우기쉬워야한다

반례들

)–

Alg

ol6

8 에서는

“typ

e” 대신

“mode”

키워드사용

–FO

RTRAN

에서는공백무시

•D

O 9

9

I =

1.1

0 �

DO

99I = 1

.10

Progra

mm

ing L

angua

ges

21

•D

O 9

9

I =

1.1

0 �

DO

99I = 1

.10

–FO

RTRAN의키워드들은예약되어있지않다

•최소경악의법칙

(The

law

of le

ast as

toni

shm

ent)

“Thi

ngs

shoul

d n

ot ac

t or

appea

r in

a c

om

ple

tely

une

xpec

ted

way

”모든것들은완전히예상밖으로행동하거나나타나서는안됨

Page 22: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

다른설계원칙들

•엄밀성

(Pre

cise

ness

(또는명확성

Def

inite

ness

))–정확한언어의정의가있어야한다

–Ba

ckus

Nau

r Fo

rm 또는

Exte

nded

Bac

kus

Nau

r Fo

rm (중요

! 4

장에서다룸

)

•기계독립성

Progra

mm

ing L

angua

ges

22

•기계독립성

–기계종속적인부분을명확히찾아내서고립시킴

–예

: C 언어에서

limits.h 와

float

.h

•보안–프로그래밍오류를줄이고

, 오류가발견되면보고하기쉽도록함

“Max

imiz

e th

e nu

mber

of er

rors

tha

t co

uld n

ot be

mad

e” —

C. A

. R. H

oare

, 198

1범할수없는오류의수를극대화한다

Page 23: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

케이스스터디

: C++ (1/

3)

•배경

–Si

mul

ar67이너무비효율적이다

–C 기반의시뮬레이션에적합한새로운언어필요

•초기의설계목표

Progra

mm

ing L

angua

ges

23

•초기의설계목표

–프로그램작성이숴워야한다

–클래스와엄밀한

형체크

–효율성

: C와호환가능해야한다

–실제적인문제들

: 이식성

, 구현가능성

, 상호작용성

Page 24: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

케이스스터디

: C++ (2/

3)

•C w

ith

Cla

sses

(10

79~80

)–

Cpre

: C++ 코드를

C 코드

로번역함

–중요한특징들이빠져있었

(virtu

al

•C++ (19

85): 확장된설계목표

들 –C와의호환성

–단순히가능하니까멋진기능

을추가하는

feat

urism

배제

–오버헤드를최대한줄인다

Progra

mm

ing L

angua

ges

24

•가상함수

(virtu

al

func

tions

)•템플릿

(tem

pla

te)

•일반적인오버로딩

–오버헤드를최대한줄인다

–“z

ero-o

verh

ead” 규칙

–다중패러다임언어

(“m

ultipa

radig

m”

)–엄밀한형체킹

–단계적으로배울수있게함

–다른언어들과의호환성

Page 25: 원칙들 Chapter 3 설계의kowon.dongseo.ac.kr/~dkkang/PL2009Spring/Ch03.pdf · (language constructs) (C. A. R. Programming Languages 3 Hoare) – 멋진 기능들의 모음만은

케이스스터디

: C++ (3/

3)

•성장과표준화

1985

. 저자의첫번째

C++ 책이나옴

1986

. 첫번째상업적인컴파일러등장

1987

. USE

NIX에서

C++에대한첫번째학술대회

1989

. ARM

(Ann

ota

ted R

efer

ence

Man

ual)이나옴

Progra

mm

ing L

angua

ges

25

1989

. ARM

(Ann

ota

ted R

efer

ence

Man

ual)이나옴

1994

. STL

(Sta

ndar

d T

empla

te L

ibra

ry)이추가됨

1998

. 미국표준

(AN

SI/ISO

) C++

•실수들

(mista

kes)

–비슷한일들을하는데

, 너무많은방법이있음

–표준적인라이브러리가처음부터나오지는않음

(cf. 자바

)