제 2장 언어의 변천 2.1 디지털 컴퓨터 이전의 언어 2.2 1950년대 : 최초의 프로그래밍 언어 2.3 1960년대 : 프로그래밍 언어의 폭증 2.4 1970년대 : 간결성, 추상화, 연구사항 2.5 1980년대 : 통합과 새로운 방향 2.6 1990년대 : 웹을 위한 언어 2.7 2000년대 : C#, 마크업 언어 2.8 프로그래밍 언어의 세대론과 미래
2.1 디지털 컴퓨터 이전의 언어 B.C 1500∼3000년대의 찰흙판 60진법 사용 대수학 방정식 Euclid 언어의 변천 2.1 디지털 컴퓨터 이전의 언어 B.C 1500∼3000년대의 찰흙판 60진법 사용 대수학 방정식 Euclid B.C 300년 최대 공약수 알고리즘
Charles Babbage (1792∼1871) Difference Engine 계산 처리용 유한차 원리 기호 논리학 근거 언어의 변천 Charles Babbage (1792∼1871) Difference Engine 계산 처리용 유한차 원리 기호 논리학 근거 현재 컴퓨터와 유사 구조 저장 개념 없음
언어의 변천 Ada Augusta 최초의 컴퓨터 프로그래머 알고리즘에 대한 탁월한 견해 Ada 언어는 그녀의 이름 작명
Copyright © 2007 Addison-Wesley. All rights reserved.
Plankalkül Syntax An assignment statement to assign the expression | A + 1 => A V | 4 5 (subscripts) S | 1.n 1.n (data types) Copyright © 2007 Addison-Wesley. All rights reserved.
2.2 1950년대 : 최초의 프로그래밍 언어 1950년대 초반 기계어 사용 어셈블리 언어 1950년대 중반 언어의 변천 2.2 1950년대 : 최초의 프로그래밍 언어 1950년대 초반 기계어 사용 어셈블리 언어 1950년대 중반 FORTRAN (FORmula TRANslation) 최초의 고급언어 (John Backus) 효율적 기계어 코드 생성 배열, 반복 구조, 분기문, 부프로그램 사용
Example 2.1 FORTRAN C A HYPOTHETICAL PROGRAM IN FORTRAN FUNF(T) = SQRTF(ABSF(T)) + 5.0*T**3 DIMENSION A(11) 1 FORMAT(6F12.4) READ 1,A DO 10 J = 1,11 I = 11-J Y = FUNF(A(I+1)) IF(400.0-Y)4,8,8 4 PRINT 5,I 5 FORMAT(I10, 10H TOO LARGE) GO TO 10 8 PRINT 9,I,Y 9 FORMAT(I10,F12.7) 10 CONTINUE STOP
COBOL (Common Business Oriented Language) 언어의 변천 1950년대 후반 COBOL (Common Business Oriented Language) 상업 자료 처리용 ALGOL 60(ALGOrithmic Language 60) 알고리즘 기술, 범용 LISP(LISt Processor) 기초 연산, 리스트 처리용 APL(A Programming Language) 배열 처리용
COBOL 미국방성팀 고안 (1959∼60) 사용자들의 편의성 고려 특징 Record 구조 자료구조와 실행 부분 분리 언어의 변천 COBOL 미국방성팀 고안 (1959∼60) 사용자들의 편의성 고려 특징 Record 구조 자료구조와 실행 부분 분리 “PICTURE” 사용
Example 2.2 COBOL 비구조화 프로그램 1 IDENTIFICATION DIVISION. 2 PROGRAM-ID. SALARY. 3 INSTALLATION. CRUSADERS. 4 DATE-WRITTEN. 1984. 8. 15. 5 DATE-COMPILED. 84.08.11. 6 SECURITY. YOU HAD BETTER NOT KNOW. 7 ENVIROMENT DIVISION. 8 CONFIGURATION SECTION. 9 SOURCE-COMPUTER. COMPUTER-X. 10 OBJECT-COMPUTER. COMPUTER-X. 11 INPUT-OUTPUT SECTION. 12 FILE-CONTROL 13 SELECT EMPL-FILE ASSIGN TO CARD-READER. 14 SELECT PRINT-FILE ASSIGN TO LINE-PRINTER. 15 DATA DIVISION. 16 FILE SECTION. 17 FD EMPL-FILE 18 LABEL RECORDS ARE OMITTED 19 DATA RECORD IS EMPL-RECORD.
20 01 EMPL-RECORD. 21 02 NAME-IN PIC X(15). 22 02 SEX-CODE PIC 9. 23 88 MALE VALUE 1. 24 88 FEMA VALUE 2. 25 88 ERROR-SEX-CODE VALUE ZERO, 3 THRU 9. 26 02 SALARY-IN PIC 99999V99. 27 02 FILLER PIC X(57). 28 FD PRINT-FILE 29 LABEL RECORDS OMITTED 30 DATA RECORD IS PRINT-LINE. 31 01 PRINT-LINE PIC X(132). 32 WORKING-STORAGE SECTION. 33 01 SEX-COUNTERS. 34 02 NO-OF-MEN PIC 99 VALUE ZERO. 35 02 NO-OF-WOMEN PIC 99 VALUE ZERO. 36 01 SAL-TOTALS. 37 02 MEN-TOTAL-SAL PIC 9(7)V99 VALUE ZERO. 38 02 WOMEN-TOTAL-SAL PIC 9(7)V99 VALUE ZERO. 39 01 END-OF-FILE-TEST 40 88 NO-MORE-RECORDS VALUE ‘YES’. 41 01 HEARDER1. 42 02 FILLER PIC X(41) VALUE SPACES. 43 02 FILLER PIC X(13) VALUE ‘ANNUAL SALARY’. 44 01 HEARDER2.
45 02 FILLER PIC X(16) VALUE SPACES. 46 02 FILLER PIC X(13) VALUE ‘EMPLOYEE NAME’. 47 02 FILLER PIC X(10) VALUE SPACES. 48 02 FILLER PIC X(41) VALUE ‘MEN’. 49 02 FILLER PIC X(41) VALUE SPACES. 50 02 FILLER PIC X(41) VALUE ‘WOMEN’ 51 01 REPORT-LINE. 52 02 FILLER PIC X(15) VALUE SPACES. 53 02 NAME-OUT PIC X(15). 54 02 ERROR-SIGNAL PIC X(5) VALUE SPACES. 55 02 MEN-SAL-OUT PIC ZZZ9999.99 BLANK WHEN ZERO. 56 02 FILLER PIC X(5) VALUE SPACES. 57 02 WOMEN-SAL-OUT PIC X(41) ZZZ9999.99 BLANK WHEN ZERO. 58 PROCEDURE DIVISION. 59 PROGRAM-SUMMARY. 60 OPEN INPUT EMPL-FILE 61 OUTPUT PRINT-FILE. 62 PRINT-HEADINGS. 63 WRITE PRINT-LINE FROM HEARDER1 64 AFTER ADVANCING PAGE. 65 WRITE PRINT-LINE FROM HEARDER2 66 AFTER ADVANCING 2 LINES. 67 MOVE SPACES TO PRINT-LINE 68 WRITE PRINT-LINE 69 AFTER ADVANCING 2 LINES.
70 READ-EMPL-RECORD. 71 READ EMPL-FILE AT END GO TO PRINT-SUMMARY. 72 PROCESS-A-RECORD. 73 IF MALE 74 MOVE SALARY-IN TO MEN-SAL-OUT 75 MOVE ZEROS TO WOMEN-SAL-OUT 76 ADD 1 TO NO-OF-MEN 77 ADD SALARY-IN TWO MEN TOTAL SAL. 78 IF FEMA 79 MOVE SALARY-IN TO WOMEN-SAL-OUT 80 MOVE ZEROS TO MEN-SAL-OUT 81 ADD 1 TO NO-OF-WOMEN 82 ADD SALARY-IN TO WOMEN-TOTAL-SAL. 83 IF ERROR-SEX-CODE 84 MOVE ALL ‘*’ TO ERROR-SIGNAL. 85 MOVE NAME-IN TO NAME-OUT 86 WRITE PRINT-LINE FROM REPORT-LINE 87 AFTER ADVANCING 1 LINE. 88 MOVE SPACES TO REPORT-LINE. 89 GO TO READ-EMPL-RECORD. 90 PRINT-SUMMARY. 91 MOVE ‘TOTAL’ TO NAME-OUT 92 MOVE MEN-TOTAL-SAL TO MEN-SAL-OUT 93 MOVE WOMEN-TOTAL-SAL TO WOMEN-SAL-OUT 94 WRITE PRINT-LINE FROM REPORT-LINE 95 AFTER ADVANCING 3 LINES.
96 DIVIDE NO-OF-MEN INTO MEN-TOTAL-SAL 97 GIVING MEN-SAL-OUT 98 DIVIDE NO-OF-WOMEN INTO WOMEN-TOTAL-SAL GIVING WOMEN-SAL-OUT. 99 MOVE ‘A V E R A G E’ TO NAME-OUT 100 WRITE PRINT-LINE FROM REPORT-LINE 101 AFTER ADVANCING 2 LINES. 102 CLOSE EMPL-FILE 103 PRINT-FILE. 104 STOP RUN.
COBOL 구조화 프로그램 1 ~ 61 COBOL 비구조화 프로그램과 동일함 62 PERFOEM PRINT-HEADINGS. 63 PERFOEM READ-EMPL-RECORD. 64 PERFORM PROCESS-A-RECORD 65 UNTIL NO-MORE-RECORDS. 66 PERFORM PRINT-SUMMARY. 67 CLOSE EMPL-FILE 68 PRINT-FILE. 69 STOP RUN. 70 PRINT-HEADINGS. 71 WRITE PRINT-LINE FROM HEARDER1 72 AFTER ADVANCING PAGE. 73 WRITE PRINT-LINE FROM HEARDER2 74 AFTER ADVANCING 2 LINES. 75 MOVE SPACES TO PRINT-LINE 76 WRITE PRINT-LINE 77 AFTER ADVANCING 2 LINES. 78 READ-EMPL-RECORD. 79 READ EMPL-FILE 80 AT END MOVE ‘YES’ TO END-OF-FILE-TEST. 81 PROCESS-A-RECORD. 82 IF MALE 83 PERFORM PROCESS-MEN.
84 IF FEMA 85 PERFORM PROCESS-WOMEN. 86 IF ERROR-SEX-CODE 87 PERFORM PROCESS-ERROR-CODE. 88 MOVE NAME-IN TO NAME-OUT 89 WRITE PRINT-LINE FROM REPORT-LINE 90 AFTER ADVANCING 1 LINE. 91 MOVE SPACES TO REPORT-LINE. 92 PERFORM READ-EMPL-RECORD. 93 PROCESS-MEN. 94 MOVE SALARY-IN TO MEN-SAL-OUT. 95 MOVE ZEROS TO WOMEN-SAL-OUT. 96 ADD 1 TO NO-OF-MEN. 97 ADD SALARY-IN TO MEN-TOTAL-SAL. 98 PROCESS-WOMEN. 99 MOVE SALARY-IN TO WOMEN-SAL-OUT. 100 MOVE ZEROS TO MEN-SAL-OUT. 101 ADD 1 TO NO-OF-WOMEN. 102 ADD SALARY-IN TO WOMEN-TOTAL-SAL. 103 PROCESS-ERROR-CODE. 104 MOVE ALL ‘*’ TO ERROR-SIGNAL. 105 PRINT-SUMMARY. 106 MOVE ‘TOTAL’ TO NAME-OUT 107 MOVE MEN-TOTAL-SAL TO MEN-SAL-OUT 108 MOVE WOMEN –TOTAL-SAL TO MEN-SAL-OUT 109 WRITE PRINT-LINE FROM REPORT-LINE
110 AFTER ADVANCING 3 LINES. 111 DIVIDE NO-OF-MEN INTO MEN-TOTAL-SAL 112 GIVING MEN-SAL-OUT 113 DIVIDE NO-OF-WOMEN INTO WOMEN-TOTAL-SAL GIVING WOMEN-SAL-OUT. 114 MOVE ‘ A V E R A G E’ TO NAME-OUT 115 WRITE PRINT-LINE FROM REPORT-LINE 116 AFTER ADVANCING 2 LINES.
ALGOL 60 알고리즘 서술용 (1958∼1960) 특징 Free format 구조적 명령문 begin - end 블록 언어의 변천 ALGOL 60 알고리즘 서술용 (1958∼1960) 특징 Free format 구조적 명령문 begin - end 블록 변수 타입 선언, stack 기반 되부름, BNF 사용
Example 2.3 ALGOL 60 begin integer i, real y; real array a[0:10] 언어의 변천 Example 2.3 ALGOL 60 begin integer i, real y; real array a[0:10] real procedure f(t); real t; value t; f := sqrt(abs(t)) + 5 * t ↑ 3; for i := 0 step 1 until 10 do read(a[i]); for i := 10 step -1 until 0 do begin y := f(a[i]); if y > 400 then write(i, ‘too large’) else write(i, y) end
garbage collection 개념 소개 언어의 변천 LISP MIT (1950년대 후반) List 구조, 함수 기본 인공지능 분야 특징 S-expression 함수 적용 garbage collection 개념 소개 되부름의 원조
Example 2.4 LISP /* 2의 10승 구하기 ( recursion 사용) */ (defun power (x y) (if (> y 0) (* x (power x (- y 1))) 1)) (format t “~D” (power 2 10))
/* 5의 Factorial (5!) ( recursion 사용) */ (defun fact (x) (if (> x 0) (* x (fact (- x 1 ))) 1)) (format t “~D” (fact 5))
APL 하버드 (1950∼1960) 배열의 강력성 언어의 단점 제어구조가 없음 특정 터미널에만 있는 그리스 기호 사용 언어의 변천 APL 하버드 (1950∼1960) 배열의 강력성 언어의 단점 제어구조가 없음 특정 터미널에만 있는 그리스 기호 사용 프로그램을 이해하기 어려움
Example 2.5 APL /* increment 프로그램 */ ▽INCREMENT [1] Z ← 1 [2] Z ← Z+R [4] → 2 [5] ▽ 실행 R ← 2 INCREMENT 3 5 7 .
언어의 변천 2.3 1960년대 : 프로그래밍 언어의 폭증
PL/I (Programming Language One) 언어의 변천 1960년대의 언어 PL/I (Programming Language One) ALGOL 68 Simula 67 BASIC (Beginners All-purpose Symbolic Instruction Code)
PL/I (Programming Language One) 언어의 변천 PL/I (Programming Language One) FORTRAN, COBOL, ALGOL 60의 장점 병행성, 기억장소 할당, 예외처리기능 추가 번역기 크고, 실행 효율 저하 상호작용으로 인한 신뢰성 저하
ALGOL 68 ALGOL 60에 다른 기능 보강 직교성 강조 이론적 실험성 강한 언어 언어의 변천 ALGOL 68 ALGOL 60에 다른 기능 보강 직교성 강조 이론적 실험성 강한 언어 SNOBOL(StriNg Oriented symBOlic Language) 최초의 문자열 처리 패턴 매칭 기능 다양
Example 2.6 SNOBOL /* INPUT file에서 ‘X’를 ‘A’로 ‘Y’는 ‘B’로 바꾸는 프로그램*/ LOOP TEXT = INPUT :F(END) ONE TEXT ‘X’ = ‘A’ :S(ONE) TWO TEXT ‘Y’ = ‘B’ :S(TWO) OUTPUT = TEXT END
Simular 67 최초의 객체지향 언어 (Class 개념) 시뮬레이션 목적 BASIC 간단한 언어 언어의 변천 Simular 67 최초의 객체지향 언어 (Class 개념) 시뮬레이션 목적 BASIC 간단한 언어 교육용, 가정용, 사무처리용
2.4 1970년대 : 간결성, 추상화, 연구사항 1970년대 초반 언어 특징 간결성, 일관성 추구 언어의 변천 2.4 1970년대 : 간결성, 추상화, 연구사항 1970년대 초반 언어 특징 간결성, 일관성 추구 PASCAL (1971, Wirth) 작고, 간결, 구조적, 효율적 : 교육용 C (1972, Dennis Ritchie) 수식 위주, type system 기계 접근성, 운영체제용 (UNIX)
언어의 변천 1970년대 중반 언어 특징 자료 추상화, 병행성, 증명 시도 CLU Euclid Mesa
2.5 1980년대 : 통합과 새로운 방향 1980년대 언어 특징 Ada 등장 자료 추상화, package 언어의 변천 2.5 1980년대 : 통합과 새로운 방향 1980년대 언어 특징 Ada 등장 자료 추상화, package 병행처리(task), 예외처리 Modular-2 PASCAL 결점 보안 함수형 언어 : Scheme, ML 논리형 언어 : Prolog 객체지향 언어 : Small talk, C++
Example 2.7 PROLOG /* 규칙과 질문으로 추론 기능 */ likes(joe, fish). likes(mary, book). likes(john, money). 질문: ? - likes(mary, book). : yes likes(john, X) : - likes(X,wine), likes(X, food). : John likes X if X likes wine and likes food.
2.6 1990년대 : 웹을 위한 언어 2.6.1 JAVA C++ 로부터 시작 C++ 보다 단순성, 신뢰성 원칙 객체지향 언어 2.6 1990년대 : 웹을 위한 언어 2.6.1 JAVA C++ 로부터 시작 C++ 보다 단순성, 신뢰성 원칙 객체지향 언어 Pointer , 다중상속 지원 안함 Multithread 제공 Web 은 Java 의 응용분야
2.6.1 JAVA - 더하기 연산 * 소스 public class PlusTest{ public static void main(String[] args) { int a = 10; int b = 20; int c = a + b; System.out.println(“a + b = “ + c); } * 결과 30
2.6.2 JavaScript HTML 문서에 내포된 클라이언트 측 스크립트 언어 동적 HTML 문서 생성 JavaScript는 동적 타입 언어 문자 스트링과 배열은 동적 길이를 가짐 상속 메소드에 대한 메소드 호출의 동적 바인딩 지원 못함
2.6.2 JavaScript - 더하기 연산 <!DOCTYPE html> <html> * 소스 <!DOCTYPE html> <html> <head> <title>script</title> </head> <body> <script> var x = 10; // integer 형식 y = 20; z = x + y; w = “40”; // String 형식 document.write("<h3>x = " + x + "</h3>"); document.write("<h3> y = " + y + "</h3>"); document.write("<h3>x + y = " + z + "입니다.</h3>"); document.write("<h3>w = " + w + "</h3>"); </script> </body> </html>
2.6.2 JavaScript - 더하기 연산 * 소스 <HTML> <HEAD> <TITLE> 자바스크립트 더하기 예제 </TITLE> <script language = “javascript”> <!-- function add(){ with(document.FORMtest){ t3.value=parselInt(t1.value) + parselInt(t2.value)} } --> </script> </HEAD> <BODY> <from name = “FORMtest”> <inpute type=“text” name=“t1” value=“10”> + <input type=“text” name=‘t2” value=“20”> = <input type=“text” name=“t3” value=“”> </form> <a href=“javascript; add()”> t3.value = parseInt(t1.value) + parseInt(t2.value) : JavaScript 더하기 연산</a><br> </BODY> </HTML>
2.6.3 PHP (Personal Home Page) Power Hypertext Preprocessor 사용 서버 측 스크립트 언어 구문형태나 String과 배열의 동적 타입 사용의 관점에서 JavaScript와 유사 HTML 폼 데이터에 대한 간단한 접근 허용
2.6.3 PHP (Personal Home Page) - 더하기 연산 * 소스 <? $a=20; $b=10; $c=$a+$b; echo $c; ?> * 결과 30
2.7 2000년대 : C#, 마크업 언어 2.7.1 C# C++ 와 Java 기반 .NET Framework에서 제공 CTS (Common Type System) 사용 IL (Intermediate Language) IL 실행 전, 기계 코드로 번역 Java의 C++제거요소 다시 포함
2.7.1 C# - 더하기 연산 * 소스 using System; class PlusTest { static void Main() int a, b; a = 10; b = 20; Console.WriteLine(“{0}은 a + b의 값”, a + b); } * 결과 30은 a + b의 값
XML (eXtensible Markup Language)문서를 다른 형태의 마크업 언어로 변환하는 한 가지 방법 2.7.2 XLST (eXtensible Stylesheet Language Transformation) XML (eXtensible Markup Language)문서를 다른 형태의 마크업 언어로 변환하는 한 가지 방법 마크업 / 프로그래밍 혼합형 언어
2.7.3 JSP Java Server Page 동적인 웹 문서를 지원하고, 웹 문서의 다른 처리 요구들을 위해 설계된 기술
2.7.3 JSP - 더하기 연산 * 소스 <%@ page language=“java” contentType=“text/html; charset=EUC-KR” pageEncoding=“EUC-KR”%> <% int a = 10; int b = 20; int c = a + b; %> <!DOCTYPE html PUBLIC “-//W3c//DTD HTML 4.01 Transitional//EN” http://www.w3.org/TR/html4/loose.dtd> <html> <head> <meta http-equiv=Content-Type” content=“text/html; charset=EUC-KR”> <title>PlusTest</title> </head> <body> <div><h2>a + b의 합 : <%=c%></h2></div> </body> </html>
2.8 프로그래밍 언어의 세대론과 미래 프로그래밍 언어의 세대구분 (견해에 따른 2가지 분류) 언어의 변천 2.8 프로그래밍 언어의 세대론과 미래 프로그래밍 언어의 세대구분 (견해에 따른 2가지 분류) 제 1 세대 - 어셈블리 언어 제 2 세대 - 비구조적 고급 언어 제 3 세대 - 구조적 고급 언어 제 5 세대 - 초 고급 언어 제 1 세대 - 기계어 제 2 세대 - 어셈블리 언어 제 3 세대 - 고급 언어 Fortran, Cobol, Algol, PL/I 등 Pascal, C 언어 등 프로시져 위주의 고급 언어 Prolog, SETL과 같은 초고급 언어
4세대 언어의 특징 Software crisis 해결책 Database System 위주 SQL, Lotus, Delphi 언어의 변천 4세대 언어의 특징 Software crisis 해결책 Database System 위주 SQL, Lotus, Delphi
기타. Ruby * 소스(http://www.ruby-lang.org/ko/ 참고)
기타. Perl - 더하기 연산 #!/usr/bin/perl use strict; use warnings; * 소스 #!/usr/bin/perl use strict; use warnings; use Math::Complex; my $a = 10; my $b = 20; print $a + $b, “\n”; * 결과 30