2장 언어의 진화
계보학 (Genealogy)
- 새로운 응용 도메인 ㅡ> 기존PL을 사용하면 불편 ㅡ> 새로운 PL 만듬
처음에는 기계어, 어셈블리어로 프로그램을 짜다가, 그것이 불편하여 HLL을 만듬
HLL : 우리에게 친숙한 단어들로 구성해서 프로그램을 짬. 컴파일러를 통해 기계어로 바꿈.
기얼할 만한 것
Fortran
ALGOL 60
COLBOL
LISP
Smalltalk 80
객체지향 개념을 최초로 쓴 언어
Ada 83
나머지 밑에것들은 우리가 아는것들
파이썬 자바 등등
(2.1), (2.2)
Fortran 이전에 HLL를 만드려는 시도가 있었다.
ㅡ> 시도로 끝났다.
널리 퍼지기 시작하고, 우리가 사용하는 PL의 시조는 Fortran이다.
(2.3) Fortran (최초의 HLL)
(2.3) The IBM 704 and Fortran
- 최초의 HLL
- 아직까지도 진화하면서 사용
- 주로 수학자들이 사용 (계산 많이하는 사람들)
기계어로 짜지 말고, 사람이 쓰기 쉽고 읽기 쉬운 HLL,
즉 우리가 쓰는 언어와 비슷하게 프로그램을 짜고
그것을 컴파일러라는 프로그램을 만들어서 기계어로 바꾸자
ㅡ> 그걸 시도한게 Fortran
이 언어가 요즘에도 널리쓰이는 이유
Fortran 컴파일러 ㅡ> CPU 8개면, 알아서 8개의 쓰레드를 만들어서 실행시간을 최소화함
(CPU 여러개인 멀티코어 ㅡ> Utilization 극대화 ㅡ> 속도up)
(2.3.2) Fortran 뜻
Mathematical FORmula TRANslating System
(2.3.6) 코드
한번 읽어보자
변수선언 Integer, Demension(요즘으로 치면 array)
배정문
if문
do ㅡ> 나중에 for문으로 바뀜
(2.4) Lisp (함수언어)
(2.4) Functional Programming : Lisp
LISP ㅡ> 함수언어의 원조
15장에서 자세히
요즘 AI가 각광을 받지만, 이때부터 AI라는 분야가 있었고 연구를 했다.
수학자들이 C언어보다 함수언어를 좋아한다
함수언어
ㅡ> 배정문 없음 <ㅡ> 명령형(Imperative) 언어
C언어
ㅡ> 명령형 언어
ㅡ>ㅡ> 핵심 : 배정문
(2.4.5) Two Descendants of Lisp
함수언어는 LISP에서 파생
Scheme
Common Lisp
(2.5) ALGOL 60 (현대언어의 틀)
(2.5) The First Step Toward Sophistication : ALGOL 60
ALGOL 60
- 현대 언어에 가장 큰 영향을 줌 (Fortran보다 더)
- 우리가 배우는 많은 내용들이 여기서 시작 (언어의 이론적인 바탕)
파생언어
- C ㅡ> 시스템 프로그래밍. Unix와 불가분이라 대세, 그전까지는 어셈블리어로 OS짬
- Pascal ㅡ> 90년대 초반까지는 C보다 많이 씀
Fortran은 IBM이라는 회사에서 만들었지만
시스템 프로그래밍에 적합하지 않아서 ALGOL을 만듬
ALGOL은 특정회사에서 만들지 않고
학자들이 모여서 만듬
(2.5.6) ALGOL 60 Overveiw
58 ㅡ> 60
중대한 4가지 발전
1. Block Structure
ㅡ> ALGOL : begin ~ end
ㅡ> C언어 : { ~ }
2. Passing Parameter
ㅡ> (1) pass by value
ㅡ> (2) pass by name
가인수 (formal parameter)
실인수 (actual parameter)
C언어
ㅡ> call by value
ㅡ> call by reference
3. 재귀 (Recursive)
재귀할때는 종료조건(termination condition)이 있어야 한다.
ㅡ> 안그러면 무한재귀
4. Strack - Dynamic
ㅡ> 기니까 나중에
(2.6) COLBOL (비즈니스)
(2.6) Computerizing Business Records : COLBOL
첨에 컴퓨터는 계산목적 ㅡ> 비즈니스 어플리케이션으로 응용분야가 넓어짐
ERP system
SI회사 ㅡ> 자체개발 안하는 곳에, 외주개발 해줌
Y2K문제
2000년대로 넘어갈 때
처음 컴퓨터 짠 사람들이 날짜를 6자리로 mmddyy
(P) 1900년도와 혼동
(S) mmddyyyy로 바꾸는 COLBOL 프로그램
(2.7) Basic (입문용)
(2.7) The Beginning of Timesharing : Basic
이름에서 느껴지는 것 ㅡ> '쉬운 언어'
70년대에, PC가 일반인에게 보급되면서, 입문용 언어를 만듬
그러나 프로그래머를 양성하다 보니 80년대에 쓸모가 없어진 언어
(2.7.3) 부활 (Resurgence)
쓰는 사람들 없어졌다가
Visual Basic(VB)으로 확장,
NET(닷넷)에 포합되면서 확장
(2.11) ALGOL 68
(2.11) Orthogonal Design: ALGOL 68
ALGOL68 자체는 널리쓰이진 않았지만
그 아이디어가 후손언어에 쓰였다.
ㅡ> C언어
ㅡ> Pascal
block
ㅡ> Pascal, ALGOL : begin ~ end
ㅡ> C언어 : { ~ }
if문
ㅡ> Pascal, ALGOL : if then else
ㅡ> C언어 : if else
배정문
ㅡ> Pascal, ALGOL : x := y+z;
ㅡ> C언어 : x = y+z;
(참고)
Bell Lab이라는 통신장비 회사에서
교환기로 통화하다가
컴퓨터가 보급되면서, 컴퓨터로 교환기를 만들려고
Unix를 개발
Unix를 위한 언어로 C언어를 개발
(2.13) Prolog (논리언어)
(2.13) Programing Based on Logic : Prolog
ㅡ> 논리언어
(2.14) Ada (국방부)
(2.14) History's Largest Design Effort : Ada
83년도 개발
미국방부에서 개발, 미국방부 표준언어
항공기, 미사일, 레이더같은 무기체계의 임베디드 시스템
ALGOL ㅡ> PASCAL ㅡ> Ada
(2.15) Smalltalk (최초 객체지향)
(2.15) Object-Oriented Programming : Smalltalk
최초의 객체지향 언어
"Pure" 객체지향
ㅡ> '순수'는 안좋은 의미에 가까움 (e.g. 순수한 사람)
ㅡ> 속도가 느리기 때문
(2.16) C++
(2.1+) Combining Imperative and Object-Oriented Features : C++
C ㅡ> C ++ (객체지향)
(2.17) Java
(2.17) An Imperative-Based Object-Oriented Language : Java
C ㅡ> C ++ ㅡ> Java
철학
- C++보다, Smaller Simpler Safer
- But, 지금은 Small하지 않고 커짐
Java는 Sun 마이크로시스템즈에서 만들었는데
오라클에 합병되었다.
Portability
전자제품이 계속 새로운 버전 나와서
그것을 빨리빨리 대체하기 위해 Java를 만듬
근데 Sun은 가전제품 회사가 아니라서
다른회사가 써줘야 되는데,
잘 쓰이지가 않음
그런데 웹이 등장하고
웹 프로그래밍에 Java가 적합해서 쓰임
(2.17.3) Evaluation
JVM이 C언어 컴파일러보다 10배정도 느리다
(2.18) Scripting Languages
Script : 대본, 각본
어원을 알려면 Shell 프로그래머에 대해 알아야 한다.
(그림)
@ 리눅스 로그인 ID 비밀번호
(2.18.2) JavaScript
Netscape ㅡ> 브라우저
마이크로소프트 ㅡ> OS에 IE 끼워팔기 <ㅡ Netscape가 끼워팔기라고 소송함
(2.19) C#
(2.19) The Flagship .NET Language : C#
C++, Java ㅡ> C#
MS에서 .NET 페밀리에 하나의 언어로서 만듬
(2.19.1) Design Process
Component-based software
ㅡ> 소프트웨어 공학에서 배움
ㅡ> 컴포넌트를 조합해서 제품을 만듬
이 컴포넌트들이 다른언어들로 짜여있어도 호환이 되도록
.NET framework 사용
그중 메이저 언어중 하나가 C#
(2.20) Markup Language
(2.20) Markup-Programming Hybrid Languages
ㅡ> HTML문서를 만들 때 마크해줌. '이게 어디에 위치해야 된다~'
(2.20.2) JSP
Java하고 HTML 섞음
'CS > 프로그래밍 언어론' 카테고리의 다른 글
[양PL] 6장 Data Type (0) | 2024.04.30 |
---|---|
[양PL] 5장 Names, Bindings, and Scopes (0) | 2024.04.25 |
[양PL] 4장 Laxical and Syntax Analysis (0) | 2024.04.04 |
[양PL] 3장 Syntax와 Semantics (0) | 2024.03.28 |
[양PL-1] 1장 서론 (0) | 2024.03.12 |